首页 > 语言 > PHP > 正文

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

2024-05-05 00:01:42
字体:
来源:转载
供稿:网友

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

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


注:相关教程知识阅读请移步到PHP教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选