因为有项目要用到支付宝当面付,所以就有了这次开发记录。
支付宝SDK:https://opendocs.alipay.com/open/54/103419
支付宝当面付官方文档:https://opendocs.alipay.com/open/f540afd8_alipay.trade.precreate?pathHash=d3c84596&ref=api&scene=19
一、授权申请
1、支付宝当面付能力开通,需要企业认证才可以开通,个人认证无法开通
2、申请一个应用和密钥,绑定支付宝当面付能力(教程请去支付宝支持帮助)
二、SDK上传并加载
我这里使用的是V2版本的SDK,上传aop文件夹到服务器(test文件夹不用上传)
require_once 'aop/AopClient.php'; require_once 'aop/request/AlipayTradePrecreateRequest.php'; //当面付
三、生成付款码
接口:alipay.trade.precreate(统一收单线下交易预创建)
$aop = new AopClient(); $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do'; $aop->appId = 'app应用id'; $aop->rsaPrivateKey = '开发者私钥'; $aop->alipayrsaPublicKey = '支付宝公钥'; $aop->apiVersion = '1.0'; $aop->signType = 'RSA2'; $aop->postCharset='utf-8'; $aop->format='json'; $params = array(); $params = [ 'out_trade_no' => '商户请求唯一标识,最大64位', 'total_amount' => '10.11',//支付金额 'subject' => '支付主题', ]; $request = new AlipayTradePrecreateRequest(); $request->setNotifyUrl('https://www.77bx.com/alipay.php');//回调地址 $request->setBizContent(json_encode($params)); $result = $aop->execute($request); $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response"; $resultCode = $result->$responseNode->code; $data = array(); if(!empty($resultCode)&&$resultCode == 10000){ $out_trade_no = $result->$responseNode->out_trade_no; if($out_trade_no == $order['order_unique']){ echo $result->$responseNode->qr_code;//输出支付宝链接(扫码需要转为二维码) } }
四、扫码回调
1、手机扫描付款后,支付宝会POST数据到回调地址。需要对数据进行验签和验重
$aop = new AopClient(); $aop->alipayrsaPublicKey = '支付宝公钥'; return $aop->rsaCheckV1($params,'','RSA2');//$params是支付宝回调POST的数据,返回True/False
主要坑是支付宝可能会多次返回数据,所以一定要验重,当然验签也是一定要的。
本接口没多大的难点,细节方面注意点即可,比如付款二维码展示的时候需要对付款状态做响应。
目前有 0 条评论