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

Posted

技术标签:

【中文标题】如何在Android上将多个参数传递给IPN url到PayPal?【英文标题】:How to pass multiple parameters to IPN url to PayPal on Android? 【发布时间】:2011-09-28 20:51:49 【问题描述】:

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

例如

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;
    

【问题讨论】:

【参考方案1】:

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

在值中使用特殊字符

由于和号 ( & ) 和等号 (=) 字符在 PARMLIST 中具有特殊含义,因此像以下示例这样的名称-值对无效:

NAME=Ruff &amp; Johnson

COMMENT1=Level=5

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

NAME[14]=Ruff &amp; Johnson

COMMENT1[7]=Level=5

更新

在Android Disussion Room 中讨论过我们的谈话后,我们发现您正在使用适用于 Android 的 Paypal Payment API。 Paypal 不支持使用 Android Payment API 的 IPN 地址中的多个参数。

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

例如http://www.example.com/ipn/params=txnId_12-cartId_12

您说您需要这些附加参数来进行验证,但如果要安全地实施,则应按照 paypal 的规定实施验证。

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

您还可以找到Implementing an IPN listener in php 的示例

IPN消息体参数的完整列表可以在Order Management Integration Guide中找到

【讨论】:

你知道paypal发送IPN时如何验证通知吗?什么时候有特殊字符?【参考方案2】:

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

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

价值观

t=o

一个


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

如果一切都失败了,我将替换字符并在接收端替换它们。

【讨论】:

以上是关于如何在Android上将多个参数传递给IPN url到PayPal?的主要内容,如果未能解决你的问题,请参考以下文章

将 text_field 自定义参数传递给 link_to paypal IPN

如何使用底部导航视图和 Android 导航组件将参数传递给片段?

Omnipay - 如何将“自定义”或“发票”参数传递给 Paypal?

如何在django中将多个参数传递给url

Android:如何将参数传递给 AsyncTask 的 onPreExecute()?

如何在 PySpark 中将多个参数传递给 Pandas UDF?