java微信公众号sdk签名,JAVA Spring-boot 微信JS-SDK获取签名

public class WechatUtils {

@Value("${wechat.appId:}")

private String appId;

@Value("${wechat.secret:}")

private String secret;

@Autowired

private HttpCommonClientComponent client;

@Autowired

private IRedisService redisService;

/***

*

* 获取签名

* @param url

* @return

*/

public Map getWechatConfig(String url) {

Long timestamp = System.currentTimeMillis();

String nonceStr = getNonceString(32);

String ticket = getJsapiTicket();

String signature = DigestUtils.sha1Hex("jsapi_ticket=" + ticket + "&noncestr=" + nonceStr + "×tamp=" + timestamp + "&url=" + url);

Map mp = new HashMap<>();

mp.put("appId", appId);

mp.put("timestamp", timestamp);

mp.put("nonceStr", nonceStr);

mp.put("signature", signature);

return mp;

}

private String getNonceString(Integer length) {

String str = "zxcvbnmlkjhgfdsaqwertyuiopQWERTYUIOPASDFGHJKLZXCVBNM1234567890";

Random random = new Random();

StringBuilder sb = new StringBuilder();

for (int i = 0; i < length; i++) {

sb.append(str.charAt(random.nextInt(str.length())));

}

return sb.toString();

}

private String getJsapiTicket() {

Object ticket = redisService.get(WechatConstant.BULL_WECHAT_SHARE_TICKET);

if (!StringUtils.isEmpty(ticket)) {

return ticket.toString();

}

String token = getAccessToken(true);

String url = String.format(WechatConstant.JSAPI_TICKET_URL, token);

String response = client.doHttpGetRequest(url, null);

JSONObject result = JSONObject.parseObject(response);

// 如果因为token的原因失败了 再尝试一次

if (!StringUtils.isEmpty(result.get("errcode")) && "40001".equals(result.get("errcode").toString())) {

token = getAccessToken(false);

url = String.format(WechatConstant.JSAPI_TICKET_URL, token);

response = client.doHttpGetRequest(url, null);

result = JSONObject.parseObject(response);

}

if (!StringUtils.isEmpty(result.get("ticket")) && !StringUtils.isEmpty(result.get("expires_in"))) {

String value = result.get("ticket").toString();

long expiresIn = Long.parseLong(result.get("expires_in").toString());

redisService.set(WechatConstant.BULL_WECHAT_SHARE_TICKET, value, expiresIn);

return value;

}

return null;

}

/**

* 获取access_token

* @return

*/

private String getAccessToken(Boolean getFromCache) {

if (getFromCache) {

Object token = redisService.get(WechatConstant.BULL_WECHAT_SHARE_TOKEN);

if (!StringUtils.isEmpty(token)) {

return token.toString();

}

}

String url = WechatConstant.ACCESS_TOKEN_URL + "&appid=" + appId + "&secret=" + secret;

String response = client.doHttpGetRequest(url, null);

Map errorMap = JSONObject.parseObject(response, Map.class);

if (errorMap.containsKey("errcode")) {

log.info("{} 获取失败,appId:{}, secret: {}, error : {}", WechatConstant.ACCESS_TOKEN_URL, appId, secret, response);

}

JSONObject result = JSONObject.parseObject(response);

if (!StringUtils.isEmpty(result.get("access_token")) && !StringUtils.isEmpty(result.get("expires_in"))) {

String value = result.get("access_token").toString();

long expiresIn = Long.parseLong(result.get("expires_in").toString());

redisService.set(WechatConstant.BULL_WECHAT_SHARE_TOKEN, value, expiresIn);

return value;

}

return null;

}

}

本站文章除注明转载/出处外,皆为作者原创,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值