您好我试图获得一家公司的REST API,但他们正在使用我从未见过的POST和GET请求。我整天都在学习,我理解一些事情。我可能需要使用cUrl或html表单,但猜测cUrl更容易。 我如何通过cUrl在php中发布此帖子请求?
curl -v https://testgw.gopay.cz/api/oauth2/token \
-X "POST" \
-H "Accept: application/json" \
-H "Content-Type: application/x-www-form-urlencoded" \
-u "<Client ID>:<Client Secret>" \
-d "grant_type=client_credentials&scope=payment-create"
我正在尝试这个,但它不会正确发送数据。
$client_id = "000000:111111";
function httpPost($url)
{
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Content-Type: application/x-www-form-urlencoded",
"Accept: application/json",
"$client_id",
"grant_type=client_credentials&scope=payment-create"
));
$output=curl_exec($ch);
curl_close($ch);
return $output;
}
echo httpPost("https://testgw.gopay.cz/api/oauth2/token");
答案 0 :(得分:1)
如果是第一次使用API,我认为使用API客户端(如Postman Chrome app)在代码之前尝试请求是有用的。
所以关于你当前的要求,有一些问题:
对于用户身份验证,您可以使用CURLOPT_HTTPAUTH
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, 'username:password');
“grant_type”和“范围”不是标题而是数据,所以传递到那里:
$data = array('grant_type' => 'grant_type_value', 'scope' => 'scope_value');
curl_setopt($request, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($request, CURLOPT_POSTFIELDS, http_build_query($data));
请记住,此函数仅用于处理身份验证,并且在您必须传递每个请求之后,通常会返回一个令牌。
答案 1 :(得分:0)
$ client_id不应该在数组中引用,因为它不发送变量值,它将$ client_id作为标题发送而不是其值