简体   繁体   中英

How to implement Paypal payouts with paypal smart button integration in rails

I have implemented PayPal checkout API in my rails application by using the SmartButtons and by creating the order in the server-side .

I have used the payouts-ruby-sdk gem and my code is as follows:-

index.html.erb
<!-- Set up a container element for the button -->
<div id="paypal-button-container"></div>

<!-- Include the PayPal JavaScript SDK -->
<script src="https://www.paypal.com/sdk/js?client-id=xyz&currency=USD"></script>

<script>
    // Render the PayPal button into #paypal-button-container
    paypal.Buttons({

        // Call your server to set up the transaction
        createOrder: function(data, actions) {
            return fetch('/orders', {
                method: 'post'
            }).then(function(res) {
                return res.json();
            }).then(function(orderData) {
                return orderData.orderID;
            });
        },

        // Call your server to finalize the transaction
        onApprove: function(data, actions) {
            return fetch('/orders/' + data.orderID + '/capture', {
                method: 'post'
            }).then(function(res) {
                return res.json();
            }).then(function(orderData) {
                // Three cases to handle:
                //   (1) Recoverable INSTRUMENT_DECLINED -> call actions.restart()
                //   (2) Other non-recoverable errors -> Show a failure message
                //   (3) Successful transaction -> Show a success / thank you message

                // Your server defines the structure of 'orderData', which may differ
                var errorDetail = Array.isArray(orderData.details) && orderData.details[0];

                if (errorDetail && errorDetail.issue === 'INSTRUMENT_DECLINED') {
                    // Recoverable state, see: "Handle Funding Failures"
                    // https://developer.paypal.com/docs/checkout/integration-features/funding-failure/
                    return actions.restart();
                }

                if (errorDetail) {
                    var msg = 'Sorry, your transaction could not be processed.';
                    if (errorDetail.description) msg += '\n\n' + errorDetail.description;
                    if (orderData.debug_id) msg += ' (' + orderData.debug_id + ')';
                    // Show a failure message
                    return alert(msg);
                }

                // Show a success message to the buyer
                alert('Transaction completed');
            });
        }


    }).render('#paypal-button-container');
</script>

orders_controller.rb

class OrdersController < ApplicationController
   skip_before_action :verify_authenticity_token

  def index
  end

  def create
    # Creating Access Token for Sandbox
        client_id =  'xyz'
      client_secret = 'abc'
        # Creating an environment
        environment = PayPal::SandboxEnvironment.new(client_id, client_secret)
        client = PayPal::PayPalHttpClient.new(environment)

        request = PayPalCheckoutSdk::Orders::OrdersCreateRequest::new
        request.request_body({
                                intent: "CAPTURE",
                                purchase_units: [
                                    {
                                        amount: {
                                            currency_code: "USD",
                                            value: "10.00"
                                        }
                                    }
                                ]
                              })

        begin
        # Call API with your client and get a response for your call
        # debugger
        response = client.execute(request)
        puts response.result.id
        render json: {success: true, orderID: response.result.id}
        rescue PayPalHttp::HttpError => ioe
            # Something went wrong server-side
            puts ioe.status_code
            puts ioe.headers["debug_id"]
        end
  end

  def execute_payment
    client_id =  'xyz'
    client_secret = 'abc'
        # Creating an environment
        environment = PayPal::SandboxEnvironment.new(client_id, client_secret)
        client = PayPal::PayPalHttpClient.new(environment)

      request = PayPalCheckoutSdk::Orders::OrdersCaptureRequest::new(session[:orderID])

        begin
            # Call API with your client and get a response for your call
            response = client.execute(request) 
            
            # If call returns body in response, you can get the deserialized version from the result attribute of the response
            order = response.result
            puts order
        rescue PayPalHttp::HttpError => ioe
            # Something went wrong server-side
            puts ioe.status_code
            puts ioe.headers["debug_id"]
        end
  end
end

Now I want to implement the Paypal's Payouts API and I know that paypal-ruby-sdk is available for it but I am confused where to fit this code and how to integrate it with the front end. Any ideas? Thanks in advance:)

Your code above is Checkout code, for both front-end (JavaScript), and back-end (Ruby).

Payouts has nothing to do with Checkout, neither front-end Checkout nor back-end Checkout.

Payouts is strictly a backend API operation, where you send money from your account to another account.

Payouts does not connect to any front-end UI. You can build your own UI to trigger a payout, if you need one. Presumably you know who you want to send money from your account to, and what process should trigger this action.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM