JSSDK实现微信自定义分享---java 后端获取签名信息

一、首先说下关于微信Access_token的问题,微信Access_token分为2中:

1.授权token获取方式:

这种token需要code值(如何获取code值查看官方文档)

 1 "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appId + "&secret=" + appsecret 2 + "&code=" + code + "&grant_type=authorization_code";  

2.基础token获取方式:

 1 "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + appsecret; 

我们下面用token获取分享签名 jsapi_ticket 就是使用基础token,如果用错了token会错以为token过期。

二、下面是获取jssdk 签名的代码

复制代码
 1 private JsSdkDto find() throws Exception{
 2 
 3         JsSdkDto jsSdkDto = new JsSdkDto();
 4 
 5         /** 前端传的 需要授权分享的url **/
 6         String authorizationUrl = "www.baidu.com";
 7 
 8         /** 获取微信access_token的url **/
 9         String weChatUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}";
10 
11         String appId = "1232we3234ew";  //公众号的appId
12         String secret = "324323dfs3243qew";  //公众号号的密钥
13 
14         String Url = MessageFormat.format(weChatUrl, appId,secret);
15         URL url = new URL(Url);
16 
17         /** 获取微信access_token **/
18         JSONObject jsonObjectAccessToken;
19         try (InputStream inputStream = url.openStream()) {
20             jsonObjectAccessToken = JSONObject.parseObject(IOUtils.toString(inputStream));
21         }
22         if (jsonObjectAccessToken.containsKey("errmsg")) {
23             throw new FrankyException("获取token,原因:" + jsonObjectAccessToken.getString("errmsg"));
24         }
25         String access_token = jsonObjectAccessToken.getString("access_token");
26 
27         /** 获取 jsapi_ticket **/
28         String getUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+access_token+"&type=jsapi";
29         JSONObject jsonObject = wechatService.urlConnector(getUrl);
30         if (!jsonObject.get("errmsg").equals("ok")){
31             throw new FrankyException(ErrorCode.PARAMETER_INVALID,jsonObject.get("errmsg").toString());
32         }
33         String jsapi_ticket = jsonObject.getString("ticket");
34 
35         String noncestr = WXPayUtil.generateNonceStr();
36         String timestamp = String.valueOf(System.currentTimeMillis()/1000);
37 
38         /** 拼装字符转 注意:对所有待签名参数按照字段名的 ASCII 码从小到大排序(字典序)后,
39          * 使用 URL 键值对的格式(即key1=value1&key2=value2…)拼接成字符串 string1。
40          * 这里需要注意的是所有参数名均为小写字符。**/
41         String str = "jsapi_ticket="+jsapi_ticket+
42                 "&noncestr="+noncestr+"&timestamp="+timestamp+"&url="+url;
43 
44         /** 对字符串进行 Sha1签名 **/
45         String s = sha1Hex(str);
46 
47         jsSdkDto.setAppId(appId);
48         jsSdkDto.setNonceStr(noncestr);
49         jsSdkDto.setTimeStamp(timestamp);
50         jsSdkDto.setSignature(s);
51         return jsSdkDto;
52     }
复制代码

 

posted @   低调的小白  阅读(707)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示