第一次使用cUrl和PHP

时间:2015-07-20 11:17:32

标签: php curl

您好我试图获得一家公司的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");

2 个答案:

答案 0 :(得分:1)

如果是第一次使用API​​,我认为使用API​​客户端(如Postman Chrome app)在代码之前尝试请求是有用的。

所以关于你当前的要求,有一些问题:

  • 你试图获得一个令牌,所以创建一个名为“auth”的函数看起来更好。
  • 对于用户身份验证,您可以使用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作为标题发送而不是其值