-
Notifications
You must be signed in to change notification settings - Fork 1.6k
购买付费会员
控制器: 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
的值就是回调函数的方法名,需要拼接上前缀。微信支付方法前缀为
/**
* 支付成功之后
* @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
内,全部用来处理订单支付成功后的任务;