gpt4 book ai didi

微信小程序之支付后调用SDK的异步通知及验证处理订单方法

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 28 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章微信小程序之支付后调用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 app\api\service;
 
use app\api\model\Product;
use app\lib\enum\OrderStatusEnum;
use think\Db;
use think\Exception;
use think\Loader;
use app\api\model\Order;
 
//在这里依然引入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 \app\api\service\Order();
           //查询到该订单号的商品和库存量信息
           $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();
}

以上这篇微信小程序之支付后调用SDK的异步通知及验证处理订单方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.

原文链接:http://blog.csdn.net/myarche/article/details/78865925 。

最后此篇关于微信小程序之支付后调用SDK的异步通知及验证处理订单方法的文章就讲到这里了,如果你想了解更多关于微信小程序之支付后调用SDK的异步通知及验证处理订单方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com