微信开发之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<String,String> 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 = "wx-appId";
	private static String secret = "wx-secret";

	/**
	 * 网页
	 */
	public static String wy_appid = "wx-wy-appId";
	public static String wy_secret = "wx-wy-secret";
	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<String, String> ret = sign(jsapi_ticket, url);
//		for (Map.Entry entry : ret.entrySet()) {
//			System.out.println(entry.getKey() + ", " + entry.getValue());
//		}
//	};

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

		// 注意这里参数名必须全部小写,且必须有序
		string1 = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonce_str + "&timestamp=" + 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;
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

07feng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值