db->beginTransaction(); try { $order_id = $data['id']; $order = Order::findOne($order_id); $trade = [ 'mall_id' => $this->mall_id, 'user_id' => $order->user_id, 'out_trade_no' => PaymentTrade::createOutTradeNo(), 'pay_fee' => $order->pay_money, 'total_fee' => $order->goods_price, 'rand_fee' => 0, // 不需要记录 'title' => mb_convert_encoding(mb_substr('订单后台支付', 0, 32),'UTF-8'), 'return_url' => '', 'is_pay' => 1, 'pay_type' => PayTypeEnum::OFFLINE, ]; //正则过滤除了汉字字母数字的其它字符 $trade['title'] = preg_replace('#[^\x{4e00}-\x{9fa5}A-Za-z0-9]#u','',$trade['title']); $paymentTrade = new PaymentTrade(); $paymentTrade->attributes = $trade; if (!$paymentTrade->save()) { throw new \Exception($paymentTrade->getErrorMessage()); } $res = Order::pay($data, PayTypeEnum::OFFLINE, $paymentTrade->out_trade_no); if ($res === false) { throw new \Exception(Order::getStaticError()); } $db->commit(); } catch (\Exception $e) { $db->rollBack(); return $this->error($e->getMessage()); } return true; } /** * 当前express_no是否已经发货 * * @param array $params * * @return bool */ public function checkOrderExpressNo(array $params) { return OrderExpress::find()->where([ 'order_id' => $params['id'], 'express_no' => $params['express_no'], 'status' => StatusEnum::ENABLED ])->exists(); } }