payment 项目2.0版本 php
通过这一段时间,终于把支付宝支付相关接口完成了。文档将陆续更新。这里先把回调的文档补充完成。这样结合以前 提供的 支付宝即时到账接口 才能造成一个闭环。完成一次完整的支付流程。git
支付服务商(支付宝、微信、PayPal等)处理完支付数据后。会将处理的结果数据经过服务器主动通知的方式通知给商户网站。这些处理结果数据就是服务器异步通知参数。github
简单来讲,就是支付成功后,支付服务商告诉你,钱已经到帐了,你应该把别个买的东西给别个了。数组
因为本次发布的接口主要都是与支付宝相关,所以本次回调的部分代码也主要先上支付宝的。微信等后期开发完成将更新相关文档。服务器
针对不一样的回调,我提供了统一的调用方式,让客户端专一本身的业务。不在处理支付相关的签名验证、来源验证的问题。下面代码是统一的回调处理代码微信
// 支付宝配置文件 $aliconfig = require_once __DIR__ . '/aliconfig.php'; // 获取异步通知上下文 $notify = new NotifyContext(); // 客户端的业务逻辑类。处理如:订单更新 $callback = new TestNotify(); try { // 支付宝回调 $notify->initNotify(Config::ALI, $aliconfig); $notify->notify($callback); } catch (PayException $e) { echo $e->errorMessage();exit; }
客户端类 TestNotify
的注意事项 ,必定要继承 PayNotifyInterface
这个类异步
use Payment\Notify\PayNotifyInterface; class TestNotify implements PayNotifyInterface { /** * 客户端的业务逻辑, * @param array $data * @return bool 返回值必定是bool值 * @author helei */ public function notifyProcess(array $data) { // 通常支付的处理业务 1. 检查订单是否存在 2. 检查金额是否正确 3. 检查订单是否已经处理过(防止重复通知) 4. 更新订单 return true; } }
在 TestNotify::notifyProcess()
方法中,我注释了常规的订单处理流程。这个地方客户端可根据本身的状况进行适当调整。只是返回结果必定须要 布尔值网站
如今的重点是 TestNotify::notifyProcess()
方法中的参数 $data 中具体包含的值。根据不一样的回调业务,返回的值也不同。具体请往下看。ui
支付宝的回调,与支付相关的对应三种类型。spa
trade_status_sync 支付行为相关的异步通知
batch_refund_notify 有密批量退款的异步通知
batch_trans_notify 有密批量付款到支付宝帐号的通知
该回调发生在:移动支付、即时到账、手机网站支付接口调用后,若是支付成功,支付宝会发起回调接口。
返回的对应数据以下表
参数 | 参数名 | 参数说明 | 必须 |
---|---|---|---|
subject | 商品名称 | 订单的关键字 | 是 |
body | 商品描述 | 提交订单时的body值 | 是 |
amount | 交易金额 | 本次订单总金额 | 是 |
channel | 支付渠道 | 本处取值: ali | 是 |
order_no | 商户网站惟一订单号 | 商户生成的订单号,必须确保在系统中惟一 | 是 |
buyer_id | 买家支付宝帐户号 | 能够是Email或手机号码。 | 是 |
trade_state | 交易状态 | 支付成功与否,可取值:success not_pay | 是 |
transaction_id | 支付宝交易号 | 支付宝系统中的交易流水号,可用于查询订单状态 | 是 |
time_end | 交易付款时间 | 格式为2016-07-28 16:01:01 | 是 |
notify_time | 通知时间 | 格式为2016-07-28 16:01:01 | 是 |
notify_type | 通知类型 | 此处为:trade 表示交易 | 是 |
extra_param | 商户自定义参数 | 仅即时到账支持 | 否 |
传入到 TestNotify::notifyProcess()
中的数组,包括以上key。可根据以上内容进行业务处理。
本类回调发生在操做退款后,支付宝会通知服务器是否退款成功。退款的界面,以下图:
输入支付密码后,就可完成退款。退款后支付宝会向商户服务器进行异步通知。他返回的数据以下:
参数 | 参数名 | 参数说明 | 必须 |
---|---|---|---|
channel | 渠道 | 本处取值: ali | 是 |
refund_no | 商户网站惟一退单号 | 商户生成的退单号,必须确保在系统中惟一 | 是 |
success_num | 退款成功总数 | 0<= success_num<= 总退款笔数 | 是 |
notify_time | 通知时间 | 格式为2016-07-28 16:01:01 | 是 |
notify_type | 通知类型 | 此处为:trade 表示交易 | 是 |
该回调发生在批量付款后。返回的数据以下:
参数 | 参数名 | 参数说明 | 必须 |
---|---|---|---|
channel | 渠道 | 本处取值: ali | 是 |
trans_no | 商户网站惟一转帐单号 | 商户生成的转帐单号,必须确保在系统中惟一 | 是 |
pay_name | 付款帐号姓名 | 若是是我的为昵称,公司则为公司名称 | 是 |
pay_account | 付款帐号 | 邮箱或者手机号码 | 是 |
notify_time | 通知时间 | 格式为2016-07-28 16:01:01 | 是 |
notify_type | 通知类型 | 此处为:trade 表示交易 | 是 |
success | 转帐成功的详细信息 | 返回的是一个数组 | 是 |
fail | 转帐失败的详细信息 | 返回的是一个数组 | 是 |
备注:
success返回的数组中,单条记录格式以下:
流水号^收款方帐号^收款帐号姓名^付款金额^成功标识(S)^成功缘由(null)^支付宝内部流水号^完成时间。
fail返回数据中的单条记录格式以下:
流水号^收款方帐号^收款帐号姓名^付款金额^失败标识(F)^失败缘由^支付宝内部流水号^完成时间。
OK。到此支付宝相关的回调通知数据,已经所有处理完成。这里须要你们注意一个问题,上面的数据并非完整的支付宝返回数据。大部分通过了个人简化,若是有须要的参数,没有返回可执行修改源码或者联系我。