我正在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;
}
答案 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请求到监听服务所需的内容。
的示例 中找到完整的IPN邮件正文参数列表答案 1 :(得分:1)
您可以使用“自定义”字段但出现同样的问题! 我会尝试使用自定义类似的长度标签:
var1[5]=th&ee&var2[3]=t=o&var3[3]=one
<强>值强> 的
第&安培; EE
T =
一个
这是它还是我错过了什么?
如果所有其他方法都失败了,我将替换字符并在接收端重新放置它们。