Skip to content

订单支付成功

liaofei edited this page Jan 20, 2021 · 1 revision

订单支付成功异步回调

目前系统仅支持微信支付,微信回调的路由为:

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的值就是回调函数的方法名,需要拼接上前缀。微信支付方法前缀为wechat,方法名以小驼峰命令。

     /**
     * 支付成功之后
     * @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 内,全部用来处理订单支付成功后的任务;

Clone this wiki locally