payType = self::PAY_TYPE_WEB; $data = $this->applyPaymentData(); $this->unify($data); } /** * @return array */ private function applyPaymentData() { $orderId = Yii::$app->request->getBodyParam('orderId');/*int 商品id*/ if (empty($orderId)) { throw new BadRequestHttpException(Helper::REQUEST_BAD_PARAMS); } $order = Order::find() ->where(['id' => $orderId, 'user_id' => Yii::$app->user->getId()]) ->one(); if (empty($order)) { throw new NotFoundHttpException('未找到该订单'); } $data = [ 'body' => '订单支付', 'out_trade_no' => $order->order_sn, 'total_fee' => round($order->pay_fee * 100), 'openid' => Yii::$app->user->identity->wx_openid ?? '', ]; $this->tradeType = 'JSAPI'; $this->order = $order; return $data; } private function getPaymentApp() { $this->_config(); $config = [ 'app_id' => $this->appId, 'mch_id' => $this->mchId, 'key' => $this->key, 'cert_path' => $this->certPath, 'key_path' => $this->keyPath, 'notify_url' => $this->notifyUrl, 'trade_type' => $this->tradeType ]; $this->app = Factory::payment($config); } private function _config() { $path = Yii::getAlias('@backend'); $config = Config::find()->one(); switch ($this->payType) { case self::PAY_TYPE_WEB: $this->appId = trim($config->wx_appId); $this->mchId = trim($config->wx_mchId); $this->key = trim($config->wx_key); $this->certPath = trim($path . $config->wx_certPath); $this->keyPath = trim($path . $config->wx_keyPath); break; case self::PAY_TYPE_MINI_PROGRAM: $this->appId = trim($config->mini_program_appId); $this->mchId = trim($config->mini_program_mchId); $this->key = trim($config->mini_program_key); $this->certPath = trim($path . $config->mini_program_certPath); $this->keyPath = trim($path . $config->mini_program_keyPath); break; } $this->notifyUrl = $config->api_domain_name . $this->order->notify_url; } private function unify($data) { $this->getPaymentApp(); return $this->app->order->unify($data); } }