繁体   English   中英

如何在spring JPA应用程序中集成paypal rest api。 错误代码400

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

根据这里提供的java SDK,我创建了一个新项目并尝试集成代码以进行paypal api调用。 但是当我运行应用程序时,它给出了我的错误: -

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

这是我的控制器类

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

}

更新: - 我添加了client_idsecret身份验证凭据,现在我得到的是400错误,即Validation Error

401未经授权。 因此,首先您必须授权并创建授权令牌。 以下是如何创建第一个呼叫的示例。

使用应用程序的OAuth密钥进行/ token调用以获取基本身份验证值(密钥是client_id和secret的值)。 在请求正文中,将grant_type设置为client_credentials。 运行该命令时,PayPal会生成并返回一个新的访问令牌。

将您的令牌添加到您要创建的付款中。

请查看此示例中的以下行: https//github.com/paypal/PayPal-Java-SDK/blob/master/rest-api-sample/src/main/java/com/paypal/api/sample/FuturePaymentSample。 Java的#L62

所以使用Sandbox之类的东西:

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

之后,您应该能够调用tokeninfo.getAccessToken()来创建付款。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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