error('模板不存在'); /* 判断当前插件是否已经购买 */ $mall_tamplate = DiyMallTemplate::getMallTemplateById($this->mall_id, $id); if ($mall_tamplate && $mall_tamplate->isPermanent()) return $this->error('您已经永久持有本模板'); // 获取选择购买的 $item = $template->getCurrentItem($index); if (empty($item)) return $this->error('所选购买规则不存在'); $res = DiyTemplateOrder::createOrder($this->mall_id, $template, $item); if (!$res) return $this->error('创建订单失败'); // 拆分 list($order, $order_trade) = $res; $data['order'] = $order; if ($order->pay_money > 0) { // 获取交易订单信息 $trade = Yii::$app->services->pay->getByTradeNo($order_trade['trade_no']); // 获取支付方式 if (!empty($trade)) { $payment_arr = $this->getPaymentArr([1, 2], $trade); $data['payment_arr'] = $payment_arr; } } // 当前模板免费 if ($order->pay_money == 0) { // 订单支付 $order->paid(); // 续费模板 $service = new TemplateService(['mall_id' => $order->mall_id]); $service->renewTemplate($order->template_id, $order->duration); } $order->setPayData($order_trade['trade_no'] ?? '', json_encode(['payment_arr' => $payment_arr ?? []])); return $order->id; } /** * 获取支付数据 * * @param integer $id * @return array|false */ public function getPayData(int $id) { $data = DiyTemplateOrder::getOrderPayDataById($this->mall_id, $id); if (empty($data)) return $this->error('订单不存在'); // template $template = $data->template->toArray(); $data = $data->toArray(); $data['template'] = $template; $data['extra_info'] = json_decode($data['extra_info']); return $data; } /** * @param array $payment_type * @param PaymentTrade $trade * @return array */ protected function getPaymentArr($payment_type, $trade) { $payment_arr = []; $payment_map = PayTypeEnum::getMap(); foreach ($payment_type as $type) { switch ($type) { case PayTypeEnum::WECHAT : // 生成微信支付二维码地址 $payment_arr[] = [ 'payment_url' => Yii::$app->services->pay->wechat($trade, WechatPayTypeEnum::NATIVE), 'payment_way' => 'scan',// 扫码支付 'payment_name' => $payment_map[$type], ]; break; case PayTypeEnum::ALI : $backend_domain = \Yii::$app->services->setting->platform->get('system.backend_url'); // 生成支付宝支付地址 $alipay = Yii::$app->services->pay->alipay($trade, AliPayPayTypeEnum::PC, [ 'return_url' => $backend_domain . '/index.php?r=mall/diy/paid', ]); if (empty($alipay['config'])) throw new \Exception('支付宝扫码地址获取失败'); $payment_arr[] = [ 'payment_url' => $alipay['config'], 'payment_way' => 'navigate',// 链接跳转 'payment_name' => $payment_map[$type], ]; break; } } return $payment_arr; } /** * 续费自定义模板时长(不是续费情况下增加模板) * * @param integer $id 模板ID * @param integer $duration 续费时长(单位月 -1代表永久) * @return boolean */ public function renewTemplate(int $id, int $duration) { $mall_tamplate = DiyMallTemplate::getMallTemplateById($this->mall_id, $id); if (empty($mall_tamplate)) { // 模板信息 $template = DiyTemplate::getTemplateById($id); if (empty($template)) return $this->error('模板不存在'); DiyMallTemplate::addTemplate($template, $this->mall_id, $duration); } else { $mall_tamplate->renewTemplate($duration); } } }