request->getPost(); $order = $this->checkOrder($sn); $user = $this->getLoginUser(); $validator = new TradeValidator(); $channel = $validator->checkChannel($post['channel']); try { $this->db->begin(); $trade = new TradeModel(); $trade->subject = $order->subject; $trade->amount = $order->amount; $trade->channel = $channel; $trade->order_id = $order->id; $trade->user_id = $user->id; $trade->create(); $qrCode = $this->getQrCode($trade); $this->db->commit(); return $qrCode; } catch (\Exception $e) { $this->db->rollback(); return false; } } /** * @param TradeModel $trade * @return mixed */ protected function getQrCode(TradeModel $trade) { $qrCode = null; if ($trade->channel == TradeModel::CHANNEL_ALIPAY) { $alipayService = new AlipayService(); $qrCode = $alipayService->scan($trade); } elseif ($trade->channel == TradeModel::CHANNEL_WXPAY) { $wxpayService = new WxPayService(); $qrCode = $wxpayService->scan($trade); } return $qrCode; } }