API 调用返回 HTML 而不是 JSON
Posted
技术标签:
【中文标题】API 调用返回 HTML 而不是 JSON【英文标题】:API call returns HTML instead of JSON 【发布时间】: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 即可解决问题。 【参考方案1】:试试这个:
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://secure.payu.com/api/v2_1/orders',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'
"notifyUrl": "https://your.eshop.com/notify",
"customerIp": "127.0.0.1",
"merchantPosId": "145227",
"description": "RTV market",
"currencyCode": "PLN",
"totalAmount": "21000",
"buyer":
"email": "john.doe@example.com",
"phone": "654111654",
"firstName": "John",
"lastName": "Doe",
"language": "pl"
,
"products": [
"name": "Wireless Mouse for Laptop",
"unitPrice": "15000",
"quantity": "1"
,
"name": "HDMI cable",
"unitPrice": "6000",
"quantity": "1"
]
',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Bearer 3e5cac39-7e38-4139-8fd6-30adc06a61bd'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
相应地更改字段。我强烈推荐使用Postman 来调试请求。它还具有从curl导入请求(提供here)并生成代码sn-ps的功能
【讨论】:
不幸的是,这给了我相同的结果。按照@CBroe 的建议将 CURLOPT_FOLLOWLOCATION 更改为 false 有助于解决此问题。以上是关于API 调用返回 HTML 而不是 JSON的主要内容,如果未能解决你的问题,请参考以下文章
AWS API 网关:为啥调用 url 返回 HTML 代码而不是实际网页?
在使用 Newtonsoft 之后,ajax 调用在 asp.net 中返回 HTML 响应而不是 Json
用PHP调用API返回JSON值,怎么把JSON返回值调用到html呢?