2016-03-10 36 views
5

Tôi nhận được phản hồi mong muốn khi tôi gửi yêu cầu cURL từ số PHP của tôi.
Yêu cầu của tôi là như thế này.Cách chuyển mảng đối số tới cURL trong dòng lệnh?

$data = array ("[product[name]]" => "nw", 
       "[product[handle]]" => 150, 
       "[product[interval_unit]]" => "day", 
       "[product[interval]]" => 1, 
       "[product[price_in_cents]]" => 0, 
       "[product[initial_charge_in_cents]]" => 14200, 
       "[product[return_url]]" =>"http://mytrial.com/office/selfie/themes/adcampaign/56cee935-185c-4dfs-asdfa-2b6b0ae84a4d", 
       "[product[return_params]]" => "id={subscription_id}&customer_id={customer_id})"); 
$url="http://mytrial.com/office/selfie/themes/adcampaign/346423/products.json"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_USERPWD, 'sdfkjas2kjsd:x'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
$res = curl_exec($ch); 
curl_close($ch);  

Nó hoạt động bình thường. Tôi muốn thực hiện yêu cầu tương tự trong dòng lệnh. Đầu tiên tôi đã mã hóa mảng và tôi đã thử với lệnh này

curl -u sdfkjas2kjsd:x -H Accept:application/json -H Content-Type:application/json -x POST --data product[name]=nw&product[handle]=142&product[interval_unit]=day&product[interval]=1&product[price_in_cents]=0&product[initial_charge_in_cents]=14400&product[return_url]=http:\/\/54.145.218.63\/dev_lpad\/launchpad\/advertisers\/adcampaign\/56cee935-185c-4349-a8a1-2b6b0ae84a4d&product[return_params]={id={subscription_id}&customer_id={customer_id}} http://mytrial.com/office/selfie/themes/adcampaign/346423/products.json 

Sau đó, tôi đã nhận được lỗi.

Error: Unable to parse request body

Có cách nào để giải quyết vấn đề này không?

UPDATE : The URL provided here is a dummy value,Actually i am trying to connect with Chargify API (Recurring billing solution).

+0

'-H Content-Type: application/json' Tại sao bạn nói vậy? – Quentin

+0

vì tôi đang cố gắng gửi dữ liệu json –

+0

'sản phẩm [tên] = nw & sản phẩm [xử lý] ...' không nhìn từ xa như JSON – Quentin

Trả lời

3

Cuối cùng tôi có thể giải quyết vấn đề này bằng cách tách tham số mảng. My cURL cummand là cái này.

curl -u sdfkjas2kjsd:x -d 'product[name]":nw' -d '[product[handle]]=161' -d '[product[interval_unit]]=day' -d '[product[interval]]=1' -d '[product[price_in_cents]]=0' -d '[product[initial_charge_in_cents]]=14200' -d '[product[return_url]]=http:\/\/mytrial.com\/office\/selfie\/themes\/adcampaign\/56cee935-185c-4dfs-asdfa-2b6b0ae84a4d' -d 'product[return_params]=id={subscription_id}&{customer_id={customerC_id}})' http://mytrial.com/office/selfie/themes/adcampaign/346423/products.json 
0

Tôi nghĩ rằng bạn nên đặt dữ liệu của bạn bên trong dấu ngoặc đơn

curl ... --data 'một số dữ liệu ở đây' ...

+0

tôi đã kiểm tra nó. nhưng không thay đổi –

+0

tôi đã kiểm tra nó. nhưng không thay đổi –

4

Dường như máy chủ của bạn không chấp nhận json tải bài dữ liệu. Bạn có thể quên json_decode dữ liệu của bạn, đây là việc sửa chữa:

curl -u sdfkjas2kjsd:x -H Accept:application/json -H Content-Type:application/json --data '{"product":{"name":"nw","handle":150,"interval_unit":"day","interval":1,"price_in_cents":0,"initial_charge_in_cents":14200,"return_url":"http:\/\/mytrial.com\/office\/selfie\/themes\/adcampaign\/56cee935-185c-4dfs-asdfa-2b6b0ae84a4d","return_params":"id={subscription_id}&customer_id={customer_id})"}}' http://mytrial.com/office/selfie/themes/adcampaign/346423/products.json 

Nếu tôi gửi nó đến kịch bản php của tôi <?php var_dump(json_decode(file_get_contents('php://input'))); Tôi thấy câu trả lời đúng:

object(stdClass)#1 (1) { 
    ["product"]=> 
     object(stdClass)#2 (8) { 
      ["name"]=> string(2) "nw" 
      ["handle"]=> int(150) 
    ... 
+0

'{" lỗi ": [" Tên: không được để trống. "," Đơn vị khoảng thời gian: phải là 'tháng' hoặc 'ngày'. "," Khoảng thời gian định kỳ: không được để trống. "," Giá: không thể Để trống, hãy nhập '0' nếu miễn phí. "]}' đây là số –

+0

Vâng, có vẻ như 'curl' bây giờ gửi yêu cầu json đúng, nhưng có một số rắc rối logic. Tôi có thể giả sử rằng '[product [name]]' nên được thay thế bằng 'product [name]' trong lệnh. –

+0

nó cũng đưa ra cùng một lỗi –

Các vấn đề liên quan