Java PayPal Call никогда не возвращает результат - PullRequest
0 голосов
/ 08 марта 2011

Java Я использую PayPal Website Pro SDK Проблема вызовов SOAP заключается в том, что следующая строка кода возвращает исключение после долгого времени

response = (CreateRecurringPaymentsProfileResponseType) caller.call("CreateRecurringPaymentsProfile", request);

Exception is as follows.

java.net.SocketException: Connection reset
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.paypal.sdk.core.soap.SOAPAPICaller.callSOAP(SOAPAPICaller.java:462)
    at com.paypal.sdk.core.soap.SOAPAPICaller.call(SOAPAPICaller.java:382)
    at com.paypal.sdk.services.CallerServices.call(CallerServices.java:125)
    at CreateRecurringPaymentsProfile.callCreateRecurringPaymentsProfileAPI(CreateRecurringPaymentsProfile.java:85)
    at CreateRecurringPaymentsProfile.run(CreateRecurringPaymentsProfile.java:50)
    at CreateRecurringPaymentsProfile.main(CreateRecurringPaymentsProfile.java:22)
Caused by: java.net.SocketException: Connection reset

Нужен ли мне какой-либо сертификат или что-то еще, в настоящее время я использую прокси в папке классов следующим образом

# This file contains the properties that needs to be set to make the API call via Proxy.


# To make use of proxy, change PROXY_SET to true, uncomment 
# PROXY_HOST and PROXY_PORT properties and set values as illustrated below.
# Note: Just remove the # symbol to uncomment. 
# Both  PROXY_HOST and PROXY_PORT needs to be set. PROXY_PORT should be a number.
# If any one of these properties are not set or invalid, proxy settings will be ignored
# and this information will be logged.

# PROXY_HOST : IP Address or Host Name of the proxy server
# PROXY_PORT: Port number of the proxy server

 PROXY_SET = true 

 PROXY_HOST=128.1.100.13
# eg: PROXY_HOST = 127.0.0.1

 PROXY_PORT=8080
# eg: PROXY_PORT = 808

# The following properties are optional.
# If your proxy need username and password to authenticate, 
# just uncomment the following two properties and set values as illustrated below.
# Note: Just remove the # symbol to uncomment. 

# PROXY_USERNAME=<your proxy username>
# eg: PROXY_USERNAME =test

# PROXY_PASSWORD=<your proxy password>
# eg: PROXY_PASSWORD =test

Мой код следующим образом

public class CreateRecurringPaymentsProfile {
    CallerServices caller;

    public static void main(String[] args) {
        try {
            CreateRecurringPaymentsProfile sample = new CreateRecurringPaymentsProfile();
            sample.run();
        }
        catch (Exception e) {
            System.out.println("ERROR: " + e.getMessage());
        }
    }

    public CreateRecurringPaymentsProfile() throws PayPalException {
        caller = new CallerServices();

        /*
         WARNING: Do not embed plaintext credentials in your application code.
         Doing so is insecure and against best practices.
         Your API credentials must be handled securely. Please consider
         encrypting them for use in any production environment, and ensure
         that only authorized individuals may view or modify them.
         */

        APIProfile profile = ProfileFactory.createSignatureAPIProfile();
        profile.setAPIUsername("f_1299578055_biz_api1.gmail.com");
        profile.setAPIPassword("152578076");
        profile.setSignature("A.SG-Qkp9mcSwx0zh23u89eyCcWGA9MwmCgRlo2193..VNw06q1WbLTx");
        profile.setEnvironment("sandbox");
        caller.setAPIProfile(profile);
    }

    public void run() throws PayPalException {

        callCreateRecurringPaymentsProfileAPI();
        System.out.println("\nDone...");
    }



    public void callCreateRecurringPaymentsProfileAPI() throws PayPalException {
        System.out.println("\n########## Starting CreateRecurringPaymentsProfile ##########\n");

        //Replace the token value by actual value returned vy SetCustomerBillingAgreementAPI call
        String token="RP-8P463231B6009345R";
        String amount ="5.00";
        int BF=1;
        BillingPeriodType BP = BillingPeriodType.Day;

        CreateRecurringPaymentsProfileRequestType request=new CreateRecurringPaymentsProfileRequestType();
        CreateRecurringPaymentsProfileResponseType response=new CreateRecurringPaymentsProfileResponseType();
        request.setVersion("51.0");
        request.setCreateRecurringPaymentsProfileRequestDetails(new CreateRecurringPaymentsProfileRequestDetailsType())  ;
        request.getCreateRecurringPaymentsProfileRequestDetails().setToken(token);
        request.getCreateRecurringPaymentsProfileRequestDetails().setRecurringPaymentsProfileDetails(new RecurringPaymentsProfileDetailsType());

        Calendar start_date = Calendar.getInstance();
        start_date.set(2008,5,30);

        request.getCreateRecurringPaymentsProfileRequestDetails().getRecurringPaymentsProfileDetails().setBillingStartDate(start_date);
        request.getCreateRecurringPaymentsProfileRequestDetails().setScheduleDetails(new ScheduleDetailsType());
        request.getCreateRecurringPaymentsProfileRequestDetails().getScheduleDetails().setPaymentPeriod(new BillingPeriodDetailsType());
        request.getCreateRecurringPaymentsProfileRequestDetails().getScheduleDetails().setDescription("RP-Test- Java SOAP SDK");
        request.getCreateRecurringPaymentsProfileRequestDetails().getScheduleDetails().getPaymentPeriod().setAmount(new BasicAmountType());
        request.getCreateRecurringPaymentsProfileRequestDetails().getScheduleDetails().getPaymentPeriod().getAmount().set_value(amount) ;
        request.getCreateRecurringPaymentsProfileRequestDetails().getScheduleDetails().getPaymentPeriod().getAmount().setCurrencyID(CurrencyCodeType.USD);
        request.getCreateRecurringPaymentsProfileRequestDetails().getScheduleDetails().getPaymentPeriod().setBillingFrequency(BF);
        request.getCreateRecurringPaymentsProfileRequestDetails().getScheduleDetails().getPaymentPeriod().setBillingPeriod(BP);

        response = (CreateRecurringPaymentsProfileResponseType) caller.call("CreateRecurringPaymentsProfile", request);

        if (!response.getAck().equals(AckCodeType.Success) && !response.getAck().equals(AckCodeType.SuccessWithWarning)) {
            // do error processing
            System.out.println("\n########## CreateRecurringPaymentsProfile call failed ##########\n");
        } else {
            //success
            System.out.println("\n########## CreateRecurringPaymentsProfile call passed ##########\n");
        }


    }


}

На сайте developer.paypal.com я создал следующую учетную запись.

РЕДАКТИРОВАТЬ Удалено по соображениям безопасности. enter image description here

Ответы [ 2 ]

2 голосов
/ 08 марта 2011

Можете ли вы проверить файл java.policy, чтобы проверить наличие каких-либо ограничений или нет, возможно, вам нужно добавить туда SocketPermission, чтобы приложение могло подключиться

0 голосов
/ 27 декабря 2011

Это была проблема HTTP прокси. Это было исправлено, когда я удалил HTTP-прокси из сети

...