微信小程序服务器支付sdk,微信小程序之支付后如何调用SDK的异步通知

微信小程序之支付后如何调用SDK的异步通知

发布时间:2021-07-05 10:47:33

来源:亿速云

阅读:57

作者:小新

这篇文章主要介绍微信小程序之支付后如何调用SDK的异步通知,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

小程序之后的异步验证和订单处理<?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]);

}

}

控制器中如下:public function receiveNotify()

{

//1:检查库存量防止超卖

//2:更新status状态

//3:减库存

//如果成功处理,返回成功处理信息,否则返回没有成功处理信息

$notify = new WxNotify();

$notify->handle();

}

以上是“微信小程序之支付后如何调用SDK的异步通知”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值