// #RefundCapture Sample // This sample code demonstrate how you // can do a Refund on a Capture // resource // API used: /v1/payments/capture/{capture_id}/refund package com.paypal.api.payments.servlet; import com.paypal.api.payments.*; import com.paypal.api.payments.util.ResultPrinter; import com.paypal.base.rest.APIContext; import com.paypal.base.rest.PayPalRESTException; import org.apache.log4j.Logger; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.List; import static com.paypal.api.payments.util.SampleConstants.*; public class RefundCaptureServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final Logger LOGGER = Logger .getLogger(GetAuthorizationServlet.class); @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } // ##RefundCapture // Sample showing to how to do a Refund on // a Capture @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { // ### 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(clientID, clientSecret, mode); // ###Authorization // Retrieve a Authorization object // by making a Payment with intent // as 'authorize' Authorization authorization = getAuthorization(apiContext); /// ###Capture // Create a Capture object // by doing a capture on // Authorization object Capture capture = getCapture(apiContext, authorization); /// ###Refund /// Create a Refund object RefundRequest refund = new RefundRequest(); // ###Amount // Let's you specify a capture amount. Amount amount = new Amount(); amount.setCurrency("USD").setTotal("1"); refund.setAmount(amount); // Do a Refund by // POSTing to // URI v1/payments/capture/{capture_id}/refund Refund responseRefund = capture.refund(apiContext, refund); LOGGER.info("Refund id = " + responseRefund.getId() + " and status = " + responseRefund.getState()); ResultPrinter.addResult(req, resp, "Refund a Capture", Refund.getLastRequest(), Refund.getLastResponse(), null); } catch (PayPalRESTException e) { ResultPrinter.addResult(req, resp, "Refund a Capture", Refund.getLastRequest(), null, e.getMessage()); } req.getRequestDispatcher("response.jsp").forward(req, resp); } private Capture getCapture(APIContext apiContext, Authorization authorization) throws PayPalRESTException{ // ###Amount // Let's you specify a capture amount. Amount amount = new Amount(); amount.setCurrency("USD"); amount.setTotal("4.54"); // ###Capture Capture capture = new Capture(); capture.setAmount(amount); // ##IsFinalCapture // If set to true, all remaining // funds held by the authorization // will be released in the funding // instrument. Default is �false�. capture.setIsFinalCapture(true); // Capture by POSTing to // URI v1/payments/authorization/{authorization_id}/capture Capture responseCapture = authorization.capture(apiContext, capture); return responseCapture; } private Authorization getAuthorization(APIContext apiContext) throws PayPalRESTException { // ###Details // Let's you specify details of a payment amount. Details details = new Details(); details.setShipping("0.03"); details.setSubtotal("107.41"); details.setTax("0.03"); // ###Amount // Let's you specify a payment amount. Amount amount = new Amount(); amount.setCurrency("USD"); amount.setTotal("107.47"); 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); // ###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(874); creditCard.setExpireMonth(11); creditCard.setExpireYear(2018); creditCard.setFirstName("Joe"); creditCard.setLastName("Shopper"); creditCard.setNumber("4669424246660779"); creditCard.setType("visa"); // ###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> fundingInstruments = new ArrayList<FundingInstrument>(); fundingInstruments.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(fundingInstruments); payer.setPaymentMethod("credit_card"); // ###Payment // A Payment Resource; create one using // the above types and intent as 'authorize' Payment payment = new Payment(); payment.setIntent("authorize"); payment.setPayer(payer); payment.setTransactions(transactions); Payment responsePayment = payment.create(apiContext); return responsePayment.getTransactions().get(0).getRelatedResources() .get(0).getAuthorization(); } }