解决Opencart paypal ipn 返回 INVALID

系统出现个别订单状态是Pending,但Paypal已经收到钱,按照下面步骤逐一排查

1.打开Paypal的设置,修改Debug Mode为Enabled

2.后台System 》 Tools 》Error Logs,查看日志,发现出现问题的订单返回PP_STANDARD :: IPN RESPONSE: INVALID

3.通过在Paypal官网查询,发现以下文字:

To ensure that symbols and special characters in the date or other fields are processed correctly, use rawurlencode and rawurldecode instead of urlencode and decode.

查询Error Logs,出现问题的订单返回PP_STANDARD :: IPN REQUEST记录里invoice的后面,会有两个++号,导致链接不完整,从而导致IPN返回INVALID

查询 pp_standard.php代码,发现Opencart官方使用的是urlencode,修改为rawurlencode。

附上Paypal传送门 Receiving an INVALID message from PayPal

4.修改paypal的字符编码

go to your Paypal profile

click My selling tools in the sidebar

scroll to the bottom and click PayPal button language encoding

click More options and set the encoding to UTF-8

P.S.urlencode与rawurlencode区别

urlencode:返回字符串,此字符串中除了-_.之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与application/x-www-form-urlencoded的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码不同。

rawurlencode:返回字符串,此字符串中除了-_.之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。这是在 RFC 1738 中描述的编码,是为了保护原义字符以免其被解释为特殊的 URL 定界符,同时保护 URL 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱。

原文地址:https://www.cnblogs.com/chixiaobai/p/9504786.html

时间: 2024-10-28 15:32:04

解决Opencart paypal ipn 返回 INVALID的相关文章

paypal IPN 接口小结

1.sandbox下payment status为pending,pending reason为payment review 解决办法: 这个原因是买方或卖房开启了付款审核,将付款审核关闭,payment status就会变成Completed 在http://developer.paypal.com/ 登陆 在Dashboard页面的左侧菜单中点击Sandbox的Accounts 编辑买方或者卖方的个人设置Profile 选择settings,把payment review的设置改成off 2

日期转换时Safari中返回Invalid Date

问题: 进行日期转换时,Safari中会返回Invalid Date, 而IE 9, Firefox, Chrome and Opera显示正常,代码如下所示: var d = new Date("2011-02-07");  alert(d); 或者var d = new Date("2011-02-07T11:05:00");  alert(d); 解决方案: 不是所有的浏览器都支持new Date 中'yyyy-mm-dd'格式的转换,可以尝试下面的代码: v

解决在IE中返回JSON格式的数据时提示下载的问题

如题,以ASP.NET MVC为例,解决办法如下: 控制器中: public JsonResult Test() { return Json(json, "text/html"); } 视图中: $.post("/controller/action/", function (data) { data = JSON.parse(data); }); 解决在IE中返回JSON格式的数据时提示下载的问题

zbb20170928 解决springmvc在单纯返回一个字符串对象时所出现的乱码情况

解决springmvc在单纯返回一个字符串对象时所出现的乱码情况 使 用springmvc框架开发了这么长时间,之前都是直接返回jsp页面,乱码情况都是通过配置和手动编解码来解决,但是今天突然返回一段单纯的字符串 时,发现中文乱码情况解决不了了,下面就给各位分享一下如何解决返回字符串时出现的乱码情况(无需实验,直接使用即可). 之前我们都是通过在springmvc的核心配置文件中配置视图解析器来返回指定的页面,将数据通过Model对象渲染页面,最后响应给用户,但是这种方式我们是通过在web.xm

解决:ERROR 1067 (42000): Invalid default value for 'login_time'

如图操作数据表的时候出现上图的错误 问题的原因就是出在timestamp的默认值不正确,针对以上问题的解决方案是:修改默认值为当前值. sql语言代码: Alter table user modify login_time timestamp Default CURRENT_TIMESTAMP NOT NULL; 修改完之后就可以正常操作,对数据表进行增删改操作了.希望以上内容对您有所帮助,欢迎留言交流. 解决:ERROR 1067 (42000): Invalid default value

nodejs 项目,请求返回Invalid Host header问题

今天在linux上安装node,使用node做一个web服务器,在linux上安装各种依赖以后开始运行但是,出现了:Invalid Host header 的样式,在浏览器调试中发现是node返回的错误! 于是就百度,最后找到了一个解决的方法,(看的别人的). 是webpack-dev-server版本更新了的问题. 解决问题的方法: 添加配置信息 disableHostCheck: true // 启动服务 var app = new WebpackDevServer(webpack(conf

paypal IPN and PDT 2

当支付模式为快速支付(按钮)时,IPN 和PDT都会起作用, 当以Rest Api方式创建支付时, PDT是无效的,它应该是针对网站的,IPN依然起作用.调用Rest Api 付款的步骤是这样的: 1. 注册paypal账号, 升级为高级或者企业账号; 2. 登录开发者中心后台,注册app; 3. 获取Client ID, Secret; 4. 设置ipn通知地址(profile里面设置); 5. 获取paypal SDK, 在sandbox环境测试, 支付返回的url是在调用代码里面设置的:

解决Spring MVC @ResponseBody返回html中中文字符串乱码问题

最近有个应用,通过responsebody返回完整的html页面时出现乱码是异常的问题,因为是通过responsebody返回,所以一开始设置了text/plain的字符集,如下: <mvc:annotation-driven>     <mvc:message-converters register-defaults="true">    <bean class="org.springframework.http.converter.Strin

Jquery form.js文件上传返回JSON数据,在IE下提示下载文件的解决办法,并对返回数据进行正确的解析

Jquery from.js插件上传文件非常方便,但是在ie10以下的版本会弹出下载文件对话框 解决方法: 1.在服务端设置response.setContentType("text/plain"); 2.对返回数据正确解析                这时返回的数据不再是json,不能使用解析json的方法进行解析                       var data1=eval("(" + data+ ")");  //将返回的字符