private String makePayment(String accessToken) {
    Map<String, String> sdkConfig = new HashMap<String, String>();
    sdkConfig.put("mode", "sandbox");

    // String accessToken = "Bearer A015XqgSXpttQxsNdAzq6DiMBx8oWx8p3Jt2wEyK-OmExEA";
    APIContext apiContext = new APIContext(accessToken);
    apiContext.setConfigurationMap(sdkConfig);

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

    Transaction transaction = new Transaction();
    transaction.setDescription("Creating a payment for $" + amount.getTotal());
    transaction.setAmount(amount);

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

    Payer payer = new Payer();
    payer.setPaymentMethod("paypal");

    Payment payment = new Payment();
    payment.setIntent("sale");
    payment.setPayer(payer);
    payment.setTransactions(transactions);
    RedirectUrls redirectUrls = new RedirectUrls();
    redirectUrls.setCancelUrl("https://devtools-paypal.com/guide/pay_paypal?cancel=true");
    redirectUrls.setReturnUrl("https://devtools-paypal.com/guide/pay_paypal?success=true");
    payment.setRedirectUrls(redirectUrls);

    String redirectLink = null;
    try {
      Payment createdPayment = payment.create(apiContext);
      List<Links> links = createdPayment.getLinks();

      for (Links link : links) {
        if ("redirect".equals(link.getMethod().toLowerCase())) {
          redirectLink = link.getHref();
        }
      }

      System.out.println();
    } catch (PayPalRESTException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    return redirectLink;
  }
  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("4417119669820331");
    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();
  }