我是靠谱客的博主 优雅皮卡丘,这篇文章主要介绍微信小程序中支付后调用SDK的异步通知及验证处理订单方法,现在分享给大家,希望可以做个参考。

下面为大家分享一篇微信小程序之支付后调用SDK的异步通知及验证处理订单方法,具有很好的参考价值,希望对大家有所帮助

小程序之后的异步验证和订单处理

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php /** * Created by YuanPan. * User: YuanPan * Date: 2017/12/21 * Time: 15:15 */ namespace appapiservice; use appapimodelProduct; use applibenumOrderStatusEnum; use thinkDb; use thinkException; use thinkLoader; use appapimodelOrder; //在这里依然引入WxPay.API.php即可完成引入 Loader::import('WxPay.WxPay',EXTEND_PATH,'.Api.php'); class WxNotify extends WxPayNotify { //继承了父类,所以直接重写方法 public function NotifyProcess($data, &$msg) { //如果返回支付成功信息 if($data['return_code'] = 'SUCCESS'){ $orderNo = $data['out_trade_no']; Db::startTrans(); try { //判断订单状态 //在这里可以进行对数据库进行所机制 //简单说,当一个执行sql语句的事务想要操作表记录之前,先向数据库发出请求,对你访问的记录集加锁 //在这个事务释放这个锁之前,其他事务不能对这些数据进行更新操作 Order::where(['order_no'=>$orderNo])->lock(true)->find(); // $order = Order::get(['order_no'=>$orderNo]); //如果未支付 if ($order->status == 1) { $service = new appapiserviceOrder(); //查询到该订单号的商品和库存量信息 $stockStatus = $service->checkOrderStock($order->id); //如果库存量有,更新订单状态,以及减去商品库存 if ($stockStatus['pass']) { $this->updateOrderStatus($order->id, true); $this->reduceStock($stockStatus); //如果没有库存,订单状态修改为已支付,但订单未处理 } else { $this->updateOrderStatus($order->id, false); } } Db::commit(); //返回给微信 return true; }catch (Exception $e){ Db::rollback(); return fasle; } }else{ //如果微信返回失败的处理信息,那我们这里依然返回true,向微信表明态度 return true; } } //支付成功,减去商品库存 private function reduceStock($stockStatus) { //遍历减去 foreach ($stockStatus['pStatusArray'] as $v) { //使用tp5的setDec方法 Product::where(['id'=>$v['id']])->setDec('stock',$v['count']); } } //success为真,则订单修改为PAID,如果为假则修改为已支付,但订单未处理的状态,对应枚举信息修改 private function updateOrderStatus($orderID,$success) { $status = $success?OrderStatusEnum::PAID:OrderStatusEnum::PAID_BUT_OUT_OF; Order::where(['id'=>$orderID])->update(['status'=>$status]); } }
登录后复制

控制器中如下:

复制代码
1
2
3
4
5
6
7
8
9
public function receiveNotify() { //1:检查库存量防止超卖 //2:更新status状态 //3:减库存 //如果成功处理,返回成功处理信息,否则返回没有成功处理信息 $notify = new WxNotify(); $notify->handle(); }
登录后复制

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

微信小程序中购物车功能的实现

微信小程序中页面间通信的方式

微信小程序中定义全局数据和函数复用及模版的介绍

以上就是微信小程序中支付后调用SDK的异步通知及验证处理订单方法的详细内容,更多请关注靠谱客其它相关文章!

最后

以上就是优雅皮卡丘最近收集整理的关于微信小程序中支付后调用SDK的异步通知及验证处理订单方法的全部内容,更多相关微信小程序中支付后调用SDK内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(113)

评论列表共有 0 条评论

立即
投稿
返回
顶部