重庆小潘seo博客

当前位置:首页 > 重庆网络营销 > 小潘杂谈 >

小潘杂谈

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

时间:2020-09-06 18:00:08 作者:重庆seo小潘 来源:
下面为大家分享一篇微信小程序之支付后调用SDK的异步通知及验证处理订单方法,具有很好的参考价值,希望对大家有所帮助 小程序之后的异步验证和订单处理 ?php/** * Created by YuanPan. * User: YuanPan * Date: 2017/12/21 * Time: 15:15 */namespace appap

下面为大家分享一篇微信小程序之支付后调用SDK的异步通知及验证处理订单方法,具有很好的参考价值,希望对大家有所帮助

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

<?php/** * Created by YuanPan. * User: YuanPan * Date: 2017/12/21 * Time: 15:15 */namespace appapiservice;use appapimodelProduct;use applibenumOrderStatusEnum;use thinkDb;use thinkException;use thinkLoader;use appapimodelOrder;//在这里依然引入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 appapiserviceOrder();//查询到该订单号的商品和库存量信息$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();}

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

相关推荐:

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

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

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

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