微信小程序之支付后調(diào)用SDK的異步通知及驗證處理訂單方法
更新時間:2018年01月02日 14:03:44 作者:myarche
下面小編就為大家分享一篇微信小程序之支付后調(diào)用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 { //判斷訂單狀態(tài) //在這里可以進(jìn)行對數(shù)據(jù)庫進(jìn)行所機(jī)制 //簡單說,當(dāng)一個執(zhí)行sql語句的事務(wù)想要操作表記錄之前,先向數(shù)據(jù)庫發(fā)出請求,對你訪問的記錄集加鎖 //在這個事務(wù)釋放這個鎖之前,其他事務(wù)不能對這些數(shù)據(jù)進(jìn)行更新操作 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); //如果庫存量有,更新訂單狀態(tài),以及減去商品庫存 if ($stockStatus['pass']) { $this->updateOrderStatus($order->id, true); $this->reduceStock($stockStatus); //如果沒有庫存,訂單狀態(tài)修改為已支付,但訂單未處理 } else { $this->updateOrderStatus($order->id, false); } } Db::commit(); //返回給微信 return true; }catch (Exception $e){ Db::rollback(); return fasle; } }else{ //如果微信返回失敗的處理信息,那我們這里依然返回true,向微信表明態(tài)度 return true; } } //支付成功,減去商品庫存 private function reduceStock($stockStatus) { //遍歷減去 foreach ($stockStatus['pStatusArray'] as $v) { //使用tp5的setDec方法 Product::where(['id'=>$v['id']])->setDec('stock',$v['count']); } } //success為真,則訂單修改為PAID,如果為假則修改為已支付,但訂單未處理的狀態(tài),對應(yīng)枚舉信息修改 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狀態(tài) //3:減庫存 //如果成功處理,返回成功處理信息,否則返回沒有成功處理信息 $notify = new WxNotify(); $notify->handle(); }
以上這篇微信小程序之支付后調(diào)用SDK的異步通知及驗證處理訂單方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- 微信小程序中使用Async-await方法異步請求變?yōu)橥秸埱蠓椒?/a>
- 詳解將微信小程序接口Promise化并使用async函數(shù)
- 微信小程序 緩存(本地緩存、異步緩存、同步緩存)詳解
- 詳解微信小程序 同步異步解決辦法
- 微信小程序異步處理詳解
- 微信小程序 wx.request方法的異步封裝實例詳解
- 微信小程序onLaunch異步,首頁onLoad先執(zhí)行?
- 微信小程序中使用ECharts 異步加載數(shù)據(jù)的方法
- 微信小程序中使用Promise進(jìn)行異步流程處理的實例詳解
- 微信小程序 es6-promise.js封裝請求與處理異步進(jìn)程
- 微信小程序利用co處理異步流程的方法教程
- 微信小程序中使用 async/await的方法實例分析
相關(guān)文章
php權(quán)限調(diào)整強(qiáng)制用戶退出的解決步驟
這篇文章主要介紹了php權(quán)限調(diào)整強(qiáng)制用戶退出的解決步驟,當(dāng)用戶登錄時,將用戶的登錄狀態(tài)和其他相關(guān)信息存儲在服務(wù)器端,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09ThinkPHP5郵件發(fā)送服務(wù)封裝(可發(fā)附件)
這篇文章主要介紹了ThinkPHP5封裝郵件發(fā)送服務(wù),可發(fā)附件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10ThinkPHP5&5.1實現(xiàn)驗證碼的生成、使用及點擊刷新功能示例
這篇文章主要介紹了ThinkPHP5&5.1實現(xiàn)驗證碼的生成、使用及點擊刷新功能,結(jié)合實例形式詳細(xì)分析了thinkPHP5驗證碼具體定義、使用方法及點擊刷新相關(guān)操作技巧,需要的朋友可以參考下2020-02-02laravel框架添加數(shù)據(jù),顯示數(shù)據(jù),返回成功值的方法
今天小編就為大家分享一篇laravel框架添加數(shù)據(jù),顯示數(shù)據(jù),返回成功值的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10