2012-06-11 36 views
5

Tôi thêm url của tôi xxx/getjson.php vào webhook và sau khi đăng ký một người, nó sẽ đăng dữ liệu json lên url của tôi. Tôi sử dụng http://requestb.in/ để kiểm tra dữ liệu và kết quả là như thế này:làm thế nào để viết một php để có được bài đăng json từ một webhook?

payload{ "signup": { "address": { "address1": "XX", 
            "country": "United States"},      
        "id":22}} 
token 

kịch bản php i viết là:

$obj=json_decode($_POST);   //cannot get the json data 

$userid=$obj->signup->id; 

Ngoài ra tôi không biết làm thế nào để sử dụng 'tải'

Tôi tìm thấy một mã mẫu tương tự và tôi thử nghiệm nó tốt bằng cách sử dụng móc web của họ. http://support.unbounce.com/entries/307685-how-does-the-form-webhook-work Tuy nhiên, chúng sử dụng 'data.json' thay vì 'tải trọng' làm thông số.

$form_data = json_decode($unescaped_post_data['data_json']); 
$userid= =$form_data->signup->id; 

Tôi đã sử dụng chức năng stripslashes_deep của họ và thay thế 'data_json' bằng 'tải trọng' nhưng vẫn không hoạt động.

Tôi thực sự đánh giá cao sự trợ giúp của bạn.Cảm ơn bạn!

+1

Bài đăng var là gì? '$ _POST ['payload']' – AustinAllover

+1

có thể trùng lặp của [php: // input <> $ _POST?] (Http://stackoverflow.com/questions/4703906/php-input-post) hoặc http: // stackoverflow .com/questions/5806971/read-associative-array-from-json-in-post - tùy thuộc vào specifica không được đề cập trong câu hỏi của bạn. – mario

+0

Chúng ta cần thực hiện bất kỳ thay đổi nào trong cấu hình php hoặc apache để thực hiện công việc này. Tôi đang sử dụng webhooks sendgrid sự kiện nhưng nó không được đăng lên tập tin php của tôi. –

Trả lời

3

$ _POST sẽ là mảng nên bạn cần chỉ định khóa.

$obj=json_decode($_POST['payload']); // put the second parameter as true if you want it to be a associative array 

$userid=$obj->signup->id; 
0

có vẻ như $obj=json_decode($_POST); không giải mã được chuỗi JSON của bạn.

Tôi nghĩ rằng vấn đề bạn đang gặp phải là bạn không mã hóa đúng dữ liệu "tải trọng" của JSON.

payload{ 
    "signup": { 
      "address":{ 
        "address1": "XX", 
        "country": "United States" 
       },      
       "id":22 
    } 
} 

mã thông báo không được định dạng đúng. { "signup": { "address": { "address1": "XX","country": "United States"},"id":22}} là chuỗi JSON chính xác. các công cụ bổ sung ở cả hai đầu của JSON sẽ làm cho nó không thể phân tích được.

$_POST['payload'] có thể là cách bạn truy cập.

Ngoài ra, bạn không cung cấp cho chúng tôi đủ mã để thực sự trợ giúp. chúng tôi cần một trong hai dạng HTML hoặc Javascript thực sự đang gửi/xây dựng POST. (hoặc bạn đang sử dụng một cái gì đó như Curl?)

+1

chỉ hoạt động khi tôi sử dụng $ _REQUEST ["tải trọng"] thay vì $ _POST. Nhà cung cấp api webhook không cung cấp cho tôi nhiều thông tin. Bây giờ tôi tìm ra 'payload' là một biến. Cảm ơn –

2

Cuối cùng làm việc nó ra! Chỉ có ba dòng cần thiết nhưng tôi đã dành cả ngày ... Nhà cung cấp API webhook nên cung cấp thêm một số thông tin về nó. Cảm ơn bạn đã giúp đỡ!

$data = $_REQUEST["payload"];   
$unescaped_data = stripslashes($data); 
$obj = json_decode($unescaped_data); 
$userid = $obj->signup->id; 
Các vấn đề liên quan