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

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

rush:xhtml;"> 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]);
}
}

控制器中如下:

handle(); }

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


服务器优化必备:深入了解PHP8底层开发原理
Golang的网络编程:如何快速构建高性能的网络应用?
Golang和其他编程语言的对比:为什么它的开发效率更高?
PHP8底层开发原理揭秘:如何利用新特性创建出色的Web应用
将字符重新排列以形成回文(如果可能)在C++中
掌握PHP8底层开发原理和新特性:创建高效可扩展的应用程序
服务器性能优化必学:掌握PHP8底层开发原理
PHP8新特性和底层开发原理详解:优化应用性能的终极指南
将 C/C++ 代码转换为汇编语言
深入研究PHP8底层开发原理:创建高效可扩展的应用程序
C++程序查找法向量和迹
PHP8底层开发原理实战指南:提升服务器效能
重排数组,使得当 i 为偶数时,arr[i] >= arr[j],当 i 为奇数时,arr[i] <= arr[j],其中 j < i,使用 C++ 语言实现
Golang的垃圾回收:为什么它可以减少开发人员的负担?
C++程序:将一个数组的所有元素复制到另一个数组中
Golang:构建智能系统的基石
为什么AI开发者应该关注Golang?
在C和C++中,逗号(comma)的用法是用来分隔表达式或语句
PHP8底层开发原理解析及新特性应用实例
利用PHP8底层开发原理解析新特性:如何构建出色的Web应用