微信JS接口config包装

一、介绍

调用微信JS接口的时候,需要给包装一个config,给js使用

开发的时候遇到了很多坑,在这里面记录一下

二、注意

如果使用领取微信卡券JS接口的时候,config中的签名方式不同

https://blog.csdn.net/cl11992/article/details/86574656

三、代码实例

WechatConfig.java

package com.panpass.common.tool;

public class WechatConfig {
	
	private String appId;
	private String timestamp;
	private String nonceStr;
	private String signature;
	private String url;

	public String getAppId() {
		return appId;
	}

	public void setAppId(String appId) {
		this.appId = appId;
	}

	public String getTimestamp() {
		return timestamp;
	}

	public void setTimestamp(String timestamp) {
		this.timestamp = timestamp;
	}

	public String getNonceStr() {
		return nonceStr;
	}

	public void setNonceStr(String nonceStr) {
		this.nonceStr = nonceStr;
	}

	public String getSignature() {
		return signature;
	}

	public void setSignature(String signature) {
		this.signature = signature;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}
	
}

CardSignature.java

下面所需要的类

JsApiTicketUtils:https://blog.csdn.net/cl11992/article/details/86300079

public class CardSignature {

	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;
	}

	/**
	 * 签名
	 * @param request
	 * @param cardId	卡券第三方id
	 * @param appid		appid
	 * @return
	 * @throws Exception
	 */
	public static WechatConfig getSignature(HttpServletRequest request,String appid) throws Exception {
		WechatConfig config = new WechatConfig();
		config.setNonceStr(UUID.randomUUID().toString().replaceAll("-", ""));
		// 时间戳
		config.setTimestamp(Long.toString(System.currentTimeMillis() / 1000));
		// 当前网页的URL,不包含#及其后面部分 主微信appid
		config.setAppId(appid);

		StringBuffer curUrl = request.getRequestURL();
		String params = request.getQueryString();
		if (!StringUtil.isBlank(params)) {
			curUrl = curUrl.append("?").append(params);
		}
		config.setUrl(curUrl.toString());

		//获取jsapi_ticket
		Map<String, String> jsApiTicketMap = JsApiTicketUtils.getJsApiTicket();
		String jsapiTicket = jsApiTicketMap.get("jsapi_ticket");
		
		// 对所有待签名参数按照字段名的ASCII
		// 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串
		// 所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义
		StringBuffer sBuffer = new StringBuffer("jsapi_ticket=").append(jsapiTicket);
		sBuffer.append("&noncestr=").append(config.getNonceStr());
		sBuffer.append("&timestamp=").append(config.getTimestamp());
		sBuffer.append("&url=").append(config.getUrl());

		MessageDigest crypt = MessageDigest.getInstance("SHA-1");
		crypt.reset();
		crypt.update(sBuffer.toString().getBytes("UTF-8"));
		
		config.setSignature(byteToHex(crypt.digest()));
		return config;
	}

}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值