黔优媒体网-软文媒体自助发稿平台!
  1. 行业资讯
  2. 正文

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

来源:黔优媒体网   时间:2024-09-19

下面为大家分享一篇微信小程序之支付后调用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( #39;WxPay.WxPay #39;,EXTEND_PATH, #39;.Api.php #39;);
class WxNotify extends \WxPayNotify
 //继承了父类,所以直接重写方法
 public function NotifyProcess($data, $msg)
 //如果返回支付成功信息
 if($data[ #39;return_code #39;] = #39;SUCCESS #39;){
 $orderNo = $data[ #39;out_trade_no #39;];
 Db::startTrans();
 //判断订单状态
 //在这里可以进行对数据库进行所机制
 //简单说,当一个执行sql语句的事务想要操作表记录之前,先向数据库发出请求,对你访问的记录集加锁
 //在这个事务释放这个锁之前,其他事务不能对这些数据进行更新操作
 Order::where([ #39;order_no #39;= $orderNo])- lock(true)- find();
// $order = Order::get([ #39;order_no #39;= $orderNo]);
 //如果未支付
 if ($order- status == 1) {
 $service = new \app\api\service\Order();
 //查询到该订单号的商品和库存量信息
 $stockStatus = $service- checkOrderStock($order- 
 //如果库存量有,更新订单状态,以及减去商品库存
 if ($stockStatus[ #39;pass #39;]) {
 $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[ #39;pStatusArray #39;] as $v) {
 //使用tp5的setDec方法
 Product::where([ #39;id #39;= $v[ #39;id #39;]])- setDec( #39;stock #39;,$v[ #39;count #39;]);
 //success为真,则订单修改为PAID,如果为假则修改为已支付,但订单未处理的状态,对应枚举信息修改
 private function updateOrderStatus($orderID,$success)
 $status = $success?OrderStatusEnum::PAID:OrderStatusEnum::PAID_BUT_OUT_OF;
 Order::where([ #39;id #39;= $orderID])- update([ #39;status #39;= $status]);
}

控制器中如下:

 public function receiveNotify()
 //1:检查库存量防止超卖
 //2:更新status状态
 //3:减库存
 //如果成功处理,返回成功处理信息,否则返回没有成功处理信息
 $notify = new WxNotify();
 $notify- handle();
 }

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

相关推荐:

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

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

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

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

微信app下载

微信是一款手机通信软件,支持通过手机网络发送语音短信、视频、图片和文字。微信可以单聊及群聊,还能根据地理位置找到附近的人,带给大家全新的移动沟通体验,有需要的小伙伴快来保存下载体验吧!


【免责申明】黔优媒体网以上展示内容来源于用户自主上传、合作媒体、企业机构或网络收集整理,版权争议与本站无关,文章涉及见解与观点不代表黔优媒体网官方立场,请读者仅做参考,本文标题:微信小程序中支付后调用SDK的异步通知及验证处理订单方法;欢迎转载,转载时请说明出处。若您认为本文侵犯了您的版权信息,或您发现该内容有任何违法/违规的内容,请您立即联系我们及时修正或删除。(邮箱号: kefu@qianu.com)