微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 当PayPal在POST中向IPN侦听器发送错误的字符集时,IPN验证返回INVALID

所有以下内容都在PayPal沙箱中:

我有一个PayPal订阅/定期付款设置,它使用IPN监听器作为在我的网站数据库中创建或更新用户订阅的最后一步.但是,当我从paypal收到POST数据并将其发回以进行验证时,我收到的唯一响应是“INVALID”.

我知道我的代码正确地将POST数据发送回PayPal,因为我通过使用PayPal的IPN上显示的“IPN Message”值对POST数据字符串进行硬编码来模仿对我的侦听器的正确POST时得到“验证”响应历史页面.

所以我的代码将POST数据发送回PayPal进行最终验证,我的IPN监听器正在接收事务的POST变量.我的IPN监听器创建的POST数据字符串与PayPal和PayPal期望接收的POST数据字符串之间存在差异.

PayPal声明IPN侦听器必须使用PayPal发送的相同值,顺序和编码发回它收到的POST数据.

我认为问题是编码问题,因为在我的监听器的PayPal POST中,“charset”的值为“windows-1252”,应为“UTF-8”.但是,“form_charset”具有正确的“UTF-8”值.

我已在卖家PayPal配置文件的两个输入字段上将编码设置为UTF-8,并在初始PayPal表单/按钮中具有名为“charset”和值“UTF-8”的隐藏输入.请告诉我是否有其他方法来设置我错过的编码.

PayPal声称要发送的POST数据字符串的一部分包括“& notify_version = 3.8”,后跟更多变量.当我手动插入此字符串以测试我的代码时,“& not”在打印到页面时会转换为“¬”,据我所知,这意味着正在使用的字符编码是“windows-1252”,因为“¬”是在windows-1252字符集中,但“¬”不在UTF-8字符集中,因此如果使用UTF-8,则“& not”不会像这样转换.

如何让PayPal用UTF-8字符编码将数据实际POST到我的IPN侦听器?请注意,这是经常性付款,因此某些方面可能会有所不同.

我不认为问题在我的最后,因为我尝试了不同的方法,编码/解码发布数据的不同方式,外部库,cUrl /套接字,不同版本的SSL,不同的头,重新启动服务器,重新创建购买等
所以Paypal发送错误的POST数据或者我错误地形成了帖子字符串.后者是可能的,但我已经尝试了我可以找到的每个方法来形成post字符串,但没有一个工作.

我一直在研究这个问题几天无济于事,所以任何帮助或指针都将非常感激.

PS:
一些可能相关或不相关的注释:

>这个订阅系统是几个月前创建的,并且在过去几周的某个时刻才停止了莫名其妙的工作.当时AFAIK没有更改相关代码.
>我开始调试此问题的第一天,沙箱的卖家帐户有完全不正确的数据,当它应该是一个企业帐户时,它被列为个人帐户,这意味着没有任何IPN设置可用.第二天,同一个帐户莫名其妙地工作,并且首先显示为商业帐户.我不知道我的任何行动导致了这种变化.也许PayPal发送错误的字符编码是一个类似的问题?一个cron工作的缓存系统?我只是在猜测,我真的不知道.
>关于我的最后一点,登录卖家沙箱帐户非常不可靠.有时我尝试在会话超时后重新登录并收到错误代码,这只在注册新帐户的情况下才有意义.其他时间登录不起作用,结果是我尝试在会话超时后登录的一小部分时间,我必须清除我的cookie以重新登录工作.

解决方法:

这是一个tldr;

根据Miles的经验,似乎PayPal SandBox中存在一个错误,意味着charset设置无效.

我发现这个bug已经解决了.

更改PayPal设置中的字符集

>登录您的商家帐户
>单击配置文件
>在销售首选项下单击语言编码
>按“更多选项”按钮

First Page - Language Encoding

>选择您网站的编码,然后在yes上保留使用相同的设置按钮

Second Page - More encoding options

>保存您的设置.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐