$trade->title, 'order_no' => $trade->out_trade_no, 'amount' => $trade->pay_fee, 'mall_id' => $trade->mall_id, 'notify_url' => Url::toApi(['notify/' . $pay_type], true), 'type' => $tradeType, 'open_id' => $params['openid'] ?? '', ]; $config = self::getConfig($trade->mall_id, $pay_type); $pay = Yii::$app->payment->huijuBill($config); // 判断支付类型 if (!in_array($tradeType, HuijuBillTypeEnum::getConstants())) { throw new Exception('未定义该支付类型'); } $order = [ 'trade_id' => $trade->id, 'title' => $trade->title, 'order_no' => $trade->out_trade_no, 'amount' => $trade->pay_fee, 'mall_id' => $trade->mall_id, 'notify_url' => Url::toApi(['notify/' . $pay_type], TRUE), 'type' => $tradeType, 'open_id' => $params['openid'] ?? '' ]; $res = $pay->pay($order); // 给前端返回订单号和订单金额 // 增加组合支付判断 if(!empty($trade->is_pay_group)){ $paymentOrderObj = PaymentTradeGroupOrder::class; }else{ $paymentOrderObj = PaymentTradeOrder::class; } $trade_order = $paymentOrderObj::findOne(['trade_id' => $trade->id]); $res['order_no'] = $trade_order->order_no; $res['amount'] = $trade_order->total_fee; // 微信端支付 if (in_array($tradeType, [HuijuBillTypeEnum::WEIXIN_GZH, HuijuBillTypeEnum::WEIXIN_XCX])) { $data = Json::decode($res['result']); $data['timestamp'] = $data['timeStamp']; return $data; } self::setAlipayHtml($trade->out_trade_no, $res['result']); $res['config'] = Url::toApi(['huiju-bill/v1/pay/index']) . '?order_no=' . $trade->out_trade_no; return $res; } /** * 获取商城支付配置 * @param $mall_id * @param $pay_type * @return array|mixed * @throws */ public static function getConfig($mall_id, $pay_type) { if ($mall_id) { $config = Yii::$app->services->setting->mall->get($mall_id, 'pay.' . $pay_type, true); } else { //获取系统配置 $config = Yii::$app->services->setting->platform->get($pay_type, true); } if (empty($config)) { throw new \Exception('查询不到对应的支付配置'); } return $config && is_string($config) ? Json::decode($config, true) : $config; } /** * 设置阿里支付的html缓存 * * @param string $order_no * @param string $html * @return void */ protected static function setAlipayHtml($order_no, $html) { $key = self::ALIPAY_CACHE . $order_no; Yii::$app->redis->setex($key, 600, $html); } /** * 删除阿里支付的html缓存 * * @param string $order_no * @return void */ public static function delAlipayHtml($order_no) { $key = self::ALIPAY_CACHE . $order_no; Yii::$app->redis->del($key); } /** * 获取阿里支付的html缓存 * * @param string $order_no * @return void */ public static function getAlipayHtml($order_no) { $key = self::ALIPAY_CACHE . $order_no; return Yii::$app->redis->get($key); } }