本文为CI集成支付宝即时到账支付接口
1、下载支付宝官方demo ;即时到账交易接口(create_direct_pay_by_user)(DEMO下载) 原文地址:https://doc.open.alipay.com/doc2/detail?treeId=62&articleId=103566&docType=1
2、登录支付宝https://www.alipay.com/ 下载CA证书。将证书放在下载的demo文件夹的根目录下。
2、将下载的create_direct_pay_by_user-PHP-UTF-8文件夹改为AliPay;并到到CI框架libraries/ 目录下。
3、在libraries/ 目录下新建CI_Alipay.php 文件,内容如下:
4、在CI框架application/config/目录下 新建alipay_config.php 内容如下:
5、在项目控制器controllers/ 目录下新建order.php 内容如下:
isNeedLogin = TRUE;
parent::__construct();
}
/**
* aliPay 【支付宝支付接口】
* @param int $id 订单ID
* @author lyne
*/
public function aliPay($id){
// 调用支付宝支付接口配置信息
$this->load->config('alipay_config',TRUE);
/*>>>>>>>>>>>>> 查预先生成的订单信息,根据自己情况 <<<<<<<<<<<<<<
根据订单ID查询预订单信息
包括:
订单总额、订单编号、订单商品等。
>>>>>>>>>>>>> 根据自己情况 END <<<<<<<<<<<<<<<<<*/
// 加载支付宝支付请求类库
$this->load->library('CI_Alipay',$this->config->item('alipay_config'));
$parameter = array(
'service' => $this->config->item('service','alipay_config'),
'partner' => $this->config->item('partner','alipay_config'),
'payment_type' => $this->config->item('payment_type','alipay_config'),
'notify_url' => $this->config->item('notify_url','alipay_config'),
'return_url' => $this->config->item('return_url','alipay_config'),
'seller_id' => $this->config->item('seller_id','alipay_config'),
'out_trade_no' => '订单编号', // 订单编号
'subject' => '填写订单商品', // 订单商品
'total_fee' => '订单总额', // 订单总额
'body' => '商品描述', // 商品描述
'show_url' => '', // 选填
'anti_phishing_key' => '', // 选填
'exter_invoke_ip' => '', // 选填
'_input_charset' => $this->config->item('input_charset','alipay_config')
);
$body = $this->ci_alipay->buildRequestForm($parameter,"get","确认");
echo $body;
}
}
6、以上步骤完成,下面支付就交给支付宝了。可以选择直接扫二维码支付,可以登录支付宝账号后操作
7、支付完成后,支付宝会通过异步通知地址(即alipay_config.php文件中的$config['notify_url']地址),随后支付宝通过同步通知地址(即alipay_config.php文件中的$config['return_url']地址)。
7-1、那么一般情况我们会在异步通知内接收到支付成功信息后处理业务逻辑。注意:在异步通知内收到通知后,一定要返回success告知支付宝我已经收到你的通知,让它闭嘴。否则它会在25小时以内完成8次通知(通知的间隔频率一般是:4m,10m,10m,1h,2h,6h,15h);
7-2、通过同步通知下收到成功信息后处理一些简单验证后跳转或提示成功信息。
8、异步通知 内容如下:我也写在了order控制器内了。看你心情哈
/**
* alipayNotifyUrl 异步(处理支付成功后逻辑)
*/
public function alipayNotifyUrl(){
require_once(APPPATH."/libraries/AliPay/lib/alipay_notify.class.php");
// 调用支付宝支付接口配置信息
$this->load->config('alipay_config');
$alconfig['partner']=$this->config->item('partner'); // 合作身份者ID
$alconfig['seller_id']=$this->config->item('seller_id'); // 收款支付宝账号
$alconfig['key']=$this->config->item('key'); // MD5密钥,安全检验码
$alconfig['notify_url']=$this->config->item('notify_url'); // 服务器异步通知页面路径
$alconfig['return_url']=$this->config->item('return_url'); // 页面跳转同步通知页面路径
$alconfig['input_charset']=$this->config->item('input_charset'); // 字符编码格式
$alconfig['cacert']=$this->config->item('cacert'); // ca证书路径地址
$alconfig['transport']=$this->config->item('transport'); // 访问模式
$alconfig['payment_type']=$this->config->item('payment_type'); // 支付类型
$alconfig['service']=$this->config->item('service'); // 产品类型
$alconfig['sign_type']=$this->config->item('sign_type'); // 签名方式
//计算得出通知验证结果
$alipayNotify = new AlipayNotify($alconfig);
$verify_result = $alipayNotify->verifyNotify();
// log_message('error',$verify_result); 可以用ci自带日志调试或使用支付宝的logResult();
if($verify_result) {//验证成功
//获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表
//商户订单号
$out_trade_no = $_POST['out_trade_no'];
//支付宝交易号
$trade_no = $_POST['trade_no'];
//交易状态
$trade_status = $_POST['trade_status'];
if($_POST['trade_status'] == 'TRADE_SUCCESS') {
// 支付成功处理业务逻辑,例如修改订单支付状态等等
// >>>>>>>>>>>>>>>> 根据自身情况,处理业务逻辑 <<<<<<<<<<<<<<<<<<<
}
echo "success"; //请不要修改或删除
} else {
//验证失败
echo "fail";
//调试用,写文本函数记录程序运行情况是否正常
//logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
}
}
9、同步通知 内容如下:我也写在了order控制器内了。看你心情哈
/**
* alipayReturnUrl 支付宝页面跳转同步通知页面(处理支付成功后提示页面)
* @author
*/
public function alipayReturnUrl(){
require_once(APPPATH."/libraries/AliPay/lib/alipay_notify.class.php");
// 调用支付宝支付接口配置信息
$this->load->config('alipay_config');
$alconfig['partner']=$this->config->item('partner'); // 合作身份者ID
$alconfig['seller_id']=$this->config->item('seller_id'); // 收款支付宝账号
$alconfig['key']=$this->config->item('key'); // MD5密钥,安全检验码
$alconfig['notify_url']=$this->config->item('notify_url'); // 服务器异步通知页面路径
$alconfig['return_url']=$this->config->item('return_url'); // 页面跳转同步通知页面路径
$alconfig['input_charset']=$this->config->item('input_charset'); // 字符编码格式
$alconfig['cacert']=$this->config->item('cacert'); // ca证书路径地址
$alconfig['transport']=$this->config->item('transport'); // 访问模式
$alconfig['payment_type']=$this->config->item('payment_type'); // 支付类型
$alconfig['service']=$this->config->item('service'); // 产品类型
$alconfig['sign_type']=$this->config->item('sign_type'); // 签名方式
//计算得出通知验证结果
$alipayNotify = new AlipayNotify($alconfig);
$verify_result = $alipayNotify->verifyReturn();
if($verify_result) {//验证成功
//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表
//商户订单号
$out_trade_no = $_GET['out_trade_no'];
//支付宝交易号
$trade_no = $_GET['trade_no'];
//交易状态
$trade_status = $_GET['trade_status'];
if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
// echo '交易成功!跳转成功页面';
//如果有做过处理,不执行商户的业务程序
}else {
echo "trade_status=".$_GET['trade_status'];
}
} else {
//验证失败
//如要调试,请看alipay_notify.php页面的verifyReturn函数
echo "验证失败";
}
}
10、即时到账有密退款接口也都差不多,我这里就不多说了。想必做到这里你也玩转支付宝支付了吧。是不是so easy~