2016-06-25 24 views
0

リクエストをServiceM8 Apiに送信しようとしましたが、リクエストを試みるとエラーは戻されず、ServiceM8 APIには何も追加されません。ServiceM8 CurlでJSONを投稿するPHPとAPI

curl -u email:password 
-H "Content-Type: application/json" 
-H "Accept: application/json" 
-d '{"status": "Quote", "job_address":"1 Infinite Loop, Cupertino, California 95014, United States","company_id":"Apple","description":"Client has requested quote for service delivery","contact_first":"John","contact_last":"Smith"}' 
-X POST https://api.servicem8.com/api_1.0/job.json 

、ここでは私が持っているものである:ここで

は、ドキュメントが示唆servicem8ものです

$data = array(
    "username" => "**************8", 
    "password" => "****************", 
    "job_address" => "1 Infinite Loop, Cupertino, California 95014, United States" 
); 
$url_send ="https://api.servicem8.com/api_1.0/job.json"; 
$str_data = json_encode($data); 
function sendPostData($url, $post){ 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS,$post); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    $result = curl_exec($ch); 
    return $result; 

- UPDATE解決するための以前の試みを表示するのではなく、運がなかった。..

<?php 
$data = array(
    "username" => "*******************", 
    "password" => "**********", 
    "job_address" => "1 Infinite Loop, Cupertino, California 95014, United States" 
); 

$url_send ="https://api.servicem8.com/api_1.0/job.json"; 
$str_data = json_encode($data); 

function sendPostData($url, $post){ 
$headers= array('Accept: application/json','Content-Type: application/json'); 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_POSTFIELDS,$post); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    $result = curl_exec($ch); 
    curl_close($ch); // Seems like good practice 
    return $result; 
} 
echo " " . sendPostData($url_send, $str_data); 
?> 

この例のヘッダーを追加しても、何もせずに、servicem8でレコードを作成したり、e不具合

PHPのlibaryを使用して、誰かが正しいCurlリクエストをするのを助けてくれることを願ってください。

おかげ

+0

は、ここで上記のアドバイスを含むように修正あなたのサンプルコードです。 – Naumov

+0

私はこれを試しました:$ headers = array( 'Accept:application/json'、 'C​​ontent-Type:application/json');それからcurl_setopt($ ch、CURLOPT_HTTPHEADER、$ headers);警告:curl_setopt():オブジェクトまたはCURLOPT_HTTPHEADER引数を持つ配列を16行目のC:\ xampp \ htdocs \ final \ sm8.phpに渡す必要があります – Jrad51

+0

yesヘッダーこれは文字列配列ではありません例$ header = "Content-type:text \ r \ n Acept:etc"私はモバイルから書いています。ヘッダを設定する方法を理解していると思います。 – Naumov

答えて

1

まず問題は、正しく認証の詳細を設定していないように見えています。

curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);

第二の問題は、ジョブを作成するときにjob_statusが必須フィールドであるということですので、あなたがそのあなたの作成要求の一部として含まれていることを確認してくださいする必要があります。CURLでHTTP基本認証を使用します。

HTTP 200応答を受け取ったとすると、作成したレコードのUUIDはx-record-uuidヘッダー(docs)に返されます。 CURLのHTTP応答からヘッダーを取得する方法の例については、this answerを参照してください。あなたがreqestのヘッダーを設定し忘れ

$data = array(
    "job_address" => "1 Infinite Loop, Cupertino, California 95014, United States", 
    "status" => "Work Order" 
); 

$url_send = "https://api.servicem8.com/api_1.0/job.json"; 
$str_data = json_encode($data); 

function sendPostData($url, $post, $username, $password) { 
    $ch = curl_init($url); 
    if ($username && $password) { 
     curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password); 
    } 
    $headers = array('Accept: application/json','Content-Type: application/json'); 

    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_HEADER, 1); // Return HTTP headers as part of $result 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    $result = curl_exec($ch); 

    // $result is the HTTP headers followed by \r\n\r\n followed by the HTTP body 
    $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); 
    $header = substr($result, 0, $header_size); 
    $body = substr($result, $header_size); 

    $strRecordUUID = ""; 
    $arrHeaders = explode("\r\n", $header); 
    foreach ($arrHeaders as $strThisHeader) { 
     list($name, $value) = explode(':', $strThisHeader); 
     if (strtolower($name) == "x-record-uuid") { 
      $strRecordUUID = trim($value); 
      break; 
     } 
    } 

    echo "The UUID of the created record is $strRecordUUID<br />"; 

    return $body; 
} 

echo "the response from the server was <pre>" . sendPostData($url_send, $str_data, $username, $password) . "</pre>"; 
関連する問題