0

How can I set this:

private static function buildRequestBody()
{
  return array(
    'intent' => 'AUTHORIZE',
    'purchase_units' =>
      array(
        0 =>
          array(
            'amount' =>
              array(
                'currency_code' => 'USD',
                'value' => '220.00'
              )
          ),
          array(
            'payee' =>
              array(
                'email_address' => 'payee@email.com'
              )
          )
      )
  );
}

As an object within the purchase_units array in this:

<div id="paypal-button-container"></div> <script src="https://www.paypal.com/sdk/js?client-id=sb&currency=USD" data-sdk-integration-source="button-factory"></script> 
<script>   
   paypal.Buttons({
      style: {
          shape: 'pill',
          color: 'gold',
          layout: 'vertical',
          label: 'pay',
          
      },
      createOrder: function(data, actions) {
          return actions.order.create({
              purchase_units: [{
                  amount: {
                      value: '1'
                  }
              }]
          });
      },
      onApprove: function(data, actions) {
          return actions.order.capture().then(function(details) {
              alert('Transaction completed by ' + details.payer.name.given_name + '!');
          });
      }   }).render('#paypal-button-container'); </script>

I want to be able to send money to other people directly through this button, instead of using it on a website to pay the owner if that makes sense. Thanks

2 Answers2

0

use php to encode into json

<div id="paypal-button-container"></div> <script src="https://www.paypal.com/sdk/js?client-id=sb&currency=USD" data-sdk-integration-source="button-factory"></script> 
<script>   
   
   // use php to encode into json
   var purchase_units_data = <?php json_encode(self::buildRequestBody()); ?>;

   paypal.Buttons({
      style: {
          shape: 'pill',
          color: 'gold',
          layout: 'vertical',
          label: 'pay',
          
      },
      createOrder: function(data, actions) {
          return actions.order.create({
              purchase_units: purchase_units_data 
          });
      },
      onApprove: function(data, actions) {
          return actions.order.capture().then(function(details) {
              alert('Transaction completed by ' + details.payer.name.given_name + '!');
          });
      }   }).render('#paypal-button-container'); </script>
bumperbox
  • 10,166
  • 6
  • 43
  • 66
0
private static function buildRequestBody()
{
  return json_encode(
    array(
        'intent' => 'AUTHORIZE',
        'purchase_units' =>
          array(
            0 =>
              array(
                'amount' =>
                  array(
                    'currency_code' => 'USD',
                    'value' => '220.00'
                  )
              ),
              array(
                'payee' =>
                  array(
                    'email_address' => 'payee@email.com'
                  )
              )
           )
        )
      );
}

Firstly send json encoded data from php script

<div id="paypal-button-container"></div> <script src="https://www.paypal.com/sdk/js?client-id=sb&currency=USD" data-sdk-integration-source="button-factory"></script> 
<script>   
   var purchases_data_raw = <?= self::buildRequestBody(); ?>; //1. Get raw json encoded data

   var purchases_json = JSON.parse(purchases_data_raw); //2. Parse the data into JavaScript object
   paypal.Buttons({
      style: {
          shape: 'pill',
          color: 'gold',
          layout: 'vertical',
          label: 'pay',
          
      },
      createOrder: function(data, actions) {
          return actions.order.create({
              purchase_units: purchases_json //3. Use it as value.
          });
      },
      onApprove: function(data, actions) {
          return actions.order.capture().then(function(details) {
              alert('Transaction completed by ' + details.payer.name.given_name + '!');
          });
      }   }).render('#paypal-button-container'); </script>