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();
  }