Salve a tutti , avevo un applicazione che si basava su ipn , visto che è deprecato ho deciso di implementare Javascript SDK seguendo la seguente guida :
https://www.codexworld.com/paypal-st...ration-in-php/
Ho adattato il codice lato server per adeguarlo al framework php codeigniter 4 e tutto sembra funzionare correttamente (inserisco la transazione nel db ed eseguo il response in formato json).
Il problema è lato client , ho inserito un pò di console.log per cercare di capire dove è il problema , di seguito il codice JS (all'interno c'è un minimo di php):
Mi aspetterei, visto che lato server tutto funziona di entrare nell'if qui :codice:<script> paypal.Buttons({ // Sets up the transaction when a payment button is clicked createOrder: (data, actions) => { console.log('create_order'); return actions.order.create({ "purchase_units": [{ "custom_id": "<?=$tratta_acquistata_andata->id; ?>", //"description": "<?php ?>", "amount": { "currency_code": "EUR", "value": "<?= $totale_da_pagare; ?>", "breakdown": { "item_total": { "currency_code": "EUR", "value": "<?= $totale_da_pagare; ?>" } } }, "items": [ { "name": "<?= $tratta_acquistata_andata->id; ?>", "description": "<?= $tratta_acquistata_andata->punto_partenza.'->'.$tratta_acquistata_andata->punto_arrivo ?>", "unit_amount": { "currency_code": "EUR", "value": "<?=$totale_da_pagare; ?>" }, "quantity": "1", "category": "DIGITAL_GOODS" }, ] }] }); }, // Finalize the transaction after payer approval onApprove: (data, actions) => { console.log('onApprove'); return actions.order.capture().then(function(orderData) { setProcessing(true); console.log('orderData'+JSON.stringify(orderData)); var postData = {paypal_order_check: 1, order_id: orderData.id}; fetch(' <?=base_url('paypal/check_validate') ?>', { method: 'POST', headers: {'Accept': 'application/json'}, body: encodeFormData(postData) }) .then( console.log('response'), (response) => response.json(), ) .then((result) => { console.log('result:'+ result ); if(result.status == 1){ console.log('resultStatus-if'); window.location.href = "payment-status.php?checkout_ref_id="+result.ref_id; }else{ console.log('resultStatus-else'); const messageContainer = document.querySelector("#paymentResponse"); messageContainer.classList.remove("hidden"); messageContainer.textContent = result.msg; setTimeout(function () { messageContainer.classList.add("hidden"); messageText.textContent = ""; }, 5000); } setProcessing(false); }) .catch(error => console.log(error)); }); } }).render('#paypal-button-container'); const encodeFormData = (data) => { console.log('encodeFormData'); var form_data = new FormData(); for ( var key in data ) { form_data.append(key, data[key]); } return form_data; } // Show a loader on payment form processing const setProcessing = (isProcessing) => { console.log('setProcessing'); if (isProcessing) { document.querySelector(".overlay").classList.remove("hidden"); } else { document.querySelector(".overlay").classList.add("hidden"); } } </script>
in realtà il risultato in console è :codice:if(result.status == 1){
Inanzitutto perchè ho un then(response) e poi un then(result) ?codice:create_order 135:526 onApprove 135:596 setProcessing 135:532 orderData{//non mostro tutto ma ho tutti i dati correttamente} 135:582 encodeFormData 135:541 response 135:547 result:[object Response] 135:557 resultStatus-else 135:596 setProcessing
se può essere utile in fetch/XHR di chrome nel tab response ho :
codice:{"status":1,"msg":"Transaction completed!","ref_id":"NzhXNDQ3NzlXRTUwMTIzMEU="}

Rispondi quotando