2

Badgeville REST API を PHP 5.3、curl 7.22 アプリケーションと統合しています。

BV の API ドキュメントはすべて、例としてコマンド ラインの curl 呼び出しを使用しています。これらの例を実行すると、正常に動作します。

PHP Curl クラスで同じことをしようとすると、BV サーバーから常に 500 エラーが発生します。

Chrome の Advanced Rest Client 拡張機能と同義の機能を実行しようとしました。

PHP カールの例:

$ch = curl_init('http://sandbox.v2.badgeville.com/api/berlin/[private_api_key]/users.json');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);

if($this->getRequestType() == 'POST')
{
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, 
        array(
            'user[name]'    => 'Generic+Username',
            'user[email]'   => 'johndoe%40domainname.com'
        );
    );
}

$response   = curl_exec($ch);

Rest クライアントの例:

URL: http://sandbox.v2.badgeville.com/api/berlin/[private_api_key]/users.json

ヘッダーなしの POST ペイロード:

user[name]=Generic+Username&user[email]=johndoe%40domainname.com

コマンド ラインの curl 呼び出しを手動で作成しshell_exec()、それを で実行しましたが、それを行う必要はありません。

私の調査では、Drupalモジュールが見つかりました。すべての API 呼び出しは呼び出しによって行われfsockopen()ます。

PHP Curl クラスを使用して Badgeville 呼び出しを成功させる方法はありますか?

4

1 に答える 1

1

ヘッダーが設定された curl リクエストを受信すると、Badgeville に 500 エラーが発生することが判明しました。

コードを返すエラー:

$ch = curl_init('http://sandbox.v2.badgeville.com/api/berlin/[private_api_key]/users.json');
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);

if($this->getRequestType() == 'POST')
{
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, 
        array(
            'user[name]'    => 'Generic+Username',
            'user[email]'   => 'johndoe%40domainname.com'
        );
    );
}

$response   = curl_exec($ch);

適切に機能するコード:

$ch = curl_init('http://sandbox.v2.badgeville.com/api/berlin/[private_api_key]/users.json');
//curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);

if($this->getRequestType() == 'POST')
{
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, 
        array(
            'user[name]'    => 'Generic+Username',
            'user[email]'   => 'johndoe%40domainname.com'
        );
    );
}

$response   = curl_exec($ch);

SMH

于 2013-03-05T19:20:48.860 に答える