Visualizzazione dei risultati da 1 a 9 su 9

Visualizzazione discussione

  1. #9
    Quote Originariamente inviata da Dascos Visualizza il messaggio
    Dunque.
    Il secondo messaggio ha il riferimento all'ordine (7DA98695HD745122N) nel "supplementary_data.
    In questo modo leghi i pezzi.

    Ad ogni modo, io farei in un altro modo....quando crei l'ordine lo dai come pagato e non aspetti l'ok del compratore, usando il paramentro "intent":
    codice:
    paypal.Buttons(
            {
                createOrder : function(data, actions) {
                    return actions.order.create({                        
                        'intent' : 'CAPTURE',
                        'custom_id' : 'abc-ordine-abc-123',
                        'purchase_units' : [ {
    .....
    Quando paypal ti risponde, ovvero il compratore ha pagato, dovrai salvarti la transazione nel db, in modo da legarla al compratore e a successive verifiche/notifiche/interrogazioni ecc.
    Sicuramente ti conviene anche usare il "custom_id", che sempre ti salvi da qualche parte per legare ordine e compratore (ridondante ma utile).
    In questo modo ti basi solo sulla risposta Paypal a seguito del pagamento e non hai bisogno di intercettare i webhooks che diventano complicati da gestire.

    La documentazione Pp è complicata, ma completa. Io per fare correttamente una "banalità" come gli abbonamenti, ho dovuto studiarmi la documentazione per 2 giorni e fare test per 5... :-D

    Auguri e se serve una mano fischia

    Allora io ho utilizzato questo metodo :

    praticamente controllo il request e con il primo invio mi salvo buona parte dei dati :

    codice:
     //write on log file
            $request = file_get_contents('php://input');
                
            $this->paypal_lib->log_ipn_test($request);
    
    
            if($request=json_decode($request)){
    
    
                //SE IL PAGAMENTO E' APPROVATO MA NON COMPLETATO
                if($request->event_type=='CHECKOUT.ORDER.APPROVED'){
    
    
                    $custom = $request->resource->purchase_units[0]->custom_id;
                    $order_id = $request->resource->id ;
                    $capture_id = $request->resource->purchase_units[0]->payments->captures[0]->id ;
                    $id_webhook_checkout_order_approved   = $request->id;
                    $paypal_fee = $request->resource->purchase_units[0]->payments->captures[0]->seller_receivable_breakdown->gross_amount->value;
                    $gross_amount = $request->resource->purchase_units[0]->payments->captures[0]->seller_receivable_breakdown->paypal_fee->value;
                    $net_amount = $request->resource->purchase_units[0]->payments->captures[0]->seller_receivable_breakdown->paypal_fee->value;
                    $mc_currency = $request->resource->purchase_units[0]->payments->captures[0]->amount->currency_code;
                    $payer_email = $request->resource->payer->email_address;
                    $data_pagamento_first = str_replace('T',' ',$request->resource->create_time); 
                    $data_pagamento = str_replace('Z',' ',$data_pagamento_first); 
    
    
                    $this->paypal_lib->log_ipn_test('DENTRO CHECKOUT.ORDER.APPROVED');
                    
                    $this->paypal_lib->log_ipn_test('id_webhook_checkout_order_approved :'.$id_webhook_checkout_order_approved);
    
    
                    $this->paypal_lib->log_ipn_test(' order_id  :'.$order_id);
                    
                    $this->paypal_lib->log_ipn_test(' capture_id  :'.$capture_id);
    
    
                    $this->paypal_lib->log_ipn_test(' custom_id:'.$custom_id);
                    
                    $this->paypal_lib->log_ipn_test(' payer_email :'.$request->resource->payer->email_address);
    
    
                    $dati_inserimento = [
    
    
                        'custom' => $custom,
                        'id_webhook_checkout_order_approved' => $id_webhook_checkout_order_approved,
                        'order_id'    => $order_id,
                        'capture_id'    => $capture_id,
                        'paypal_fee' => $paypal_fee,
                        'gross_amount' => $gross_amount,
                        'net_amount' => $net_amount,
                        'mc_currency' => $mc_currency,
                        'payer_email' => $payer_email,
                        'data_pagamento' => $data_pagamento,
                    ];
    
    
                    if($pagamenti_paypal_model->insert($dati_inserimento)){
    
    
    
    
                        $this->paypal_lib->log_ipn_test(' CHECKOUT.ORDER.APPROVED inserito nel db');
    
    
                    
                    }else{
    
    
                        $this->paypal_lib->log_ipn_test(' CHECKOUT.ORDER.APPROVED problemi INSERIMENTO nel db');
    
    
    
    
                    }
    
    
    
    
    
    
    
    
                }
                // se il pagamento è completato
                elseif($request->event_type=='PAYMENT.CAPTURE.COMPLETED'){
    
      $id_webhook_payment_capture_completed = $request->id;
                    $order_id = $request->resource->supplementary_data->related_ids->order_id;
                    $capture_id = $request->resource->id;
                    $custom_id = $request->resource->custom_id;
                    $data_pagamento = $request->create_time;
                    $paypal_fee = $request->resource->seller_receivable_breakdown->paypal_fee->value;
    
    
                    //DEBUG
                    $this->paypal_lib->log_ipn_test('DENTRO PAYMENT.CAPTURE.COMPLETED');
    
    
                    $this->paypal_lib->log_ipn_test('id_webhook_payment_capture_completed :'.$id_webhook_payment_capture_completed);
    
    
    
    
                    $this->paypal_lib->log_ipn_test(' order_id   :'. $order_id);
    
    
                    $this->paypal_lib->log_ipn_test(' capture_id  :'. $capture_id);
    
    
    
    
                    $this->paypal_lib->log_ipn_test(' id_tratte_acquistate :'. $id_tratte_acquistate);
                    
                    
    
    
    
    
                    //cerco il pagamento approvato
                    $inserimento = $pagamenti_paypal_model->where('order_id',$order_id)
                                                          ->where('capture_id',$capture_id)
                                                          ->where('custom',$custom)
                                                          ->first();
    
    
                    if(!$inserimento){
    
    
                        $this->paypal_lib->log_ipn_test(' CHECKOUT.ORDER.APPROVED  non tovato nel db');
    
    
                    }
    
    
    
    
                    $dati_update = [
    
    
                        'id_webhook_payment_capture_completed' => $id_webhook_payment_capture_completed,
    
    
                    ];
    
    
    
    
                    if($pagamenti_paypal_model->update($inserimento->id,$dati_update)){
    
    
    
    
                        $this->paypal_lib->log_ipn_test(' PAYMENT.CAPTURE.COMPLETED inserito nel db');
                       
                         //fai tutto quello che vuoi il pagamento è inserito nel db
                         //code
     
                    
                    }else{
    
    
                        $this->paypal_lib->log_ipn_test(' PAYMENT.CAPTURE.COMPLETED problemi INSERIMENTO nel db');
    
    
    
    
                    }
                    
                    
               }
    Questo codice è per codeigniter 4 ma può essere adattato per qualsiasi cosa in custom_id ci può essere messo praticamente tutto quello che si vuole ad esempio i valori separati da | poi si fa un explode (in php) e si recupera tutto sotto forma di array
    Ultima modifica di pippuccio76; 30-03-2022 a 19:39

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 © 2025 vBulletin Solutions, Inc. All rights reserved.