payments/servlet/PaymentWithCreditCardServlet.java

CreatePayment using credit card Sample

This sample code demonstrate how you can process a payment with a credit card. API used: /v1/payments/payment

package com.paypal.api.payments.servlet; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import com.paypal.api.payments.Address; import com.paypal.api.payments.Amount; import com.paypal.api.payments.CreditCard; import com.paypal.api.payments.Details; import com.paypal.api.payments.FundingInstrument; import com.paypal.api.payments.Payer; import com.paypal.api.payments.Payment; import com.paypal.api.payments.Transaction; import com.paypal.api.payments.util.GenerateAccessToken; import com.paypal.api.payments.util.ResultPrinter; import com.paypal.base.rest.APIContext; import com.paypal.base.rest.PayPalRESTException; import com.paypal.base.rest.PayPalResource;

author lvairamani

public class PaymentWithCreditCardServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final Logger LOGGER = Logger .getLogger(PaymentWithCreditCardServlet.class); public void init(ServletConfig servletConfig) throws ServletException {

Load Configuration

Load SDK configuration for the resource. This intialization code can be done as Init Servlet.

InputStream is = PaymentWithCreditCardServlet.class .getResourceAsStream("/sdk_config.properties"); try { PayPalResource.initConfig(is); } catch (PayPalRESTException e) { LOGGER.fatal(e.getMessage()); } } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); }

Create

Sample showing to create a Payment using CreditCard as a FundingInstrument

@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { createPayment(req, resp); req.getRequestDispatcher("response.jsp").forward(req, resp); } public Payment createPayment(HttpServletRequest req, HttpServletResponse resp) {

Address

Base Address object used as shipping or billing address in a payment. [Optional]

Address billingAddress = new Address(); billingAddress.setCity("Johnstown"); billingAddress.setCountryCode("US"); billingAddress.setLine1("52 N Main ST"); billingAddress.setPostalCode("43210"); billingAddress.setState("OH");

CreditCard

A resource representing a credit card that can be used to fund a payment.

CreditCard creditCard = new CreditCard(); creditCard.setBillingAddress(billingAddress); creditCard.setCvv2(111); creditCard.setExpireMonth(11); creditCard.setExpireYear(2018); creditCard.setFirstName("Joe"); creditCard.setLastName("Shopper"); creditCard.setNumber("5500005555555559"); creditCard.setType("mastercard");

Details

Let's you specify details of a payment amount.

Details details = new Details(); details.setShipping("1"); details.setSubtotal("5"); details.setTax("1");

Amount

Let's you specify a payment amount.

Amount amount = new Amount(); amount.setCurrency("USD");

Total must be equal to sum of shipping, tax and subtotal.

amount.setTotal("7"); amount.setDetails(details);

Transaction

A transaction defines the contract of a payment - what is the payment for and who is fulfilling it. Transaction is created with a Payee and Amount types

Transaction transaction = new Transaction(); transaction.setAmount(amount); transaction .setDescription("This is the payment transaction description.");

The Payment creation API requires a list of Transaction; add the created Transaction to a List

List<Transaction> transactions = new ArrayList<Transaction>(); transactions.add(transaction);

FundingInstrument

A resource representing a Payeer's funding instrument. Use a Payer ID (A unique identifier of the payer generated and provided by the facilitator. This is required when creating or using a tokenized funding instrument) and the CreditCardDetails

FundingInstrument fundingInstrument = new FundingInstrument(); fundingInstrument.setCreditCard(creditCard);

The Payment creation API requires a list of FundingInstrument; add the created FundingInstrument to a List

List<FundingInstrument> fundingInstrumentList = new ArrayList<FundingInstrument>(); fundingInstrumentList.add(fundingInstrument);

Payer

A resource representing a Payer that funds a payment Use the List of FundingInstrument and the Payment Method as 'credit_card'

Payer payer = new Payer(); payer.setFundingInstruments(fundingInstrumentList); payer.setPaymentMethod("credit_card");

Payment

A Payment Resource; create one using the above types and intent as 'sale'

Payment payment = new Payment(); payment.setIntent("sale"); payment.setPayer(payer); payment.setTransactions(transactions); Payment createdPayment = null; try {

AccessToken

Retrieve the access token from OAuthTokenCredential by passing in ClientID and ClientSecret It is not mandatory to generate Access Token on a per call basis. Typically the access token can be generated once and reused within the expiry window

String accessToken = GenerateAccessToken.getAccessToken();

Api Context

Pass in a ApiContext object to authenticate the call and to send a unique request id (that ensures idempotency). The SDK generates a request id if you do not pass one explicitly.

APIContext apiContext = new APIContext(accessToken);

Use this variant if you want to pass in a request id that is meaningful in your application, ideally a order id. String requestId = Long.toString(System.nanoTime(); APIContext apiContext = new APIContext(accessToken, requestId ));

Create a payment by posting to the APIService using a valid AccessToken The return object contains the status;

createdPayment = payment.create(apiContext); LOGGER.info("Created payment with id = " + createdPayment.getId() + " and status = " + createdPayment.getState()); ResultPrinter.addResult(req, resp, "Payment with Credit Card", Payment.getLastRequest(), Payment.getLastResponse(), null); } catch (PayPalRESTException e) { ResultPrinter.addResult(req, resp, "Payment with Credit Card", Payment.getLastRequest(), null, e.getMessage()); } return createdPayment; } }