最近(2017年3月开始),_cart
表单与PayPal付款标准的集成已开始将所有商品信息(名称和选项)中的空格编码为加号(+
)。我在Chrome中验证了这种情况,并在表单中添加了enctype
属性,这似乎为我解决了问题。在Chrome和Firefox中,我可以将数据发送到PayPal并正确保留空格。也许这是一个侥幸?
但是,几乎每个购买的客户都会对其信息进行不正确的编码,导致IPN请求无法验证他们购买的产品。
表格:
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="cmd" value="_cart">
<input type="hidden" name="upload" value="1">
<input type="hidden" name="business" value="name@example.com">
<input type="hidden" name="charset" value="utf-8">
<input type="hidden" name="item_name_1" value="Product With Spaces">
<input type="hidden" name="quantity_1" value="1">
<input type="hidden" name="amount_1" value="30.00">
<input type="hidden" name="on0_1" value="Name">
<input type="hidden" name="os0_1" value="First Last">
<input type="hidden" name="on1_1" value="Email">
<input type="hidden" name="os1_1" value="customer@example.com">
<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_xpressCheckout.gif" align="left" style="margin-right:7px; margin-top: 2px;">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>
提交给PayPal后,产品显示为Product+With+Spaces
,名称显示为First+Last
。因此,PayPal上的交易记录和IPN请求也具有错误编码的数据。
我尝试将空格编码为%20
或+
(这通常会导致双重编码,因此我没想到会有所帮助),但这些文字字符显示在PayPal上。
我已经阅读了PayPal开发人员文档,我似乎正在使用最新的字段和网址。此外,这段代码已成功运行多年,没有任何问题。
答案 0 :(得分:3)
解决!添加了enctype =&#34; multipart / form-data&#34;属性为paypal按钮形式,返回到ipn的变量返回与提交的状态相同