之前有一篇文章介绍了支付宝当面付的简单使用教程,文章底部有链接,今天分享下扫码支付异步通知实现支付宝实时返佣金或者货款结算的教程。比如:买家A扫码支付100元到B账户,B账户实时结算佣金给C账户。这个方法适用手机wap、电脑pc网站、app、当面付扫码等支持异步通知的支付方式。
扫码的基础教程这里就不多说了,打字很累。。哈哈。、。。
1.异步通知接收:
f2fpay/config/config.php
中填写异步地址。不能有跳转。
异步可以参考手机wap或者电脑网站支付的异步文件,验证都是一样的。
2.验证异步通知:
官方提供了联调日志的查询。可以查询到请求日志和异步通知日志。
3.异步接口获取支付宝通知的信息:
//商户订单号 $out_trade_no = $_POST[‘out_trade_no’]; //支付宝交易号 $trade_no = $_POST[‘trade_no’]; //交易状态 $trade_status = $_POST[‘trade_status’]; //买家支付宝用户号 $buyer_id = $_POST[‘buyer_id’]; //支付金额 $total_amount = $_POST[‘total_amount’];
可根据自己的需要添加。
4.对支付宝的通知信息进行判断:
我的代码很简单,没有用数据库,就是一个简单的txt文件写入和查询结果。
else if ($_POST[‘trade_status’] == ‘TRADE_SUCCESS’) { // file_put_contents(“success.txt”, date ( “Y-m-d H:i:s” ) . ” ” .$out_trade_no.”, ” .$trade_no. “\r\n”, FILE_APPEND); // } $con = file_get_contents(“success.txt”); $str = strstr($con,$trade_no); if($str) { //已转过 } else { require_once ‘zhuan.php’; file_put_contents(“success.txt”, date ( “Y-m-d H:i:s” ) . ” “ .$out_trade_no.“, “ .$trade_no.“, “ .$buyer_id. “\r\n”, FILE_APPEND); } } echo “success”; //请不要修改或删除
$buyer_id
为收款方账户
我们执行的异步代码必须判断trade_status
的状态为TRADE_SUCCESS
,支付宝官方说的,只有TRADE_SUCCESS才会发送异步通知,查看联调异步日志,等待买家付款状态WAIT_BUYER_PAY
也是会异步通知的。支付完成后还会异步通知一次。如果执行的代码在验证后面而不去做订单状态判断,就会造成损失的。。。说简单点,扫码提交订单没有付款,异步页面也会执行的。。。
到这里异步基本上就完工了。
alipay.fund.trans.toaccount.transfer(单笔转账到支付宝账户接口)必须要企业用户才能签约。
下载服务端sdk,这个是做好现成的php转账代码。
$aop = new AopClient (); $aop->gatewayUrl = ‘https://openapi.alipay.com/gateway.do’; $aop->appId = ‘your app_id’; $aop->rsaPrivateKey = ‘请填写开发者私钥去头去尾去回车,一行字符串’; $aop->alipayrsaPublicKey=’请填写支付宝公钥,一行字符串’; $aop->apiVersion = ‘1.0’; $aop->signType = ‘RSA2’; $aop->postCharset=’utf-8′; $aop->format=’json’; $date=date(“YmdHis”); $arr=range(1000,9999); shuffle($arr); $request = new AlipayFundTransToaccountTransferRequest (); // 收款方账户类型为:ALIPAY_LOGONID:支付宝账号对应的支付宝唯一用户号。以2088开头的16位纯数字组成。 $request->setBizContent(“{“ . “\”out_biz_no\”:\””.$date.$arr[0].“\”,” . “\”payee_type\”:\”ALIPAY_LOGONID\”,” . “\”payee_account\”:\”abc@77nn.net\”,” . “\”amount\”:\”0.1\”,” . “\”payer_show_name\”:\”转账\”,” . “\”payee_real_name\”:\”讯沃blog\”,” . “\”remark\”:\”php转0.1\”” . “}”); // //收款方账户类型为:ALIPAY_USERID:支付宝登录号,支持邮箱和手机号格式。 // $request->setBizContent(“{” . // “\”out_biz_no\”:\””.$date.$arr[0].”\”,” . // “\”payee_type\”:\”ALIPAY_USERID\”,” . // “\”payee_account\”:\”请填写您转账的账号\”,” . // “\”amount\”:\”0.1\”,” . // “\”remark\”:\”单笔转账测试\”” . // “}”); $result = $aop->execute ($request); $responseNode = str_replace(“.”, “_”, $request->getApiMethodName()) . “_response”; $resultCode = $result->$responseNode->code; if(!emptyempty($resultCode)&&$resultCode == 10000){ echo “成功</br>”; } else { echo “失败</br>”; } var_dump($result);
alipayrsaPublicKey
支付宝公钥
rsaPrivateKey
开发者私钥
out_biz_no
商户转账订单号
payee_type
收款方账户类型。可取值:
1、ALIPAY_USERID:支付宝账号对应的支付宝唯一用户号。以2088开头的16位纯数字组成。
2、ALIPAY_LOGONID:支付宝登录号,支持邮箱和手机号格式。
payee_account
收款方账户。与payee_type配合使用。付款方和收款方不能是同一个账户。
amount
转账金额
notify_url.php
已经是取到支付宝传回来的total_amount
值,然后做一下佣金比例计算后就ok。
只支持2位小数,小数点前最大支持13位,金额必须大于等于0.1元。
最大转账金额以实际签约的限额为准。
上面的4个参数是必须的。其他的可以根据自己需要增加。
评论0