package com.stylefeng.guns.modular.system.util;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.stylefeng.guns.core.util.ToolUtil;
|
import com.stylefeng.guns.modular.system.util.HttpClientUtil;
|
import com.stylefeng.guns.modular.system.util.RedisUtil;
|
import com.stylefeng.guns.modular.system.util.UUIDUtil;
|
import org.apache.commons.codec.digest.DigestUtils;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.http.*;
|
import org.springframework.stereotype.Component;
|
import org.springframework.web.client.RestTemplate;
|
|
import java.io.ByteArrayInputStream;
|
import java.io.InputStream;
|
import java.io.UnsupportedEncodingException;
|
import java.net.URLDecoder;
|
import java.util.HashMap;
|
import java.util.Map;
|
import java.util.Timer;
|
import java.util.TimerTask;
|
|
/**
|
* 微信工具类
|
*/
|
@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<String, String> 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<String, String> 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<String,Object> 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<String,Object> 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=wxc89ecab90d24edd8&secret=bca863174d22736a4a9758a67484947e";
|
String backData = restTemplate.getForObject(url, String.class);
|
String accessToken = JSONObject.parseObject(backData).getString("access_token");
|
return accessToken;
|
}
|
|
public String getUrlLink(String path, String query) throws Exception{
|
String wxAppletsAccessToken = getAccessToken();
|
String url = "https://api.weixin.qq.com/wxa/generate_urllink?access_token=" + wxAppletsAccessToken;
|
Map<String, Object> param = new HashMap<>();
|
param.put("expire_type", 1);
|
param.put("expire_interval", 1);
|
param.put("path", path);
|
param.put("query", query);
|
param.put("env_version", "release");
|
HttpHeaders httpHeaders = new HttpHeaders();
|
MediaType type=MediaType.parseMediaType("application/json;charset=UTF-8");
|
httpHeaders.setContentType(type);
|
HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(param, httpHeaders);
|
ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
|
String body1 = exchange.getBody();
|
return body1;
|
}
|
|
}
|