【问题标题】:Java paypal call never returns resultJava paypal 调用从不返回结果
【发布时间】:2011-07-11 00:07:55
【问题描述】:

Java 我正在使用 paypal 网站 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 网站中,我创建了以下帐户。

编辑出于安全原因已删除。

【问题讨论】:

  • 恭喜,您刚刚告诉了数百万人您的 PayPal 帐户的密码。立即更改。
  • 还有您的银行帐户详细信息。预计未来几个月 eBay 用户会收到很多投诉,因为有人会以您的名义开设账户并进行大规模欺诈。
  • 哈哈,你觉得我很愚蠢,我提供原始通行证... ;)
  • 顺便说一下,这些都是测试帐户,不用担心
  • 如果您希望删除此内容以再次发布(不包括敏感位),请标记它以引起版主注意。

标签: java paypal website-payment-pro


【解决方案1】:

您能否检查您的 java.policy 文件以检查是否有任何限制或其他情况,也许您需要在此处添加 SocketPermission 以允许应用程序连接

【讨论】:

  • 我已授予连接权限,但仍然没有运气
  • 以上代码与直接连接到互联网的计算机完美配合我在代理后面并收到此错误。很难,我已经设置了代理配置,但仍然没有运气
  • 代理可能会阻止某些协议的响应,请尝试其他返回soap的Web服务,如果该应用的代理配置不起作用。
【解决方案2】:

这是一个 HTTP 代理问题。当我从网络中删除 HTTP 代理时,它已修复

【讨论】:

    猜你喜欢
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    • 2018-09-20
    • 1970-01-01
    • 2013-02-19
    相关资源
    最近更新 更多