В моей документации по API говорится, что мне нужно ввести следующую cURL.
локон
-H "Accept: application/json"
-F grant_type=consumer_credentials
-F consumer_key=ABCDEFGHIJKLMN
-F consumer_secret=123456789
https://sandbox.apps.****.com/api/AccessToken
Я понятия не имею, что делать с битами -F (и то, что означает -F!) Поэтому я поставил их как данные JSON post.
Я предполагаю, что -H является заголовком?
В качестве отправной точки у меня было следующее:
$data = array(
"grant_type" => "consumer_credentials",
"consumer_key" => "ABCDEFGHIJKLMN",
"consumer_secret" => "123456789"
);
$str_data = json_encode($data);
$url_send ="https://sandbox.apps.****.com/api/AccessToken";
function sendPostData($url, $post){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json'));
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
echo " " . sendPostData($url_send, $str_data);
Но все, что я получаю, это страница, в которой говорится, что произошла ошибка. Он должен вернуть JSON с данными входа.
Как сказал Марк, я отправлял через json вместо обычных полевых данных.
Я вставляю
foreach($data as $key=>$value) { $str_data .= $key.'='.$value.'&'; }
rtrim($str_data, '&');
вместо
$str_data = json_encode($data);
и, похоже, сейчас работает.
благодаря
-F
может быть полем, как в одном из обязательных полей для публикации вCURLOPT_POSTFIELDS
? ...man curl
скажет вам, что такое все аргументы командной строки ... или дажеcurl --help
. И нет, вы делаете это неправильно.-F
задает пару ключ поля = значение. вы просто отправляете одну безымянную строку json.