微信分享链接编码问题

xiaoxiao2021-02-28  185

微信分享生成链接编码及参数解码出现乱码问题

 

1.  场景

 

APP生成分享链接

String params= ThreeDes.encryptThreeDESECB(userId + "," + channelId +"," + activityId);

           params = URLEncoder.encode(params,"UTF-8");

参数ThreeDes加密后 在经过utf-8编码encode;

String p ="https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appId;

url = p +"&redirect_uri=" + URLEncoder.encode(shareUrl, "UTF-8");

shareUrl再经过utf-8编码

此时encode两次 一些字符编码两次成为+格式

调用接口传参获取分享链接

String p =URLEncoder.encode(ThreeDes.encryptThreeDESECB(user.getUserId() + ","+ channelId + "," + activityId), "UTF-8");

StringshareUrl = baseUrl+"/investShare/shareWeixin/v1.0?params=" +URLEncoder.encode(p, "UTF-8");

 

ThreeDES加密获取的userId、channelId activityId、用UTF-8encode、生成一个分享链接

 

分享到微信 其他用户点击此分享链接时调用方法跳转页面

方法体中:

String param =request.getParameter(“params”);

String decode= URLDecoder.decode(sharedParam);

 

再用ThreeDES解密 获取参数

String[]params = ThreeDes.decryptThreeDESECB(decode).split(",");

 

微信中再进行分享 依旧调用之前跳转页面方法

此时分享的url为当前页面的链接 此链接在方法中生成

StringbaseUrl = request.getRequestURL().substring(0,

                  request.getRequestURL().length()- request.getRequestURI().length())

                  + request.getContextPath();

url未经过utf-8编码

由于request.getParameter(“params”);方法

会自动进行一次解码(使用iso-8859-1格式)

将+解码为‘+’

在进行解码时 +解码成 “ ”

进行ThreeDes.decryptThreeDESECB解密时 会被解析成乱码

而产生服务器端报错

 

 

结语

调用方法生成url及访问url进入controller层跳转页面时

Decode与encode次数要保持一致否则会导致一些难以察觉的错误

转载请注明原文地址: https://www.6miu.com/read-22838.html

最新回复(0)