国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > 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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 揭东县| 杭州市| 滕州市| 怀化市| 丹凤县| 铅山县| 肥西县| 大理市| 固始县| 连平县| 西安市| 来宾市| 山丹县| 晋城| 米脂县| 南部县| 凤山市| 武山县| 轮台县| 新沂市| 桃园市| 苏尼特右旗| 新沂市| 祁连县| 滦南县| 于田县| 堆龙德庆县| 永德县| 大余县| 南溪县| 达州市| 沙洋县| 苍山县| 布拖县| 尉犁县| 怀集县| 新巴尔虎左旗| 台北市| 濮阳市| 赤峰市| 安平县|