Sto implementando un webhook su paypal , che ha un response di tipo json , come faccio a controllare se ricevo dei dati , se fosse un POSt avrei :
ma per un response json ?codice:if(isset($_POST)){ //codice da implementare }
Sto implementando un webhook su paypal , che ha un response di tipo json , come faccio a controllare se ricevo dei dati , se fosse un POSt avrei :
ma per un response json ?codice:if(isset($_POST)){ //codice da implementare }
JSON suppongo sia il formato dei dati che ricevi, non il metodo in cui ti vengono inviati, l'invio sarà comunque post o get.
Stai controllando in entrambi i casi che sia POST, GET non lo stai controllando.
HO sbagliato a postare , ora è corretto :
Codice PHP:
public function payout_webook(){
$this->paypal_lib->log_ipn_test('########################## NEW PAYOUT LISTENER############################## ');
//write on log file
$request = json_decode(file_get_contents('php://input'));
$this->paypal_lib->log_ipn_test($request);
if ( ! $this->input->get()) {
$this->paypal_lib->log_ipn_test('Missing GET Data');
}
if ( ! $this->input->post()) {
$this->paypal_lib->log_ipn_test('Missing POST Data');
}
//TODO GET PAYOUT DETAIL
}
Questo il log :
codice:[26/06/2020 3:24 PM] - ########################## NEW PAYOUT LISTENER############################## [26/06/2020 3:24 PM] - [26/06/2020 3:24 PM] - Missing GET Data [26/06/2020 3:24 PM] - Missing POST Data [26/06/2020 3:24 PM] - ########################## NEW PAYOUT LISTENER############################## [26/06/2020 3:24 PM] - [26/06/2020 3:24 PM] - Missing GET Data [26/06/2020 3:24 PM] - Missing POST Data [26/06/2020 3:24 PM] - ########################## NEW PAYOUT LISTENER############################## [26/06/2020 3:24 PM] - [26/06/2020 3:24 PM] - Missing GET Data [26/06/2020 3:24 PM] - Missing POST Data
Ultima modifica di pippuccio76; 26-06-2020 a 15:29 Motivo: \
Invece di usare gli helper messi a disposizione dal framework che stai usando (CodeIgniter?), prova ad usare direttamente $_POST e $_GET, al limite metti anche il più generico $_REQUEST e vedi quale contiene dati, senza fare if, stampali direttamente con print_r().
Ecco il nuovo codice :
e il log e' :codice:public function payout_webook() { $this->paypal_lib->log_ipn_test('########################## NEW PAYOUT LISTENER############################## '); //write on log file $request = json_decode(file_get_contents('php://input')); $this->paypal_lib->log_ipn_test($request); if(isset($_GET)){ foreach ($_GET as $v) { $this->paypal_lib->log_ipn_test($v); } } if(isset($_POST)){ foreach ($_POST as $v) { $this->paypal_lib->log_ipn_test($v); } } if(isset($_REQUEST)){ foreach ($_REQUEST as $v) { $this->paypal_lib->log_ipn_test($v); } } //TODO GET PAYOUT DETAIL }
L'assistenza paypal dice che Paypal sends HTTP POST notification messages to your webhook listener URLcodice:[26/06/2020 7:05 PM] - ########################## NEW PAYOUT LISTENER############################## [26/06/2020 7:05 PM] - [26/06/2020 7:05 PM] - ########################## NEW PAYOUT LISTENER############################## [26/06/2020 7:05 PM] - [26/06/2020 7:05 PM] - ########################## NEW PAYOUT LISTENER############################## [26/06/2020 7:05 PM] -
https://developer.paypal.com/docs/ap...webhooks/rest/
Ma se cosi' fosse non riceverei dati via POST ? Oltretutto se vado ngli event di paypal developer vedo Payout batch completed succesfully
file_get_contents('php://input') questo significa dati POST grezzo e cioe' non un qualcosa key=valore ($_GET o per il body di $_POST)
Sara' la risposta in json.
Probabilmente la notifica e' anche tramite header oltre ad essere incorporata via POST nel json.
$_GET e/o $_POST hanno inizialmente il valore di un empty array e quindi esistono per isset ma comunque non sta inviando key=value come ho espresso in precedenza.
Ultima modifica di darbula; 27-06-2020 a 09:41
Puoi provare a fare come ti ho chiesto?
Semplice stampa di $_POST, $_GET e $_REQUEST, senza processare i dati in alcun modo, così da vedere cosa ti arriva.
Semplicemente queste 4 linee all'inizio della funzione che riceve i dati da Paypal.Codice PHP:
print_r($_POST);
print_r($_GET);
print_r($_REQUEST);
exit();
isset($_GET) e isset($_POST) restituiscono sempre true, perché quei due array esistono sempre, al limite saranno vuoti, ma esistono, per verificare se hanno ricevuto dei dati devi controllare con empty($_GET).... ma adesso non farlo, stampali direttamente come sono.
Se sono vuoti la stampa sarà semplicemente "Array ()".