package com.agentdriving.driver.modular.system.util; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import org.apache.commons.codec.digest.DigestUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.HashMap; import java.util.Map; /** * 微信工具类 */ @Component public class WeChatUtil { @Value("${wx.appletsAppid}") private String wxAppletsAppid; @Value("${wx.appletsAppSecret}") private String wxAppletsAppSecret; @Autowired private RestTemplate restTemplate; /** * 小程序使用jscode获取openid * @param jscode * @return */ public Map code2Session(String jscode){ String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + wxAppletsAppid + "&secret=" + wxAppletsAppSecret + "&js_code=" + jscode + "&grant_type=authorization_code"; String forObject = restTemplate.getForObject(url, String.class); JSONObject jsonObject = JSON.parseObject(forObject); int errcode = jsonObject.getIntValue("errcode"); Map map = new HashMap<>(); if(errcode == 0){//成功 map.put("openid", jsonObject.getString("openid")); map.put("sessionKey", jsonObject.getString("session_key")); map.put("unionid", jsonObject.getString("unionid")); return map; } if(errcode == -1){//系统繁忙,此时请开发者稍候再试 map.put("msg", jsonObject.getString("errmsg")); return map; } if(errcode == 40029){//code 无效 map.put("msg", jsonObject.getString("errmsg")); return map; } if(errcode == 45011){//频率限制,每个用户每分钟100次 map.put("msg", jsonObject.getString("errmsg")); return map; } return null; } /** * 通过config接口注入权限验证配置(公众号) * 附录1-JS-SDK使用权限签名算法, * @return */ public Map getSignatureConfig(String url){ //获取token try { url = URLDecoder.decode(url, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } String ticket = getJSApiTicket(); String noncestr = UUIDUtil.getRandomCode(); Long timestamp = System.currentTimeMillis(); String content = "jsapi_ticket=" + ticket + "&noncestr=" + noncestr + "×tamp=" + timestamp + "&url=" + url; String signature = DigestUtils.sha1Hex(content); Map map=new HashMap<>(); map.put("appId", "wx0e72f86394831b34"); map.put("timestamp", timestamp); map.put("nonceStr", noncestr); map.put("signature", signature); return map; } /*** * 获取jsapiTicket(公众号) * 来源 www.vxzsk.com * @return */ public String getJSApiTicket(){ //获取token String acess_token= this.getAccessToken(); String urlStr = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + acess_token + "&type=jsapi"; String backData = restTemplate.getForObject(urlStr, String.class); System.out.println(backData); String ticket = JSONObject.parseObject(backData).getString("ticket"); return ticket; } /*** * 获取acess_token (公众号) * 来源www.vxzsk.com * @return */ public String getAccessToken(){ String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx0e72f86394831b34&secret=930f857abc74f7bb5cbd89e1544c5669"; String backData = restTemplate.getForObject(url, String.class); String accessToken = JSONObject.parseObject(backData).getString("access_token"); return accessToken; } }