12

jsonを使用して API にデータを投稿しているときにcurl、出力が得られません。受信者に招待メールを送信したいと思います。

$url_send ="http://api.address.com/SendInvitation?";
$str_data = json_encode($data);

function sendPostData ($url, $post) {

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));

    return curl_exec($ch);
}

そしてここにあるJSON $str_data

[
    {
        "authorizedKey"  : "abbad35c5c01-xxxx-xxx",
        "senderEmail"    : "myemail@yahoo.com",
        "recipientEmail" : "jaketalledo86@yahoo.com",
        "comment"        : "Invitation",
        "forceDebitCard" : "false"
    }
] 

そして呼び出し関数:

$response = sendPostData($url_send, $str_data);

これは API です: https://api.payquicker.com/Help/Api/POST-api-SendInvitation

4

3 に答える 3

24

追加してcurl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
変更http_build_query($post)してみてください$post

実装:

<?php

$data = array(
  "authorizedKey" => "abbad35c5c01-xxxx-xxx",
  "senderEmail" => "myemail@yahoo.com",
  "recipientEmail" => "jaketalledo86@yahoo.com",
  "comment" => "Invitation",
  "forceDebitCard" => "false"
);

$url_send ="http://api.payquicker.com/api/SendInvitation?authorizedKey=xxxxx";
$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_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);

?>

私が得る応答は次のとおりです。

{"success":false,"errorMessage":"Object reference not set to an instance of an object.","status":"N/A"}

しかし、多分それは有効なデータで動作します....

編集: xmlを投稿する場合、文字列を除いて、サイトと同じです:

$xml = '
<SendInvitationRequest xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/PQApi.Models">
  <authorizedKey>80c587b9-caa9-4e56-8750-a34b17dba0a2</authorizedKey>
  <comment>sample string 4</comment>
  <forceDebitCard>true</forceDebitCard>
  <recipientEmail>sample string 3</recipientEmail>
  <senderEmail>sample string 2</senderEmail>
</SendInvitationRequest>';

それで:

sendPostData($url_send, $xml)
于 2013-09-06T00:29:55.760 に答える
13

ヘッダーを追加する必要があります:

$headers= array('Accept: application/json','Content-Type: application/json'); 

と:

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

さもないと ...

HTTP ステータス 415 - サポートされていないメディア タイプ

…が起こるかもしれません。

于 2014-03-19T11:10:53.483 に答える