久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

微信小程序之支付后調用SDK的異步通知及驗證處理訂單方法

下面小編就為大家分享一篇微信小程序之支付后調用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();
  }

以上這篇微信小程序之支付后調用SDK的異步通知及驗證處理訂單方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持。

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

下面小編就為大家分享一篇PHP實現APP微信支付的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
本篇文章主要介紹了Yii2.0使用阿里云OSS的SDK上傳圖片、下載、刪除圖片示例,具有一定的參考價值,有興趣的可以了解一下
本篇文章主要介紹了Laravel使用支付寶進行支付的示例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
這篇文章主要介紹了thinkPHP微信分享接口JSSDK用法,結合實例形式分析了thinkPHP調用微信分享接口的具體步驟與相關操作技巧,需要的朋友可以參考下
這篇文章主要為大家詳細介紹了微信掃碼支付成功之后自動跳轉php版代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
這篇文章主要介紹了PHP實現RSA簽名生成訂單功能,涉及php隨機字符串及編碼相關操作技巧,以及支付寶公鑰文件讀取與使用方法,需要的朋友可以參考下
主站蜘蛛池模板: 国产视频福利一区 | 亚洲精品一区二区三区丝袜 | 日韩精品中文字幕一区二区三区 | 日韩中文字幕2019 | 国产高清视频 | 日韩一区二区在线看 | 欧美日韩中文国产一区发布 | 手机av网| 成人在线视频网站 | 日本中出视频 | 国产精品黄 | 国产一区二区自拍 | 日韩一级免费大片 | 国产二区精品视频 | 久久99精品久久久久婷婷 | 91在线播| 久久一区二区三区四区 | 中文字幕乱码亚洲精品一区 | 久久久久久久久国产成人免费 | 久久久久国产一区二区三区四区 | 国产在线精品一区二区三区 | 欧美a在线看 | 久久国产精品一区二区三区 | 人人爽人人草 | 欧美日韩在线一区二区三区 | 成人免费观看视频 | av黄色在线观看 | 亚洲毛片在线观看 | 中文字幕久久精品 | 亚洲成人av在线播放 | 亚洲一区二区免费 | 亚洲免费福利视频 | 一二区电影 | 日韩一区二区在线视频 | 国产精品日韩一区 | 日韩av啪啪网站大全免费观看 | 国产情侣啪啪 | 欧美精品第一区 | 国产免费一区二区三区 | 国产成人综合一区二区三区 | 中文字幕在线精品 |