db->beginTransaction(); try { $coupon_order = ElectronCouponOrder::getOne([ ['order_no' => $order_info['order_no']] ]); if ($coupon_order->is_pay == ElectronCouponEnums::PAID) { throw new Exception('订单已支付 ' . $order_info['order_no']); } if ((float)$order_info['total_fee'] != (float)$coupon_order->price) { //throw new Exception('支付金额不正确 ' . $order_info['order_no']); } $update_pay_ststus = ElectronCouponOrder::setData([ 'id' => $coupon_order->id, 'is_pay' => ElectronCouponEnums::PAID, 'pay_type' => $order_info['pay_type'], 'pay_time' => time(), 'mall_id' => $coupon_order->mall_id ]); if ($update_pay_ststus == false) { throw new Exception('订单更改支付状态失败 ' . $order_info['order_no'] . ElectronCouponOrder::getStaticError()); } $user_coupon = ElectronCouponUserCoupon::getOne([ ['id' => $coupon_order->user_e_coupon_id], ['user_id' => $coupon_order->user_id], ['mall_id' => $coupon_order->mall_id] ], true); if (!$user_coupon) { throw new Exception('找不到会员电子券 ' . $order_info['order_no']); } $update_user_counon = ElectronCouponUserCoupon::setData([ 'id' => $user_coupon['id'], 'receive_amount' => -$coupon_order->number, 'active_amount' => $coupon_order->number, 'last_active_time' => time(), 'mall_id' => $coupon_order->mall_id ]); if ($update_user_counon == false) { throw new Exception('更改会员电子券激活数量失败 ' . $order_info['order_no'] . ElectronCouponUserCoupon::getStaticError()); } //激活后 $res = ElectronCouponGiveLogs::activeAfter($coupon_order['number'],$coupon_order['user_id'],$user_coupon['id'],time()); if ($res == false) { throw new Exception(ElectronCouponGiveLogs::getStaticError()); } $tran->commit(); } catch (\Exception $e) { $tran->rollBack(); \Yii::error('电子券激活订单支付回调:' . $e->getMessage()); return false; } } }