第一次使用cUrl和PHP

Hello im trying to get work REST API of one company but they are using POST and GET requests which i have never seen. I was studying whole day and i understand some things. I probably need to use cUrl or html forms but guess cUrl is easier. How can i do this post request by cUrl in 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"

Im trying this one but it wont send data correctly.

$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");

$client_id should not be quoted in the array as it is not sending the value of variable it is sending $client_id as a header instead of its value

If it's the first time you work with an API, I think it's useful to use an API Client (like Postman Chrome app) to try request before code.

So concerning your current request, there are some problems :

  • you try to get a token, so create an function called "auth" look like better.
  • For the user auth, you can use CURLOPT_HTTPAUTH

    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, 'username:password');

  • "grant_type" and "scope" are not headers but data, so pass there like :

    $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));
    

keep in mind that this function is only to process auth, and normaly return a token that after you must pass at every request.