-
Notifications
You must be signed in to change notification settings - Fork 1.6k
订单支付成功
目前系统仅支持微信支付,微信回调的路由为:
Route::any('wechat/notify', 'v1.wechat.WechatController/notify');//公众号支付回调
Route::any('routine/notify', 'v1.wechat.AuthController/notify');//小程序支付回调
小程序支付回调路由和公众号支付异步回调路由分开,支付都同为微信支付,但程序内部区分了小程序和公众号的services;
发起支付内部全部使用EasyWeChat扩展携带的发起支付,不做过多讲解;EasyWeChat文档
小程序services下的支付回调代码 公众号services下的支付异步回调代码
发起支付时由微信支付统一下单API attach
参数控制异步回调返回交由那些方法处理结果。再由app\services\pay\PayNotifyServices::class
统一处理;
例如:
发起支付调用app\services\pay\PayServices::class
use app\services\pay\PayServices;
$payServices = new PayServices();
$payType = '支付类型';//支持类型 routine weixinh5 weixin
$openid = '用户的openid';//当$payType == 'weixinh5 ' 时$openid可为空
$orderInfo['order_id'] = '订单号';
$orderInfo['pay_price'] = '订单金额';//以元为单位
$successAction = 'test' ;//支付成功回调执行方法
$body = '冬装上新,潮流男款西裤';
$payServices->pay($payType, $openid, $orderInfo['order_id'], $orderInfo['pay_price'], $successAction, $body);
在app\services\pay\PayNotifyServices::class
类中增加一个 以wechat
为前缀,方法名称为wechatTest
的方法,来执行支付异步回调任务,可自行在上图文件中增加自己想要的逻辑;
在上述发起支付中
$successAction
的值就是回调函数的方法名,需要拼接上前缀。微信支付方法前缀为
/**
* 支付成功之后
* @param string|null $order_id 订单id
* @param string|null $trade_no 商家订单id
* @return bool
*/
public function wechatTest(string $order_id = null, string $trade_no = null)
{
//写自己的逻辑
}
处理订单支付成功后的逻辑由app\services\order\StoreOrderSuccessServices::class
内的paySuccess
处理逻辑,次方法多个订单支付成功后调用,如需修改请注意其他逻辑调用同时修改
app\services\pay\PayNotifyServices::class
内的wechatProduct
方法负责订单支付成功后的处理,成功后主要执行以下任务:
- 修改订单状态为已支付
- 如果是拼团订单创建拼团
- 增加用户购买次数
- 如果是秒杀订单回退秒杀库存占用
- 修改发票开票状态
- 增加支付用户消费记录
- 给用户发送消息(由消息队列执行)
- 计算订单节省金额(由消息队列执行)
- 用户购买次数增加和检测是否能成为推广人(由消息队列执行)
- 增加购买商品时关联的用户标签(由消息队列执行)
- 发送模版消息、客服消息、短信给管理员(由消息队列执行)
- 小票打印(由消息队列执行)
- 支付成功后想用户发送消息(由消息队列执行)
- 检测会员等级(由消息队列执行)
- 向后台发送长连接消息(由消息队列执行)
订单支付成功后的消息队列执行任务存放在:\crmeb\jobs\OrderJob::class
内,全部用来处理订单支付成功后的任务;