微信小程序之支付后调用SDK的异步通知及验证处理订单方法
2018-01-02 14:03
836 查看
小程序之后的异步验证和订单处理
<?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的异步通知及验证处理订单方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
相关文章推荐
- 微信小程序之支付后调用SDK的异步通知及验证处理订单
- Thinkphp 5.0版本整合微信扫码支付接口,含模型验证异步通知等完整实例
- webview实现支付后的业务逻辑处理,小程序webview完成微信支付后的处理方法——微信web-view高级用法12
- Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)
- [置顶] Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)
- 原创:微信小程序调用【统一下单】、【支付】、【支付回调】api并处理请求
- PHP:微信小程序调用【统一下单】【微信支付】【支付回调】API;XML转Array,Array转XML方法(通用)
- 微信小程序利用co处理异步流程的方法教程
- 开发自己的Web服务处理程序(以支持Ajax框架异步调用Web服务方法)
- Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- 开发自己的Web服务处理程序(以支持Ajax框架异步调用Web服务方法)
- 浅析Microsoft .net PetShop程序中的购物车和订单处理模块(Profile技术,异步MSMQ消息)
- 浅析Microsoft .net PetShop程序中的购物车和订单处理模块(Profile技术,异步MSMQ消息)
- 浅析Microsoft .net PetShop程序中的购物车和订单处理模块(Profile技术,异步MSMQ消息) 选择自 wangyihust 的 Blog
- 浅析Microsoft .net PetShop程序中的购物车和订单处理模块(Profile技术,异步MSMQ消息)
- 浅析Microsoft .net PetShop程序中的购物车和订单处理模块(Profile技术,异步MSMQ消息)
- 浅析Microsoft .net PetShop程序中的购物车和订单处理模块(Profile技术,异步MSMQ消息)
- 浅析Microsoft .net PetShop程序中的购物车和订单处理模块(Profile技术,异步MSMQ消息)
- 浅析Microsoft .net PetShop程序中的购物车和订单处理模块(Profile技术,异步MSMQ消息)