Клиентская сторона PayPal JavaScript SDK не отправляет сообщения на сервер - PullRequest
0 голосов
/ 07 марта 2019

Как мне опубликовать orderID на сервере, используя PayPal SDK? Пример кода не работает ни на локальном хосте, ни на удаленном хосте. После отправки сообщения PayPal сообщение пусто.

Согласно, https://developer.paypal.com/docs/checkout/integrate/#6-verify-the-transaction

PayBundle \ Resources \ actions \ ppal \ ppalAction_brt_stkovr.php

<?php

use PayBundle\actions\Order;  

echo "<br><br> POST ="; print_r($_POST);  
file_put_contents( PHP_EOL . PHP_EOL . __DIR__ .'/out.php', json_encode( $_POST ) .' from '.__FILE__, FILE_APPEND );

include_once ( PATH_ACTIONS_PAY . '/ppal/__init.php' );
include_once ( PATH_ACTIONS_PAY . '/ppal/__payAInit.php' );

require_once PATH_VENDOR . '/braintree/braintree_php/lib/Braintree.php';

use Sample\PayPalClient; 
use PayPalCheckoutSdk\Orders\OrdersGetRequest;

Braintree_Configuration::environment( 'sandbox' );
Braintree_Configuration::merchantId( 'x' );
Braintree_Configuration::publicKey( 'y' );
Braintree_Configuration::privateKey( 'z' );


if( isset($_POST['payPp'] ) ) {  

    include_once ( PATH_ACTIONS_PAY . '/ppal/pay/'.$this->vdArr['lang'].'/__Bk.php' ); 
    echo "<br> from ppalAction orderID = "; print_r($this->vdArr['orderID']);

    if ( !count(debug_backtrace()) ) {
        $ppalOrder = new GetOrder();
        $ppalOrder->getOrder( $this->vdArr['orderID'], true);
    } // if ( !count(debug_backtrace())  

} // if( isset($_POST['paypalA'] ) ) {

else {
    $this->vdArr['tokenPpal'] = Braintree_ClientToken::generate(); 
}

код клиента:

<script type='text/javascript'  >

window.onload = function() {

    paypal.Buttons({

        createOrder: function(data, actions) {
          return actions.order.create({
            purchase_units: [{
              amount: {
                value: '0.01'
              }
            }]
          });  
        },

        onApprove: function( data, actions ) {
            return actions.order.capture().then( function(details) {
                //alert('Transaction completed by ' + details.payer.name.given_name);
                // Call your server to save the transaction
                //console.log('Transaction completed' ); alert(details); 
                console.log( 'data.orderID = ' + data.orderID ); 
                document.getElementById('orderID').value = data.orderID;
                console.log('data'); console.log(data); 
                console.log('Transaction completed by ' + details.payer.name.given_name );
                //return fetch('/paypal-transaction-complete', {
                return fetch( 'https://typejoy.biz/pay/ppal_1025/EN/pay', {
                    method: 'POST',
                    body: JSON.stringify({
                        orderID: data.orderID,
                        payPp: 1
                    })
                }); // return fetch( 'https://typejoy.biz/pay/ppal_1025/EN/pay
            }); // return actions.order.capture().then( function(details
        } // onApprove: function(data, actions

      }).render('#payPp');  

} // window.onload = function() {
</script>

В консоли на стороне клинета я могу регистрировать orderID, но я не понимаю, как передать его на сторону сервера. Как работает функция выборки? я должен использовать другой тип функции? Как сделать это правильно?

1 Ответ

0 голосов
/ 07 марта 2019

Кажется, проблема в том, что моя сторона-обозреватель не работает ни с запросами JSON, ни сгенерирует ответы JSON.Официальная документация содержит пример с fetch.

Есть два решения - сделать правильный выбор для извлечения или использовать другой подход, подобный этому:

paypal.Buttons ({

createOrder: function( data, actions ) {
  return actions.order.create({
    purchase_units: [{
      amount: {
        value: '0.01'
      }
    }]
  });  
},

onApprove: function( data, actions ) {
    return actions.order.capture().then( function(details) {
        //alert('Transaction completed by ' + details.payer.name.given_name);
        // Call your server to save the transaction
        //console.log('Transaction completed' ); alert(details); 
        console.log( 'data.orderID = ' + data.orderID ); 
        document.getElementById('orderID').value = data.orderID;
        console.log('data'); console.log(data); 
        console.log('Transaction completed by ' + details.payer.name.given_name );

        var form = document.getElementById('ppalForm'); // $("#paymentForm"); 
        var btn = document.createElement("input");
        btn.type = "submit";
        btn.id = "submitPp";
        btn.value= 1;
        form.appendChild(btn); // container.appendChild(input);
        //form.append("<input hidden id='payPp' name='payPp' value='1' />");
        console.log('form ='); console.log(form); 
        form.submit();

    } ); // return actions.order.capture().then( function(details
} // onApprove: function(data, actions

}). Render ('#payPp');

main_view.php

<form  id='ppalForm' method='POST' action='<?php echo $payPpFrmAction; ?>' >
<div id='payPp' >
//.. here goes form fields

</form>

action.php

use PayBundle\actions\Order;  

if( isset($_POST['payPp'] ) ) {

    //if ( !count(debug_backtrace()) ) {
        $ppalOrder = new GetOrder();
        $ppalOrder->getOrder( $this->vdArr['orderID'], true);
    //} // if ( !count(debug_backtrace())  

} else {
  $tokenPpal = Braintree_ClientToken::generate();

// для передачи на просмотр в форму, для поиска в стороне клиента}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...