如何在Android上将多个参数传递给IPN网址到PayPal?

时间:2011-07-05 14:11:42

标签: android paypal paypal-ipn

我正在Android应用程序中实现PayPal,我希望将多个参数作为查询字符串发送到PayPal,并带有IPN URL。

例如

http://www.example.com/ipn/txnId=12&cartId=12

但问题是当我使用此URL作为IPN URL时,PayPal会给我一个错误。

我尝试过使用URLEncoding,但又没有成功付款。

如果我尝试使用单个参数,它就可以了。

实施例

http://www.example.com/ipn/txnId=12

我遇到了一个问题,即PayPal不接受字符串中的&个字符 所以我尝试用&&替换\\&,但它也没有帮助。

我知道我可以将多个参数设置为单个变量并将其传递给PayPal,但我想传递多个参数,例如查询字符串。

如何让PayPal接受多个参数的付款?

修改

目前我正在使用此代码进行编码URL但它失败了。

protected String addLocationToUrl(String url){

        if(!url.endsWith("?"))
            url += "?";

        List<NameValuePair> params = new LinkedList<NameValuePair>();

            params.add(new BasicNameValuePair("txnId", "45"));
            params.add(new BasicNameValuePair("cartId", "34"));



        String paramString = URLEncodedUtils.format(params, "utf-8");

        url += paramString;


        return url;
    }

2 个答案:

答案 0 :(得分:4)

来自开发者指南的第20页 https://cms.paypal.com/cms_content/en_US/files/developer/PP_PayflowPro_Guide.pdf

在值中使用特殊字符

因为&符号(&amp;)和等号(=)字符在PARMLIST中具有特殊含义,所以像以下示例一样的名称 - 值对无效:

NAME=Ruff & Johnson

COMMENT1=Level=5

要在名称 - 值对的值中使用特殊字符,请使用长度标记。 length标记指定值中显示的确切字符数和空格数。以下名称 - 值对有效:

NAME[14]=Ruff & Johnson

COMMENT1[7]=Level=5

<强>更新

根据我们在Android Disussion Room中讨论过的对话,您开始使用Paypal Payment API for Android。 Paypal不使用Android Payment API为IPN地址中的多个参数提供支持。

一种选择是将&字符替换为URL中没有特殊含义的字符。然后在您的IPN侦听器接收时解析单个参数值中的值,但是您还必须替换后续的=个字符。

e.g。 http://www.example.com/ipn/params=txnId_12-cartId_12

您声明您需要这些额外的参数用于验证目的,但如果要安全实施,则应按照paypal的规定实施验证。

请阅读Overview of Instant Payment Notification。这描述了IPN过程以及验证IPN请求到监听服务所需的内容。

您还可以找到Implementing an IPN listener in PHP

的示例

可以在Order Management Integration Guide

中找到完整的IPN邮件正文参数列表

答案 1 :(得分:1)

您可以使用“自定义”字段但出现同样的问题! 我会尝试使用自定义类似的长度标签:

var1[5]=th&ee&var2[3]=t=o&var3[3]=one

<强>值

第&安培; EE

T =

一个


这是它还是我错过了什么?

如果所有其他方法都失败了,我将替换字符并在接收端重新放置它们。