Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    PHP controllo se ho un response di tipo json

    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 :

    codice:
    if(isset($_POST)){
    //codice da implementare
    }
    ma per un response json ?

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    JSON suppongo sia il formato dei dati che ricevi, non il metodo in cui ti vengono inviati, l'invio sarà comunque post o get.

  3. #3
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    JSON suppongo sia il formato dei dati che ricevi, non il metodo in cui ti vengono inviati, l'invio sarà comunque post o get.
    E' un payout di paypal , ma se metto :

    codice:
            if ( ! $this->input->post()) {
                
                $this->paypal_lib->log_ipn_test('Missing POST Data');
    
    
            }
    
            if ( ! $this->input->post()) {
                
                $this->paypal_lib->log_ipn_test('Missing GET Data');
    
    
            }
    Ricevo un missing di tutti e due i valori

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Stai controllando in entrambi i casi che sia POST, GET non lo stai controllando.

  5. #5
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    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: \

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    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().

  7. #7
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    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 :



    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
    
    
            
        }
    e il log e' :

    codice:
    [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] -
    L'assistenza paypal dice che Paypal sends HTTP POST notification messages to your webhook listener URL
    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

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    189
    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

  9. #9
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    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.
    Codice PHP:
    print_r($_POST);
    print_r($_GET);
    print_r($_REQUEST);
    exit(); 
    Semplicemente queste 4 linee all'inizio della funzione che riceve i dati da Paypal.

    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 ()".

  10. #10
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    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.
    Codice PHP:
    print_r($_POST);
    print_r($_GET);
    print_r($_REQUEST);
    exit(); 
    Semplicemente queste 4 linee all'inizio della funzione che riceve i dati da Paypal.

    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 ()".
    È un listener i dati li manda il webhook di PayPal .

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.