Metrics
0
Watch 12 Star 34 Fork 11

synchronized / wx-signJavaApache-2.0

Sign up for free
Explore and code with more than 2 million developers,Free private repositories !:)
Sign up
Java微信公众号JS-SDK生成签名接口 spread retract

Clone or download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

wx-sign

项目介绍

 Java微信公众号JS-SDK生成签名接口,使用SpringBoot开发,支持跨域,支持独立部署,不需要数据库, 用IDEA导入项目后可以直接启动。

使用方法

第一步 在微信公众号“开发/基本配置”里面配置IP白名单;

  用浏览器访问https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=xxx&secret=xxx, 微信会提示出你电脑的ip,url里面的appidsecret换成你自己公众号的。

  或者直接访问http://www.ip138.com/即可获取到你电脑的外网ip。


第二步 前端页面里面调用接口获取签名

$.get('http://localhost:8083/api/getJSSDKSignature', {
    appId: appId,  // 公众号id
    secret: appSecret,  // 公众号密钥
    url: location.href  // 当前页面url
}, function (res) {
    if (200 == res.code) {
        wx.config({
            debug: true, // 开启调试模式
            appId: appId, // 公众号id
            timestamp: res.timestamp, // 生成签名的时间戳
            nonceStr: res.nonceStr, // 生成签名的随机串
            signature: res.signature,// 签名
            jsApiList: ['scanQRCode', 'getLocation', 'openLocation'] // 需要使用的JS接口列表
        });
    } else {
        alert(res.msg);
    }
});

wx.ready(function () {
    
});

wx.error(function (res) {
    alert(JSON.stringify(res));
});

源码解读:

@RequestMapping("/api")
@RestController
public class ApiController {

    // 获取微信JS-SDK签名
    @RequestMapping("/getJSSDKSignature")
    public JsonResult getJSSDKSignature(String appId, String secret, String url) {
        String tokenJson = HttpUtil.get("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + secret, null);
        String access_token = JSONUtil.getString(tokenJson, "access_token");  // access_token
        String ticketJson = HttpUtil.get("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + access_token + "&type=jsapi", null);
        String ticket = JSONUtil.getString(ticketJson, "ticket");  // ticket
        String noncestr = UUIDUtil.randomUUID8();  // 随机字符串
        long timestamp = new Date().getTime();  // 时间戳
        String str = "jsapi_ticket=" + ticket;
        str += "&noncestr=" + noncestr;
        str += "&timestamp=" + timestamp;
        str += "&url=" + url;
        String signature = DigestUtils.sha1Hex(str);
        return JsonResult.ok().put("timestamp", timestamp).put("nonceStr", noncestr).put("signature", signature);
    }
}

返回给前端的json示例:

{
  "code": 200,
  "msg": "操作成功",
  "timestamp": 1544753553997,
  "nonceStr": "SuM0XA6e",
  "signature": "5069314375e2d5cd1836bf8051ee6b825d53960c"
}

可以部署在自己服务器上面同时给多个项目使用。

推荐

EasyWeb管理系统模板 | 基于OAuth2.0的前后端分离开发平台


Comments ( 1 )

You need to Sign in for post a comment

Help Search

Gitee_you_jiang_zheng_wen Zheng_wen_close