获取签名接口,url含有中文,invalid signature

阅读更多
签名有效条件: 后台调用微信接口获取票据的URL 和当前 浏览器的URL 一致。
即:
  自己后台签名接口获得的URL===浏览器的URL

以上等式如果 有中文,不成立的原因分点说:
1.服务器数据集非UTF-8。
=>后台得到的是乱码 --> 只能是前端编码两次,后端UTF8解码一次。解决!

2.服务器数据集是UTF-8。
2.1 URL包含0或1个参数
=>完全正常--> 前端无需编码,后端也无需解码。
2.2 URL含有多个参数
=>微信浏览器会将URL后面的参数给拆散,破坏了URL
-->前端 一次编码,后端 不要解码。(这里,服务器自己已解码,再解码会将浏览器对中文的编码解码成中文,导致URL不一致,签名无效)
-->当然,如果前端 两次编码,那么后端就需要解码 一次

-------------------------------------------------
综上,关键在于服务器编码,和微信浏览器 两个原因。
同时解决掉这两者的方法就是:
  前端两次编码,后端一次解码

你可能感兴趣的:(微信接口,URL含有中文)