app = $app; } /** * 支付 * * @param array $params * @return array * * @throws \App\Exceptions\WeChatPayException */ public function pay(array $params) { // 如果交易类型不存在,则使用 App 支付 if (! isset($params['trade_type'])) { $params['trade_type'] = static::TRADE_TYPE_APP; } if (! in_array($params['trade_type'], static::$allowTradeTypes)) { throw new WeChatPayException(sprintf('交易类型 [%s] 暂不支持', $params['trade_type']), $params); } $result = $this->app->order->unify($params); if (data_get($result, 'return_code') !== 'SUCCESS') { throw new WeChatPayException( data_get($result, 'return_msg', '请求失败'), $params ); } if (data_get($result, 'result_code') !== 'SUCCESS') { throw new WeChatPayException( sprintf( '[%s] %s', data_get($result, 'err_code', '-1'), data_get($result, 'err_code_des', '交易失败') ), $params ); } $prepayId = $result['prepay_id']; if ($params['trade_type'] === static::TRADE_TYPE_APP) { return $this->app->jssdk->appConfig($prepayId); } return $this->app->jssdk->bridgeConfig($prepayId, false); } /** * 支付结果通知 * * @param \Closure $closure * @return \Symfony\Component\HttpFoundation\Response */ public function handlePaidNotify(Closure $closure) { return $this->app->handlePaidNotify($closure); } }