今天遇到个问题;测试购买商品的时候,支付完了发现订单没有写道数据库。
//
$boolData = false;
Db::startTrans();
try{
i
n
s
e
r
t
O
r
d
e
r
=
[
′
u
s
e
r
i
d
′
=
>
insertOrder = [ 'user_id'=>
insertOrder=[′userid′=>this->user_id,
‘order_sn’=>$this->order->getOrderSn(),
‘create_time’=>time(),
‘province’=> $address[‘province’],
‘city’=> $address[‘city’],
‘county’=>
a
d
d
r
e
s
s
[
′
c
o
u
n
t
y
′
]
,
′
a
d
d
r
e
s
s
′
=
>
address['county'], 'address'=>
address[′county′],′address′=>address[‘addr’],
‘mobile’=>
a
d
d
r
e
s
s
[
′
m
o
b
i
l
e
′
]
,
′
c
o
n
s
i
g
n
e
e
′
=
>
address['mobile'], 'consignee'=>
address[′mobile′],′consignee′=>address[‘name’],
‘goods_price’=>
g
o
o
d
s
[
′
g
o
o
d
s
p
r
i
c
e
′
]
,
′
o
r
d
e
r
a
m
o
u
n
t
′
=
>
goods['goods_price'], 'order_amount'=>
goods[′goodsprice′],′orderamount′=>goods[‘goods_price’],
‘order_num’=>
g
o
o
d
s
n
u
m
,
′
o
r
d
e
r
t
y
p
e
′
=
>
goods_num, 'order_type'=>
goodsnum,′ordertype′=>goods[‘goods_type’],
];
// 生成订单
$getOrderID = Db::name("order")->insertGetId($insertOrder);
// 生成订单商品参数
Db::name('order_goods')->insert([
'order_id'=>$getOrderID,
'goods_id'=>$goods_id,
'goods_name'=>$goods['goods_name'],
'goods_suggest'=>$goods['goods_suggest'],
'goods_num'=>$goods_num,
'goods_price'=>$goods['goods_price'],
'default_img'=>$goods['default_img'],
]);
// 生成订单日志
Db::name("order_action")->insert([
'order_id'=>$getOrderID,
'action_user'=>$this->user_id,
'action_note'=>'用户下单',
'log_time'=>time(),
'status_desc'=>'用户下单',
]);
// 订单减库存 同时添加累计购买数量
Db("goods")->where(['goods_id'=>$goods_id])->update([
'goods_stock'=> $goods['goods_stock'] -1,
'goods_sale_num' =>$goods['goods_sale_num'] +1,
]);
Db::commit();
$boolData = true;
}catch(\Exception $e){
Db::rollback();
$boolData = false;
}
if($boolData == false){
return ajaxRetuen(['status'=>300,'msg'=>'下单失败']);
}
// 打开h5支付
$wxPay = logic\WxPay::getInstance();
$payData = $wxPay->pay($insertOrder['order_sn'],$insertOrder['order_amount']);
return ajaxRetuen($payData);
最后发现代码没有逻辑问题,数据库没有写入数据 也没有执行回滚操作 直接唤起支付了。
最后找了好久才发现 Db::name() 跟Db() 不能同时写 要么全用Db::name(); 要么全用Db