package com.stylefeng.guns.modular.system.util;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.stylefeng.guns.core.util.ToolUtil;
|
import com.stylefeng.guns.modular.api.UserInfoController;
|
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.apache.http.entity.ContentType;
|
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.mock.web.MockMultipartFile;
|
import org.springframework.stereotype.Component;
|
import org.springframework.web.client.RestTemplate;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import java.io.ByteArrayInputStream;
|
import java.io.IOException;
|
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=wxe91f1af7638aa5dd&secret=a787e1a462715604e0c9528b6d8960d1";
|
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", "trial");
|
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;
|
}
|
|
public String getPhone(String code) throws Exception{
|
String wxAppletsAccessToken = getAccessToken();
|
String url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + wxAppletsAccessToken;
|
Map<String, Object> param = new HashMap<>();
|
param.put("code",code);
|
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();
|
// String body1 ="{\"errcode\":0,\"errmsg\":\"ok\",\"phone_info\":{\"phoneNumber\":\"15708179461\",\"purePhoneNumber\":\"15708179461\",\"countryCode\":\"86\",\"watermark\":{\"timestamp\":1720420413,\"appid\":\"wxc89ecab90d24edd8\"}}}";
|
|
JSONObject jsonObject = JSON.parseObject(body1);
|
// 从JSON对象中获取phone_info子对象
|
JSONObject phoneInfo = jsonObject.getJSONObject("phone_info");
|
// 从phone_info中获取phoneNumber
|
String phoneNumber = phoneInfo.getString("phoneNumber");
|
System.out.println("Phone Number: " + phoneNumber);
|
|
|
return phoneNumber;
|
}
|
|
|
@Autowired
|
private UserInfoController userInfoController;
|
public String rid(String path, String query) throws Exception{
|
// 获取access_token
|
String accessToken = getAccessToken();
|
// 替换CREATE_CODE_URL
|
String url = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token="+accessToken;
|
// 发送请求
|
String stringApiResult = null;
|
try {
|
HashMap<String, String> map = new HashMap<>();
|
map.put("path", path+"?driverId=979");
|
HttpHeaders headers = new HttpHeaders();
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
HttpEntity requestEntity = new HttpEntity(map, headers);
|
ResponseEntity<byte[]> rep = restTemplate.exchange(url, HttpMethod.POST, requestEntity, byte[].class);
|
byte[] bytes = rep.getBody();
|
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
|
MultipartFile file = new MockMultipartFile(ContentType.APPLICATION_OCTET_STREAM.toString(), byteArrayInputStream);
|
ResultUtil resultUtil = userInfoController.uploadImg(file, null, null);
|
StringBuilder sb = new StringBuilder(stringApiResult);
|
stringApiResult = sb.toString();
|
} catch (Exception e) {
|
}
|
return stringApiResult;
|
}
|
|
}
|