2013-09-05 96 views
11

Khi tôi đăng json dữ liệu vào API bằng cách sử dụng curl - Tôi không nhận được bất kỳ đầu ra nào. Tôi muốn gửi lời mời qua email tới người nhận.Đăng dữ liệu JSON vào API bằng cách sử dụng 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); 
} 

Và đây là JSON$str_data

[ 
    { 
     "authorizedKey" : "abbad35c5c01-xxxx-xxx", 
     "senderEmail" : "[email protected]", 
     "recipientEmail" : "[email protected]", 
     "comment"  : "Invitation", 
     "forceDebitCard" : "false" 
    } 
] 

Và chức năng gọi số:

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

Đây là API: https://api.payquicker.com/Help/Api/POST-api-SendInvitation

Trả lời

22

Hãy thử thêm curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
Và thay đổi http_build_query($post)-$post

Việc thực hiện:

<?php 

$data = array(
    "authorizedKey" => "abbad35c5c01-xxxx-xxx", 
    "senderEmail" => "[email protected]", 
    "recipientEmail" => "[email protected]", 
    "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); 

?> 

Câu trả lời tôi nhận được là:

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

Nhưng có lẽ nó sẽ làm việc với các dữ liệu có giá trị ....

Sửa : Để đăng xml, cũng giống như trên trang web của họ, ngoại trừ trong một chuỗi:

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

Sau đó:

sendPostData($url_send, $xml) 
+0

ok Dylan Ill cố gắng cảm ơn rất nhiều – ArkNet

+0

Tôi chỉ đọc trên api của họ "_please gắn thêm vào url với? AuthorizedKey = xxxxx_", tôi sẽ thay đổi mã ở trên quá –

+0

tôi có cần gán xxxx đó bằng khóa xác thực của mình không ?? – ArkNet

13

Bạn phải thêm tiêu đề:

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

Và:

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

Nếu không .. .

Status HTTP 415 - Không được hỗ trợ Loại Truyền thông

... có thể xảy ra.