Posting JSON data to API using CURL

后端 未结 3 1715
逝去的感伤
逝去的感伤 2021-01-04 10:15

When I\'m posting json data to API using curl - I\'m not getting any output. I would like to send email invitation to recipient.

$         


        
相关标签:
3条回答
  • 2021-01-04 10:34

    You don't need to add headers as you already do json_encode. just print_r (curl_getinfo($ch)); and see the content type info in it.

    0 讨论(0)
  • 2021-01-04 10:35

    Try adding curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    And changing http_build_query($post) to $post

    The implementation:

    <?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);
    
    ?>
    

    The response I get is:

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

    But maybe it will work with valid data....

    Edit: For posting xml, it's the same as on their site, except in a string:

    $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>';
    

    Then:

    sendPostData($url_send, $xml)
    
    0 讨论(0)
  • 2021-01-04 10:36

    You have to add header:

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

    And:

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    

    Otherwise ...

    HTTP Status 415 - Unsupported Media Type

    ... may happen.

    0 讨论(0)
提交回复
热议问题