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

互联网 18-6-27
下面为大家分享一篇微信小程序之支付后调用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();   }

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

微信小程序中购物车功能的实现

微信小程序中页面间通信的方式

微信小程序中定义全局数据和函数复用及模版的介绍

以上就是微信小程序中支付后调用SDK的异步通知及验证处理订单方法的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 处理订单
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:如何解决微信小程序中出现的错误:{"baseresponse":{"errcode":-80002,"errmsg":""}}

相关资讯