2017-08-29 9 views
-3

PHPでのcURLリクエストに全く新しいです。cURL PHP Newbieが手を必要とする

私は以下の情報を私に提供するAPIを持っており、cURLを介してPOSTリクエストを送信したいと考えています。私はいくつかの基本的なcURLの例を試しましたが、どのように追加のデータを送るべきか考えていません。

APIのドキュメントには、次が含まれています。ここでは

curl https://api.23andme.com/token/ 
     -d client_id=xxx \ 
     -d client_secret=yyy \ 
     -d grant_type=authorization_code \ 
     -d code=zzz \ 
     -d "redirect_uri=https://localhost:5000/receive_code/" 
     -d "scope=basic%20rs3094315" 

は私のサンプルコードです:

$data = array(
     "client_id" => $client_id, 
     "client_secret" => $client_secret, 
     "grant_type" => "authorization_code", 
     "code" => $code, 
     "redirect_uri" => "http://localhost/23andme/", 
     "scope" => "basic" 
     ); 



$ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $data); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 


    $response = curl_exec($ch); //Uncomment to make it live again 

    if (!$response) 
    { 
     return false; 
    } 

    echo json_decode($response); 

答えて

-1

、ここではベースとして、あなたのコードを使用した完全な例です:

<?php 

    /* you must define an URL to POST to */ 
    $url = ""; 

    $data = array(
        "client_id" => $client_id, 
        "client_secret" => $client_secret, 
        "grant_type" => "authorization_code", 
        "code" => $code, 
        "redirect_uri" => "http://localhost:8080/nope", 
        "scope" => "basic" 
       ); 

    $ch = curl_init($url); 
      curl_setopt($ch, CURLOPT_POST, true); 
      curl_setopt($ch, CURLOPT_HTTPHEADER, $data); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) 

      /* this line below was missing in your code */; 
      curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));   

    $response = curl_exec($ch); 

    if (!$response) 
    { 
     echo 'A error has occurred ' . curl_error($ch); 
     return false; 
    } 

    echo json_decode($response); 

?> 

てみてくださいあなたのニーズに合わせて調整してください。

+0

ありがとうございます。また、SSLを介してリクエストを行う必要がありました。それは今働いている。 –

+1

あなたは 'CURLOPT_HTTPHEADER'を残して、' CURLOPT_POST'は残りのようなブール値であり、ポストパラメータの数ではありません。また、 'echo json_decode(..)'オブジェクトをエコーアウトすることはできません。また、if文から 'return false;'を返すこともできますか?盗んだコピーとペーストのように見えます。 –

1

あなたのデータ配列で

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 

を試みることができるPOSTデータとしてそれを送信します既にcurl_setopt($ch, CURLOPT_POST, true);があるためですあなたは自分のコードの中で二つのことを逃した

http://php.net/manual/en/function.curl-setopt.php

ので

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

乾杯

+0

ありがとうございます。私は$ response変数で何も得られません。アクセストークンと有効期限が設定されているか、エラーコードが設定されたJSON応答を受け取る必要があります。私はどちらも受け取っていません。私の$ data配列をAPI仕様から正しく変換しましたか? –

関連する問題