PayPal 自适应付款身份验证失败,输入是名称值对。在java中

Posted

技术标签:

【中文标题】PayPal 自适应付款身份验证失败,输入是名称值对。在java中【英文标题】:PayPal Adaptive Payments Authentication failed, Inputs are Name value pair. In java 【发布时间】:2013-08-23 17:19:31 【问题描述】:

我从 paypal 沙箱收到身份验证失败,我将请求作为名称值对发送到 pay pal..

代码如下:`

final String PayPalConstants.ENCODE_TYPE="UTF-8";
final StringBuffer encodedStringBuffer = new StringBuffer();
encodedStringBuffer.append("X-PAYPAL-SECURITY-USERID=" + URLEncoder.encode(getAdaptivePaymentUserName(), PayPalConstants.ENCODE_TYPE) + "&");
    encodedStringBuffer.append("X-PAYPAL-SECURITY-PASSWORD=" + URLEncoder.encode(getAdaptivePaymentPassword(), PayPalConstants.ENCODE_TYPE) + "&");
    if (!isUseCert()) 
        encodedStringBuffer.append("X-PAYPAL-SECURITY-SIGNATURE=" + URLEncoder.encode(getAdaptivePaymentSignature(), PayPalConstants.ENCODE_TYPE) + "&");
    
    // encodedStringBuffer.append("BUTTONSOURCE=" +
    // URLEncoder.encode(PayPalConstants.BUTTONSOURCE,
    // PayPalConstants.ENCODE_TYPE) + "&");
    encodedStringBuffer.append("X-PAYPAL-REQUEST-DATA-FORMAT=" + URLEncoder.encode("NV", PayPalConstants.ENCODE_TYPE) + "&");
    encodedStringBuffer.append("X-PAYPAL-RESPONSE-DATA-FORMAT=" + URLEncoder.encode("NV", PayPalConstants.ENCODE_TYPE) + "&");
    encodedStringBuffer.append("X-PAYPAL-APPLICATION-ID=" + URLEncoder.encode(getAdaptivePaymentAppId(), PayPalConstants.ENCODE_TYPE) + "&");

                final PostMethod httpPost = new PostMethod(this.adaptivePaymentRestURL.getPath());

    httpPost.setRequestEntity(new StringRequestEntity(encodedStringBuffer.toString(), "text/html", PayPalConstants.ENCODE_TYPE));
final int result = this.adaptivePaymentHttpClient.executeMethod(httpPost);
                    if (result == 200) 
            response = httpPost.getResponseBodyAsString();


响应值如下:

<?xml version='1.0' encoding='UTF-8'?>
<ns3:FaultMessage xmlns:ns3="http://svcs.paypal.com/types/common" xmlns:ns2="http://svcs.paypal.com/types/ap">
<responseEnvelope>
<timestamp>2013-08-21T00:20:51.291-07:00</timestamp>
<ack>Failure</ack>
<correlationId>e3325********</correlationId>
<build>694****</build>
</responseEnvelope>
<error>
**<errorId>520003</errorId>**
<domain>PLATFORM</domain>
<subdomain>Application</subdomain>
<severity>Error</severity>
<category>Application</category>
<message>Authentication failed. API credentials are incorrect.</message>
</error>
</ns3:FaultMessage>

所以谁能告诉我我做错了什么? 输入字符串缓冲区是否是此 Web 服务的错​​误数据类型。 请帮帮我..我对此完全感到困惑。

提前致谢。

【问题讨论】:

【参考方案1】:

API 凭据可以作为 HTTP 标头 (https://developer.paypal.com/webapps/developer/docs/classic/api/gs_PayPalAPIs/#headers) 或 https://developer.paypal.com/webapps/developer/docs/classic/api/gs_PayPalAPIs/#payload。您似乎混淆了两者 - X-PAYPAL-* 是 HTTP 标头名称。

【讨论】:

以上是关于PayPal 自适应付款身份验证失败,输入是名称值对。在java中的主要内容,如果未能解决你的问题,请参考以下文章

如何验证我的收款人以进行 paypal 自适应付款

为啥我不能再使用 Paypal 自适应付款?

在贝宝上使用自适应付款设置公司名称和标题图像

PayPal Android SDK 实时模式中的身份验证请求失败

奇怪的贝宝:身份验证失败

PayPal 自适应付款错误 您无权隐式执行此付款