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+"×tamp="+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 }
hello world!!!