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]);
}
}
节制器中如下:
handle();
}
以上这篇微信小措施之付出后挪用SDK的异步关照及验证处理赏罚订单要领就是小编分享给各人的所有内容了,但愿能给各人一个参考,也但愿各人多多支持编程之家。
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!