1

パスを使用しようとしています

POST /d2l/api/lp/(D2LVERSION: version)/users/ 

エラーが発生しています。私が知る限り、これはうまくいくはずなので、ドキュメントに欠けているものがないことを願っています。

HTTP/1.1 400 Bad request
Cache-Control: private
Content-Length: 0
Server: Microsoft-IIS/7.5
X-XSS-Protection: 0
X-Powered-By: ASP.NET
Date: Wed, 23 Jan 2013 18:37:07 GMT

送信するデータは次のようになります。

{
    "OrgDefinedId":"190006002",
    "FirstName":"Jesty",
    "MiddleName":"Q",
    "LastName":"McTest",
    "ExternalEmail":"privateemail@gmail.com",
    "UserName":"190006002",
    "RoleId":115,
    "IsActive":true,
    "SendCreationEmail":true
}

現時点で私のPHPコードは次のようになります。

    $random_hash = "xxBOUNDARYxx";
    $request ="--".$random_hash.
              "\r\nContent-Type: application/json\r\n\r\n$data\r\n\r\n--".
              $random_hash;

    $length=strlen($request);
    $url = $opContext->createAuthenticatedUri($url,"POST");

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("HTTP/1.1", "Content-Type: multipart/form-data; boundary=xxBOUNDARYxx","Content-Length:".$length));
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST,true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
    return curl_exec($ch);      
4

1 に答える 1

1

わかりました、数時間いじくり回した後、私はそれを理解しました。私が投稿した元のコードは、API を介してプロフィール画像を投稿するために機能するコードに基づいていました。JSON を投稿するだけのコードは、はるかに単純でした。これは、POST メソッドを介して JSON を Valence に送信するための一般的な PHP 関数です。

/*
*  $opContext is your user context object
*  $url is the route
*  $data is the well formed JSON in a string ( use json_encode() ) 
*  $ct is the count of json fields
*/

static function basic_post($opContext,$url,$data,$ct){
    $url = $opContext->createAuthenticatedUri($url,"POST"); 
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST,$ct);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
    return curl_exec($ch);  
}
于 2013-01-24T15:28:50.373 に答える