微信开发之JSSDK权限配置,服务器端获取签名等参数(java实现)

1.参考微信开发文档

https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html

  • 步骤一:绑定域名

先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。

备注:登录后可在“开发者中心”查看对应的接口权限。

  • 步骤二:引入JS文件

在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.4.0.js

如需进一步提升服务稳定性,当上述资源不可访问时,可改访问:http://res2.wx.qq.com/open/js/jweixin-1.4.0.js
(支持https)。

备注:支持使用 AMD/CMD 标准模块加载方法加载

  • 步骤三:通过config接口注入权限验证配置

所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web
app可在每次url变化时进行调用,目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web
app的页面会导致签名失败,此问题会在Android6.2中修复)。

wx.config({
	debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
	appId: '', // 必填,公众号的唯一标识
	timestamp: , // 必填,生成签名的时间戳
	nonceStr: '', // 必填,生成签名的随机串
	signature: '',// 必填,签名
	jsApiList: [] // 必填,需要使用的JS接口列表
});

2.服务端获取参数返回前台(java)

  • 直接上代码
/**
     * 获取jssdk签名
     * @param request
     * @return
     */
    @GetMapping(value = "/signature",produces = "text/html;charset=utf-8")
    public String getSignature(String url, HttpServletRequest request){
        Map result = null;
        try {
            String wyJsapi_ticket = WeixinSign.getWyJsapi_ticket();
            result = WeixinSign.sign(wyJsapi_ticket, url);

        } catch (Exception e) {
            e.printStackTrace();

        }
        return resultSuccess(result);
    }
  • WeixinSign工具类
public class WeixinSign {

	/**
	 * 小程序
	 */
	private static String appid = "wxc6bdd32a08c3701d";
	private static String secret = "6cfcf88b1f9b5c48909b7d8264d08394";

	/**
	 * 网页
	 */
	public static String wy_appid = "wxdee18320bb16f695";
	public static String wy_secret = "85a6c0d7fdb86f59c386dc99b8a5f3ec";
	protected static int secCount=0;
//	private static String access_token = "";

//	public static void main(String[] args) {
//		String jsapi_ticket = getJsapi_ticket();
//
//		// 注意 URL 一定要动态获取,不能 hardcode
//		String url = "http://i.91sjyx.com/pc";
//		Map ret = sign(jsapi_ticket, url);
//		for (Map.Entry entry : ret.entrySet()) {
//			System.out.println(entry.getKey() + ", " + entry.getValue());
//		}
//	};

	public static Map sign(String jsapi_ticket, String url) {
		Map ret = new HashMap();
		String nonce_str = create_nonce_str();
		String timestamp = create_timestamp();
		String string1;
		String signature = "";

		// 注意这里参数名必须全部小写,且必须有序
		string1 = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonce_str + "×tamp=" + timestamp + "&url=" + url;
		System.out.println(string1);

		try {
			MessageDigest crypt = MessageDigest.getInstance("SHA-1");
			crypt.reset();
			crypt.update(string1.getBytes("UTF-8"));
			signature = byteToHex(crypt.digest());
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}

		ret.put("url", url);
		ret.put("jsapi_ticket", jsapi_ticket);
		ret.put("nonceStr", nonce_str);
		ret.put("timestamp", timestamp);
		ret.put("signature", signature);
		ret.put("appid",wy_appid);

		return ret;
	}

	private static String byteToHex(final byte[] hash) {
		Formatter formatter = new Formatter();
		for (byte b : hash) {
			formatter.format("%02x", b);
		}
		String result = formatter.toString();
		formatter.close();
		return result;
	}

	public static String getJsapi_ticket() {
		String requestUrl = "https://api.weixin.qq.com/cgi-bin/token?";
		String params = "grant_type=client_credential&appid=" + appid + "&secret=" + secret + "";
		String result = HttpRequestUtil.httpGet(requestUrl + params);
		String access_token = JSONObject.parseObject(result).getString("access_token");
		requestUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?";
		params = "access_token=" + access_token + "&type=jsapi";
		result = HttpRequestUtil.httpGet(requestUrl + params);
		String jsapi_ticket = JSONObject.parseObject(result).getString("ticket");
		return jsapi_ticket;
	}
}

你可能感兴趣的:(微信网页开发)