2012-06-11 15 views
5

Dodaję mój adres url xxx/getjson.php do webhooka, a po zarejestrowaniu się osoba opublikuje dane json w moim adresie URL. Używam http://requestb.in/ aby sprawdzić dane i wynik jest taki:jak napisać php, aby uzyskać post json z webhooka?

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

skrypt php napisać to:

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

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

Również nie wiem, jak korzystać z 'ładunek'

Znajduję podobny kod przykładowy i testuję go dobrze za pomocą haczyków internetowych. http://support.unbounce.com/entries/307685-how-does-the-form-webhook-work Jednak używają one "data.json" zamiast "ładunku" jako parametrów.

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

użyłem ich funkcję stripslashes_deep i zastąpiła „data_json” z „ładunkiem”, ale nadal nie działa.

Naprawdę doceniam Twoją pomoc. Dzięki!

+1

Co to jest post var? '$ _POST ['payload']' – AustinAllover

+1

możliwy duplikat [php: // input <> $ _POST?] (Http://stackoverflow.com/questions/4703906/php-input-post) lub http: // stackoverflow .pl/questions/5806971/read-associative-array-from-json-in-post - w zależności od specyfikacji niewymienionych w pytaniu. – mario

+0

Czy musimy wprowadzić zmiany w konfiguracji php lub apache, aby to działało. Używam webhooków zdarzeń sendgrid, ale nie publikuję ich w moim pliku php. –

Odpowiedz

3

$ _POST będzie tablicą, więc musisz określić klucz.

$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

Wygląda na to, że $obj=json_decode($_POST); nie może zdekodować twojego ciągu JSON.

Wydaje mi się, że problem polega na tym, że nie poprawnie kodujesz swoje dane "ładunku".

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

token jest nieprawidłowo sformatowany. { "signup": { "address": { "address1": "XX","country": "United States"},"id":22}} to poprawny ciąg JSON. dodatkowe elementy na obu końcach JSON spowodują, że nie będzie on mógł być parsowalny.

$_POST['payload'] Prawdopodobnie byłby sposób, w jaki można uzyskać do niego dostęp.

Ponadto nie dostarczyłeś nam wystarczającego kodu, aby naprawdę pomóc. potrzebujemy albo formularza HTML, albo Javascript, który faktycznie wysyła/buduje POST. (lub używasz czegoś takiego jak Curl?)

+1

działa tylko wtedy, gdy używam $ _REQUEST ["payload"] zamiast $ _POST. Dostawca api webhook nie dostarcza mi zbyt wielu informacji. Teraz stwierdzam, że "ładunek" jest zmienną. Dzięki –

2

W końcu udało się! Tylko trzy linie potrzebne, ale spędziłem cały dzień ... Dostawca API webhook API powinien dostarczyć trochę więcej informacji na ten temat. Dzięki za pomoc!

$data = $_REQUEST["payload"];   
$unescaped_data = stripslashes($data); 
$obj = json_decode($unescaped_data); 
$userid = $obj->signup->id;