微信小程序之支付后调用SDK的异步通知及验证处理订单方法的详解
内容导读
收集整理的这篇技术教程文章主要介绍了微信小程序之支付后调用SDK的异步通知及验证处理订单方法的详解,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2646字,纯文字阅读大概需要4分钟。
内容图文
下面小编就为大家分享一篇微信小程序之支付后调用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(); }
以上这篇微信小程序之支付后调用SDK的异步通知及验证处理订单方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持Gxl网。
您可能感兴趣的文章:
PHP 使用Echarts生成数据统计报表的实现
PHP根据手机号判断运营商
Laravel5.2使用Captcha生成验证码实现登录
以上就是微信小程序之支付后调用SDK的异步通知及验证处理订单方法的详解的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是为您收集整理的微信小程序之支付后调用SDK的异步通知及验证处理订单方法的详解全部内容,希望文章能够帮你解决微信小程序之支付后调用SDK的异步通知及验证处理订单方法的详解所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 lecms, classcms, fastadmin, pbootcms, phpcms, eyoucms, yzmcms, PHP, xunruicms, jizhicms, dedecms, wordpress, hkcms, yzncms, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。