Skip to content

购买付费会员

liaofei edited this page Jan 20, 2021 · 1 revision

购买会员流程图

输入图片说明

输入图片说明

控制器: app/api/controller/v1/order/OtherOrderController.php
方法: public function create(Request $request)

输入图片说明

是否开启会员功能,调起services层处理方法

输入图片说明

生成未支付订单数据,调起services层处理方法

各个支付处理方法,具体逻辑,请结合具体代码分析。 免费:

输入图片说明

微信支付:

输入图片说明

余额支付:

输入图片说明

支付宝支付:

输入图片说明

创建未支付订单数据

输入图片说明


订单支付成功异步回调

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

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 = 'member' ;//支付成功回调执行方法
$body = '购买会员卡';

$payServices->pay($payType, $openid, $orderInfo['order_id'], $orderInfo['pay_price'], $successAction, $body);

app\services\pay\PayNotifyServices::class类中增加一个 以wechat为前缀,方法名称为wechatMember的方法,来执行支付异步回调任务,可自行在上图文件中增加自己想要的逻辑;

在上述发起支付中$successAction的值就是回调函数的方法名,需要拼接上前缀。微信支付方法前缀为wechat,方法名以小驼峰命令。

     /**
     * 支付成功之后
     * @param string|null $order_id 订单id
     * @param string|null $trade_no 商家订单id
     * @return bool
     */
    public function wechatMember(string $order_id = null, string $trade_no = null)
    {
        //写自己的逻辑
    }

处理订单支付成功后的逻辑由app\services\order\StoreOrderSuccessServices::class内的paySuccess处理逻辑,次方法多个订单支付成功后调用,如需修改请注意其他逻辑调用同时修改

输入图片说明

app/services/order/OtherOrderServices::class内的paySuccess方法负责会员卡购买成功后的处理,成功后主要执行以下任务:

  • 修改订单状态
  • 增加订单记录
  • 增加会员时长
  • 如果是余额支付修改用户账户余额
  • 增加支付用户消费记录
  • 给用户发送消息(由消息队列执行)
  • 计算订单节省金额(由消息队列执行)
  • 用户购买次数增加和检测是否能成为推广人(由消息队列执行)
  • 发送模版消息、短信(由消息队列执行)
  • 消费返积分(由消息队列执行)

订单支付成功后的消息队列执行任务存放在:crmeb/jobs/OtherOrderJob::class 内,全部用来处理订单支付成功后的任务;

Clone this wiki locally