【发布时间】:2022-01-04 07:50:50
【问题描述】:
我正在我的网站上开发支付网关。我还有一步,我坚持下去。 我必须向支付提供商 API 发送订单,它应该返回带有一些数据和 redirectURI 的对象,我必须将客户端重定向到。
我遇到的问题是 API 响应。它返回 HTML 而不是 JSON。以下是我的要求:
$curl = curl_init();
$data = $data->get_params();
$data['order']['customerIp'] = $_SERVER['REMOTE_ADDR'];
$data['order']['extOrderId'] = generateRandomString();
$postdata = json_encode($data['order']);
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://secure.snd.payu.com/api/v2_1/orders',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_HEADER => false,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => $postdata,
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Bearer '.$data['token']
),
));
$response = curl_exec($curl);
curl_close($curl);
return rest_ensure_response( $response );
在文档网站上,我发现了这条信息消息:
注意:响应的 HTTP 状态码是 302 和 Location 头 设置为 redirectUri,根据使用的软件,它可能 有时会触发自动重定向以及接收响应 HTML 格式。
我假设响应的 HTML 包含客户端应该重定向到的网站。
JSON 响应应如下所示:
{
"status":{
"statusCode":"SUCCESS",
},
"redirectUri":"{payment_summary_redirection_url}",
"orderId":"WZHF5FFDRJ140731GUEST000P01",
"extOrderId":"{YOUR_EXT_ORDER_ID}",
}
您知道如何解决这个问题,或者是否有可能做到这一点? 或者也许可以检索 Location 标头中的路径并将其发送给客户端?
在我的后端,我在前端使用 PHP 和 Angular。
感谢您的任何想法。
谢谢。
【问题讨论】:
-
不知道为什么他们会同时使用 JSON 和重定向进行响应,这没有多大意义。您是否尝试将 CURLOPT_FOLLOWLOCATION 设置为 false?
-
好建议!将 CURLOPT_FOLLOWLOCATION 更改为 false 即可解决问题。