2

コマンドライン cURL を php cURL に変換できません。このトピックに関する他のリンクを読みましたが、まだ行き詰まっています。助けていただければ幸いです。

Web フォームからオンライン CRM に連絡先情報を自動的に入力しようとしています。

API 情報: http://karmacrm.zendesk.com/entries/23648323-連絡先

私のコード:

$header = array('contact[first_name]=aaaaaaa','API-KEY: XXXXXXXXX');
$pageurl = "https://app.karmacrm.com/api/v2/contacts.json";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $pageurl);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_USERPWD, 'mXXXX@gmail.com:7iNXXXXXXXXXX');
curl_setopt($ch, CURLOPT_HEADER, TRUE); // -i
curl_setopt($ch, CURLOPT_VERBOSE, TRUE); // -v
curl_setopt($ch, CURLOPT_CUSTOMEREQUEST, "POST"); //-X
curl_setopt($ch, CURLOPT_BINARYTRANSFER, FALSE); // --data-binary, -d
$output = curl_exec($ch); 
curl_close($ch);
echo $output;

応答:

HTTP/1.1 401 Unauthorized
Content-Type: application/json; charset=utf-8 
Transfer-Encoding: chunked 
Connection: keep-alive 
Status: 401 
X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 3.0.11 
Strict-Transport-Security: max-age=31536000 
X-UA-Compatible: IE=Edge,chrome=1 
Cache-Control: no-cache, private 
X-Request-Id: 8d9397e1c2d43580db7XXXXXXXXXXXX 
X-Runtime: 0.004153 
Date: Wed, 24 Apr 2013 03:14:27 GMT 
X-Rack-Cache: miss 
Server: nginx/1.2.3 + Phusion Passenger 3.0.11 (mod_rails/mod_rack)

{"error":"You need to sign in or sign up before continuing."}1

助けてくれてありがとう、感謝します。

4

2 に答える 2

2

POST 値を HTTP ヘッダーとして渡していますが、これは同じではありません。

これを使って:

$data = array('contact[first_name]' => 'aaaaaaa', 'api_token' => 'XXXXXXXXX');
curl_setopt ($ch, CURLOPT_POST, true);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $data);

そして、CURLOPT_HTTPHEADERオプションを削除します。

補足として、リンクされた API の説明では、ログインの詳細を API に送信することについては何も述べていません。API トークン (API では通常) しかありません。

于 2013-04-24T03:46:54.157 に答える
-1

例 :

$url = 'link_to_api';
$params = array('username'=>'admin','password'=>'passw0rd');


    public function call_ws_post($url = '', $params = array()){
    $service_url = $url;
    $curl = curl_init($service_url);
    $curl_post_data = $params;
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
    $curl_response = curl_exec($curl);
    if ($curl_response === false) {
        $info = curl_getinfo($curl);
        curl_close($curl);
        die('error occured during curl exec. Additional info: ' . var_export($info));
    }
    curl_close($curl);
    $decoded = json_decode($curl_response);
    if (isset($decoded->response->status) && $decoded->response->status == 'ERROR') {
        die('error occured: ' . $decoded->response->errormessage);
    }
    return $decoded;
}
于 2013-04-24T03:57:26.273 に答える