一嘉

一个文件解决支付宝异步回调
网上有许多支付宝当面付的接入教程,但接入之后异步回调却不会配置,这里带来一个文件解决异步回调,希望可以给各位想接入...
扫描右侧二维码阅读全文
01
2018/03

一个文件解决支付宝异步回调

网上有许多支付宝当面付的接入教程,但接入之后异步回调却不会配置,这里带来一个文件解决异步回调,希望可以给各位想接入支付宝支付的带来些许帮助和借鉴意义。

使用步骤:

用户登陆支付宝钱包,点击首页「付款」进入付款码界面;
收银员在商家收银系统操作生成订单,用户确认支付金额;
用户出示钱包的「付款码」,收银员用扫码设备来扫描用户手机上的条码/二维码后,商家收银系统提交支付;
付款成功后商家收银系统会拿到支付成功或者失败的结果。
本文主要解决在拿到结果后的处理逻辑

部署的注意事项

PHP 5.0 以上
curl 的支持
站点开启 SSL
代码开头的配置信息必须完善

首先,我们来解释这个文件:

$alipayPublicKey='';

这里填写的是支付宝的公钥,具体位置在http://open.alipay.com/->;应用中心->选择应用->应用信息->根据你的加密方法选择你的公钥。

$subject = $_POST['subject'];//支付宝返回的购买项目
$buyer_id = $_POST['buyer_id'];//付款用户的支付宝ID
$receipt_amount = $_POST['receipt_amount'];//实际支付金额
$gmt_payment = $_POST['gmt_payment'];//支付时间
$out_trade_no = $_POST['out_trade_no'];//商户的订单号
$fund_bill_list = $_POST['fund_bill_list'];//支付方式,这里能看到是花呗支付还是余额支付
$buyer_logon_id = $_POST['buyer_logon_id'];//付款用户的支付宝账号
$trade_no = $_POST['trade_no'];//支付宝订单号
$trade_status = $_POST['trade_status'];//实际的支付方式
$servername = "YOUR IP";//你的数据库IP
$username = "name";//你的数据库用户名
$password = "passwd";//你的数据库密码
$dbname = "dbname";//你的数据库名称


$aliPay = new AlipayService($alipayPublicKey);
$result = $aliPay->rsaCheck($_POST,$_POST['sign_type']);

收到支付宝服务器的通知,开始验证签名。

if($result===true){

如果验签通过,执行以下逻辑(这里进行入库操作,当然你可以根据你的需求进行修改)

$conn = mysqli_connect($servername, $username, $password, $dbname);

与数据库进行py连接,为以后的py交易做铺垫

$sql = "insert into pay(subject,buyer_id,receipt_amount,gmt_payment,out_trade_no,fund_bill_list,buyer_logon_id,trade_no,trade_status) values ('$subject','$buyer_id','$receipt_amount','$gmt_payment','$out_trade_no','$fund_bill_list','$buyer_logon_id','$trade_no','$trade_status')";

连接成功,写入支付宝返回的“购买项目”、“付款用户ID”、“实际支付金额”、“支付时间”、“商户订单号”、“支付方式”、“付款用户的支付宝账号”、“支付宝订单号”、“支付状态”

if (mysqli_query($conn, $sql)) {
                    echo 'success';

如果写入成功的话,则输出success。

重要提醒:如果商户反馈给支付宝的字符不是success这7个字符,支付宝服务器会不断重发通知,直到超过24小时22分钟。一般情况下,25小时以内完成8次通知(通知的间隔频率一般是:4m,10m,10m,1h,2h,6h,15h);

} else {
                    echo "Error: " . $sql . "<br>" . mysqli_error($conn);
                    }

如果写入失败,则输出error。

mysqli_close($conn);

结束操作。

wiki:
生成 RSA 密钥:https://docs.open.alipay.com/291/105971
创建应用:https://docs.open.alipay.com/200/105310

结束,以下是GitHub的地址,作者是dedemao
https://github.com/dedemao/alipay

Last modification:April 9th, 2018 at 12:47 am
If you think my article is useful to you, please feel free to appreciate

Leave a Comment