zoukankan      html  css  js  c++  java
  • 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     }
  • 相关阅读:
    培训第一天
    jQuery日期时间控件
    java.lang.ExceptionInInitializerError
    j2ee 获取上下文环境
    BeanUtil.ConversionException
    Python3.x和Python2.x的区别
    Apache开启伪静态
    总结
    常用的视频网站
    lua语言萌新之路
  • 原文地址:https://www.cnblogs.com/wang-yaz/p/8926167.html
Copyright © 2011-2022 走看看