简体   繁体   中英

How to integrate paypal rest api in spring JPA application. ERROR CODE 400

As per the java SDK provided here , I created a new project and tried to integrate the codes to make paypal api calls. But when I run the application, it gives me error as :-

Error code : 401 with response : Server returned HTTP response code: 401 for URL: https://api.sandbox.paypal.com/v1/payments/payment

Here is my controller class

package com.main.controller;

public class PaymentController{ 

@RequestMapping(method = RequestMethod.POST, produces = "application/JSON")

public Payment getString(){

    InputStream is = PaymentController.class
            .getResourceAsStream("/sdk_config.properties");
    try {
        PayPalResource.initConfig(is);
        System.out.println("initiialization done");
    } catch (PayPalRESTException e) {
        System.out.println("Paypal Rest Exception : " + e.getMessage());
    }

    Map<String, String > map = new HashMap<String, String>();
    map.put("mode", "sandbox");
    String clientID = "AYDNebhrsuqiUKPU_ab-tCvGGVkzaxw2y4bIJFIl4rMuCW..........................";
    String clientSecret="ENgjkFRgy1yGhal0aobwdF8kLNglkDaDeDItLN-lgQJZV4W1FpNQ27g3FC...............";

    try {
        accessToken = new OAuthTokenCredential(clientID, clientSecret,map).getAccessToken();
    } catch (PayPalRESTException e) {
        // TODO Auto-generated catch block
        System.out.println("Cannot make the OAuthentication :" + e.getMessage());
    }

    Payment payment = createPayment();

    return payment;
}

public Payment createPayment(){

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

    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 details = new Details();
    details.setShipping("1");
    details.setSubtotal("5");
    details.setTax("1");

    Amount amount = new Amount();
    amount.setCurrency("USD");
    amount.setTotal("7");
    amount.setDetails(details);

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


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

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


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

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

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

        String realAccessToken = "A101.kPIsO7eGXhg420XIjnZmPboCS27CeDF6TZjVfGR31f6ja1IotK3e6U-E_k9MwOO5.....";


        /*
         * String requestId = Long.toString(System.nanoTime(); APIContext
         * apiContext = new APIContext(accessToken, requestId ));
         */

        createdPayment = payment.create(apiContext);

        System.out.println("Created payment with id = " + createdPayment.getId()
        + " and status = " + createdPayment.getState());
    } catch (PayPalRESTException e) {
        System.out.println("Cannot make the payment from here: " + e.getMessage());
    }
    return createdPayment;
}

}

UPDATE :- I have added client_id and secret authentication credentials and now I get is 400 error which is Validation Error

401 is Unauthorized. So, at first you have to authorized and create authorized token. Here is example how to create you first call.

Make a /token call using your application's OAuth keys for the basic authentication values (the keys are the values of your client_id and secret). In the request body, set grant_type to client_credentials. When you run the command, PayPal generates and returns a new access token.

Add your token to your payment which you want to create.

Look at this line in this Sample: https://github.com/paypal/PayPal-Java-SDK/blob/master/rest-api-sample/src/main/java/com/paypal/api/sample/FuturePaymentSample.java#L62

So use Sandbox and something like that:

Map<String, String> configurationMap = new HashMap<String, String>();
            configurationMap.put("mode", "sandbox");
            APIContext apiContext = new APIContext();
            apiContext.setConfigurationMap(configurationMap);
            tokeninfo = Tokeninfo.createFromAuthorizationCodeForFpp(apiContext, params);
            tokeninfo.setAccessToken(tokeninfo.getTokenType() + " " + tokeninfo.getAccessToken());

After that you should be able to call tokeninfo.getAccessToken() for creating payment.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM