我正在尝试使用oauth2 auth方法向VendHQ Api发送Post请求。我有正确的代码、client_id、client_secret等,因为它在Postman中运行良好,但当我尝试使用PHP curl发送相同的数据时,我得到了错误:
错误
'error' => string 'invalid_request' (length=15)
'error_description' => string 'The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed. Check the "grant_type" parameter.' (length=179)
这是请求访问令牌的留档,这是我试图获取访问令牌的代码。
PHP代码:
$prefix = $vend[0]['domain_prefix'];
$request_url = 'https://'.$prefix.'.vendhq.com/api/1.0/token';
$body['code'] = $vend[0]['code'];;
$body['client_id'] = $vend[0]['app_id'];;
$body['client_secret'] = $vend[0]['app_secret'];;
$body['grant_type'] = 'authorization_code';
$body['redirect_uri'] = $vend[0]['redirect_uri'];;
$response = $this->invoke($request_url, 'POST', $body);
调用函数
private function invoke($url, $method, $data = null)
{
$ch = curl_init($url);
if($method=='POST'){
if(isset($data)){
$data_string = json_encode($data);
}
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
$headers = array();
$headers[] = "Content-Type: application/x-www-form-urlencoded;charset=UTF-8";
$headers[] = 'Content-Length: '.strlen($data_string);
echo '<br>Curl Headers';
var_dump($headers);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
}//END POST
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($ch);
$info = curl_getinfo($ch);
echo '<pre>Curl Info<br>';
var_dump($info);
echo '</pre>';
curl_close($ch);
$json_output = json_decode($json, true);
return $json_output;
}//end function
我相信我发送的一切都很好,但是curl正在发送,但是从curl信息我得到了这个
'content_type' => string 'application/json; charset=UTF-8' (length=31)
但VendAPI文档称,发送post数据时使用“application/x-www-form-urlencoded”。
注意:这些参数应作为POST请求的"Application/x-www.-form-urlencoded"编码正文发送
我做错了什么?
谢谢!在使用了你的答案后,这里有一个完整的例子对我有用:
$data = 'grant_type=password';
$data .= '&username='.$username;
$data .= '&password='.$password;
$data .= '&client_id='.$client_id;
$data .= '&client_secret='.$client_secret;
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => $ep_token_issuance,
CURLOPT_POST => true,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => $data,
CURLOPT_RETURNTRANSFER => true,
));
$result = curl_exec($ch);
//print_r(curl_getinfo($ch));
curl_close ($ch);
然而,发送的标题仍然是内容类型:application/json。
在这里发布问题后解决了问题。
问题是,我试图用application/x-www-form-urlencode
内容类型发布数据,但我发送的是json格式的数据。我已经从调用函数中删除了这些行
if(isset($data)){
$data_string = json_encode($data);
}
并设置curl_setopt($ch,CURLOPT_POSTFIELDS,$data)
$body
数组之外,我还创建了字符串:
$body = 'code='.$vend[0]['code'];
$body .= '&client_id='.$vend[0]['app_id'];
$body .= '&client_secret='.$vend[0]['app_secret'];
$body .= '&grant_type=authorization_code';
$body .= '&redirect_uri='.$vend[0]['redirect_uri'];
一切正常:)
我正在尝试通过API发送post请求。呼叫要求: 我已经使用Charles HTTP代理查看需要发送哪些头/内容。 我的请求:(基本上抄录自查尔斯的多部分章节) 如有任何帮助,我们将不胜感激!干杯!
我正在寻找200 OK请求。
请求方式: "|3|2|url,content|\r" 参数: url 设置Post请求的url链接 content post请求的数据 返回值: "|3|code|data|\r" 参数: code http请求返回的成功或者错误码 成功:code = 200 获取数据失败:code = -1 http请求字段错误:code = 1 data http请求返回的数据 Arduino样例: sof
我已经通过邮递员发送了标题Content-Type=Application/x-www-form-urlencoded的POST请求。 我得到了PHP中的数组,格式如下。我无法在PHP页面中访问。我该如何解决这个问题? 结果是
我得到以下错误 响应数据为空。我做错了什么,或者我在代码中遗漏了什么?
我有一个使用axios发送post请求的表单。问题在于,发送请求时使用的标题的内容类型为:multipart/form data。我的nodejsapi不喜欢这样,它给了我一个未定义的req。身体 我有其他使用相同技术的表单,它们可以工作,标题与预期的一样:Content-Type:application/json;字符集=UTF-8 张贴Content-Type: Multipart/form-