* */ public function pay($endpoint, array $payload): Response { $payload['spbill_create_ip'] = Request::createFromGlobals()->server->get('SERVER_ADDR'); $payload['trade_type'] = $this->getTradeType(); $code_url = $this->preOrder($payload)['code_url']; $params = [ 'body' => $payload['body'], 'code_url' => $code_url, 'out_trade_no' => $payload['out_trade_no'], 'return_url' => Support::getInstance()->return_url, 'total_fee' => $payload['total_fee'], ]; $params['sign'] = md5(implode('', $params) . Support::getInstance()->app_id); $endpoint = addon_url("epay/api/wechat"); Events::dispatch(new Events\PayStarted('Wechat', 'Web/Wap', $endpoint, $payload)); return $this->buildPayHtml($endpoint, $params); } /** * Build Html response. * * @param string $endpoint * @param array $payload * @param string $method * * @return Response * @author yansongda * */ protected function buildPayHtml($endpoint, $payload, $method = 'POST'): Response { if (strtoupper($method) === 'GET') { return new RedirectResponse($endpoint . '?' . http_build_query($payload)); } $sHtml = "
"; foreach ($payload as $key => $val) { $val = str_replace("'", ''', $val); $sHtml .= ""; } $sHtml .= "
"; $sHtml .= ""; return new Response($sHtml); } /** * Get trade type config. * * @return string * @author yansongda * */ protected function getTradeType(): string { return 'NATIVE'; } }