2016-07-07 6 views
0

EDIT(7/8/16):以下のコードはそのまま動作します。私はデスクトップPCでそれをテストしました。別の開発者が役に立つと思うので、コードを残したい。私が持っている問題は無関係です - ファイアウォールやセキュリティソフトウェアのために、ノートパソコンのWAMPサーバーでHTTP POSTを実行できないようです。私は今日それについてもっと見るつもりです。WAMPサーバー(localhost)上のPHPでHealth Graph API許可フローを実装する際の問題


私は、「ユーザーの健康グラフのアカウントにアプリケーションを接続する」、ここでの手順を以下しています: https://runkeeper.com/developer/healthgraph/getting-started

Iは、ステップ#3で立ち往生しています(健康グラフAPIトークンにPOSTリクエストを作りますエンドポイント。

以下のコードの後では、$ responseは空白で、$ httpResponseCodeは0です。CURL POSTは整形式であり、進める方法がわかりません。

これはリダイレクトページです。このページは、ステップ#1の後にユーザーが「http://localhost/my-site/redirect.php」に配置されています。私はclient_idとclient_secretを削除しました。

<!DOCTYPE html> 
<body> 
<?php 

# RunKeeper API 
define('client_id', xxxxxxx); 
define('client_secret', xxxxxxx); 
define('auth_url', 'https://runkeeper.com/apps/authorize'); 
define('access_token_url', 'https://runkeeper.com/apps/token'); 
define('redirect_uri','http://localhost/my-site/redirect.php'); 
define('api_base_url','https://api.runkeeper.com'); 

if ($_GET['code']) { 

    $auth_code = $_GET['code']; 

    $params = http_build_query(array(
     'grant_type' => 'authorization_code', 
     'code'  => $auth_code, 
     'client_id' => client_id, 
     'client_secret' => client_secret, 
     'redirect_uri' => redirect_uri 
    )); 

    $options = array(
     CURLOPT_URL  => access_token_url, 
     CURLOPT_POST  => true, 
     CURLOPT_POSTFIELDS => $params, 
     CURLOPT_RETURNTRANSFER => true 
    ); 

    $curl = curl_init(); 

    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt_array($curl, $options); 

    $response = curl_exec($curl); 

    $responseInfo = curl_getinfo($curl); 
    $httpResponseCode = $responseInfo['http_code']; 

    curl_close($curl); 

    $decoderesponse = json_decode($response); 
    $access_token = $decoderesponse->access_token; 

    } 

?> 
</body> 
</html> 
+0

として値で$オプション配列に渡します。 – RiggsFolly

答えて

1

application/x-www-form-urlencodedとして$ params配列を渡す必要があります。 以下のコードをurlencodeに使用できます。

$fields_string=""; 
    foreach($params as $key=>$value) 
    { 
     $fields_string .= $key.'='.$value.'&'; 
    } 
    rtrim($fields_string, '&'); 

は、次に `php_openssl`拡張が有効になっていることを確認し

CURLOPT_POSTFIELDS => $fields_string, 
+0

これは必須ではありません。 http_build_queryはデフォルトでそのエンコーディングを使用します。 http://php.net/manual/en/function.http-build-query.php – kedarguru

関連する問題