PayPal IPN POST 请求编码

Posted

技术标签:

【中文标题】PayPal IPN POST 请求编码【英文标题】:PayPal IPN POST request encoding 【发布时间】:2012-06-05 20:55:27 【问题描述】:

当尝试在 Pyramid(可能还有其他人)中使用 PayPal IPN POST 有效负载时,出现解码错误:

[...]
 File "./project/views.py", line 716, in paypal_ipn
    message = request.POST
  File "build/bdist.linux-x86_64/egg/webob/request.py", line 745, in POST
  File "build/bdist.linux-x86_64/egg/webob/multidict.py", line 74, in from_fieldstorage
  File "build/bdist.linux-x86_64/egg/webob/multidict.py", line 67, in <lambda>
  File "/sites/ts/lib64/python2.6/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xf3 in position 5: invalid continuation byte

如何解决?

【问题讨论】:

如果您可以将您的解决方案转变为自我回答并接受它,那就太好了。谢谢。 【参考方案1】:

将您的“问题”编辑为一个真正的问题,我们会很高兴的!


由于某些不虔诚的原因,PayPal 仍未进入 21 世纪,并且默认情况下仍使用 Windows-1252 编码。这可能会产生一些问题,因为现在期望 unicode 成为一种编码选择是很合理的。

这可能会导致在使用 Pyramid 时出现如下回溯:

[...]
 File "./project/views.py", line 716, in paypal_ipn
    message = request.POST
  File "build/bdist.linux-x86_64/egg/webob/request.py", line 745, in POST
  File "build/bdist.linux-x86_64/egg/webob/multidict.py", line 74, in from_fieldstorage
  File "build/bdist.linux-x86_64/egg/webob/multidict.py", line 67, in <lambda>
  File "/sites/ts/lib64/python2.6/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xf3 in position 5: invalid continuation byte

要解决这个问题,您必须:

    点击“我的帐户”下的“个人资料”链接 在 «Selling Preferences» 列中找到 «Language Encoding» 点击«更多选项» 选择«UTF-8»并保存

或者

    点击“我的帐户”下的“个人资料”链接 点击右侧的«我的销售工具» 找到«PayPal按钮语言编码»链接(应该在底部) 点击«更多选项» 选择«UTF-8»并保存

取决于您的 PayPal 帐户类型。希望这能挽救一个人和一个小时的生命。

【讨论】:

没问题。希望它现在看起来更好。【参考方案2】:

由于某些不虔诚的原因,PayPal 仍未进入 21 世纪,并且默认情况下仍使用 Windows-1252 编码。这可能会产生一些问题,因为现在期望 unicode 成为一种编码选择是很合理的。

要解决这个问题,您必须:

    点击“我的帐户”下的“个人资料”链接 在 «Selling Preferences» 列中找到 «Language Encoding» 点击«更多选项» 选择«UTF-8»并保存

或者

    点击“我的帐户”下的“个人资料”链接 点击右侧的«我的销售工具» 找到«PayPal按钮语言编码»链接(应该在底部) 点击«更多选项» 选择«UTF-8»并保存

取决于您的 PayPal 帐户类型。希望这可以挽救某人一小时的生命。

【讨论】:

以上是关于PayPal IPN POST 请求编码的主要内容,如果未能解决你的问题,请参考以下文章

测试 IPN 不应该从我的 Paypal 沙盒帐户中取钱吗?

play框架接收paypal IPN请求

django-paypal:IPN 请求总是无效的

PayPal IPN 模拟器错误请求

Paypal IPN 通过 GET 而不是 POST 发送数据,即使 rm 值为 2

我的服务器突然不再接收来自 Paypal 的 IPN 请求,工作了多年