如何在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 & Johnson
COMMENT1=Level=5
要在名称-值对的值中使用特殊字符,请使用长度标记。长度标签指定出现在值中的字符和空格的确切数量。以下名称-值对有效:
NAME[14]=Ruff & Johnson
COMMENT1[7]=Level=5
更新
在Android Disussion Room 中讨论过我们的谈话后,我们发现您正在使用适用于 Android 的 Paypal Payment API。 Paypal 不支持使用 Android Payment API 的 IPN 地址中的多个参数。
一种选择是将&
字符替换为在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?