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

本文详细介绍了微信小程序支付成功后如何通过SDK进行异步通知的处理,包括订单状态更新和库存管理。在接收到支付成功的通知后,首先检查订单状态,然后锁定订单并检查库存,如果库存充足则更新订单状态并减少库存,否则标记订单为已支付但未处理。此外,还展示了如何处理支付失败的情况。整个流程确保了订单处理的准确性和并发安全性。
摘要由CSDN通过智能技术生成

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

/**

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值