2018年5月

目前接入支付宝一般使用开放平台的openapi接口,应该没有新系统接入mapi这种旧版本API了,但前段时间碰到一个旧系统改造的需求,必须接入mapi。在最后签名与验签的时候碰到ILLEGAL_SIGN的错误信息。经过排查,可能会存在如下原因:

1、构建表单并输出到页面时忘记加上meta标签指定编码,可能造成表单中中文值的乱码。

在拼接表单时,需要加入如下代码来指定页面编码。

<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />

2、Java输出表单如果使用了response.getWriter().write()方法,必须在输出之前设置response的编码。如下:

response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=UTF-8");

经过测试,在拼接表单阶段是不需要对表单的中文值进行URLEncode的,提示ILLEGAL_SIGN的原因并不在中文强制编码上,而是在各个环节可能造成的中文乱码。解决问题的根源就在于从头到尾需要统一编码。

如果怀疑表单乱码,可以不在表单内容上拼接自动提交表单的JS代码,从而有时间查看表单在页面上的真实渲染结果,从而确认表单是否有乱码。

如果您进入了这个帖子,我想应该是通过搜索引擎进来的。

您应该已经尝试了N多次重装VSCode和Go插件,但只要是同一台机器无论怎么重装都无济于事。

您应该也已经尝试了N多次删除launch.json或.vscode目录后启动您的Go程序,但无论怎么删除都无济于事。

您应该又已经尝试了N多次修改VSCode的goroot和gopath配置,但无论怎么修改都无济于事。

您应该还已经尝试了百度、Bing、Gxxgle,或者无数遍查看了VSCode在github上的issue列表,看着其他人说“Fixed in version XX.XX, thanks.:)”,但自己的VSCode无论怎么更新都无法解决。

这里提供一个可能有效的解决办法。删除如下的目录:

C:\Users\Administrator\.vscode\extensions

这个解决办法对我有效,希望对您也有效。