Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Integrating With Paypal API for Mobile Payments

DZone's Guide to

Integrating With Paypal API for Mobile Payments

OAuth 2 and REST APIs provide the keys to this straightforward example.

· Mobile Zone
Free Resource

Get gorgeous, multi-touch charts for your iOS application with just a few lines of code.

PayPal is obviously one of the most popular services and APIs to use when you want to support payments in your mobile app. This tutorial will show you how to create a single payment using Appery.io Server Code. You can the use it as a starting point for all other APIs made available by PayPal.

If you read the PayPal documentation, the first step is to get a token so you can invoke PayPal APIs. Before you can get the token, you need to create an app in PayPal:

Screen Shot 2016-04-27 at 4.25.01 PM

Every app has a Client ID and Secret values that you need to use to get a token.

Screen Shot 2016-04-27 at 4.31.49 PMThe Server Code script below sends a request to PayPal to get a token:
var url = "https://api.sandbox.paypal.com/v1/oauth2/token";

var XHRResponse = XHR2.send("POST", url, {
 "parameters": {
 "grant_type": "client_credentials"
 },
 "headers": {
 "Accept": "application/json",
 "Accept-Language": "en_US",
 "Authorization": "Basic clientid:secret_as_base64"
});

Apperyio.response.success(XHRResponse.body, "application/json");


The response looks like this:

{
 "app_id": "APP-80W2.....",
 "access_token": "A101.VyA8xBdNyOY.....",
 "token_type": "Bearer",
 "scope": "https://uri.paypal.com/....",
 "nonce": "2016-04-27T23:15:21Zahq3.....",
 "expires_in": 31284
}

The access_token is what you need to invoke any other PayPal API.

Now that you have the token, you can invoke any PayPal API. In the next script I create a payment (charge):

var url = "https://api.sandbox.paypal.com/v1/payments/payment";

var XHRResponse = XHR2.send("POST", url, {
 "headers": {
 "Content-type": "application/json",
 "Authorization": "Bearer A101.VyA8xBdNyOY....."
 },
 "body": {
 "intent": "sale",
 "payer": {
 "payment_method": "credit_card",
 "funding_instruments": [{
 "credit_card": {
 "number": "4060xxxxxxxxxxxx",
 "type": "visa",
 "expire_month": 06,
 "expire_year": 2019,
 "cvv2": "874",
 "first_name": "Betsy",
 "last_name": "Buyer",
 "billing_address": {
 "line1": "111 First Street",
 "city": "Saratoga",
 "state": "CA",
 "postal_code": "95070",
 "country_code": "US"
 }
 }
 }]
 },
 "transactions": [{
 "amount": {
 "total": "7.47",
 "currency": "USD",
 "details": {
 "subtotal": "7.41",
 "tax": "0.03",
 "shipping": "0.03"
 }
 },
 "description": "This is the payment transaction description."
 }]
 }
});

Apperyio.response.success(XHRResponse.body, "application/json");

The payment example was adopted from PayPal API documentation

One important thing you need to do is use a valid credit card number from your test account. Without a valid credit card number, the request will not work. To find your credit card number go to Sandbox > Accounts, expand your account and click Profile. Select the Funding tab and use the credit card and expiration data from there for the test payment.

Once you have a working Server Code script that creates a payment in PayPal, you can use the script in your mobile app. A Server Code script is automatically exposed via a REST API, which you can call from your app. We have many videos on our YouTube channel that show how to use Server Code and other Appery.io backend services.

.Net developers: use Highcharts, the industry's leading interactive charting library, without writing a single line of JavaScript.

Topics:
paypal ,api ,mobile payment ,mobile

Published at DZone with permission of Max Katz, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

THE DZONE NEWSLETTER

Dev Resources & Solutions Straight to Your Inbox

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.

X

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}