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

2025-05-29 0 53

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

?

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的异步通知及验证处理订单方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持快网idc。

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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 微信小程序之支付后调用SDK的异步通知及验证处理订单方法 https://www.kuaiidc.com/92883.html

相关文章

发表评论
暂无评论