import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSONObject;
import com.core.common.base.cache.RedisUtil;
import com.core.common.base.utils.HttpClientUtils;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Component
public class WxRestClient {
@Autowired
private RedisUtil redisUtil;
/**
* 获取accessToken
*
* @return
*/
public String getAccessToken() {
if (redisUtil.hasKey(WxConstant.ACCESS_TOKEN_KEY)) {
//System.out.println("redis->access_token:" + String.valueOf(redisUtil.get(WxConstant.ACCESS_TOKEN_KEY)));
return String.valueOf(redisUtil.get(WxConstant.ACCESS_TOKEN_KEY));
}
;
Map<String, Object> param = new HashMap<String, Object>();
param.put("grant_type", "client_credential");
param.put("appid", WxConstant.APPID);
param.put("secret", WxConstant.APPSECRET);
// 微信服务器进行验证
String result = HttpClientUtils.sendGetReq(WxConstant.TOKEN_URL, param);
log.info("微信小程序获取access_token" + result);
JSONObject tokenObj = JSONObject.parseObject(result);
if (tokenObj.containsKey("access_token")) {
redisUtil.set(WxConstant.ACCESS_TOKEN_KEY, tokenObj.getString("access_token"),
tokenObj.getLong("expires_in"));
//System.out.println("access_token:" + tokenObj.getString("access_token"));
return tokenObj.getString("access_token");
}
return null;
}
/**
* 获取ticket
*
* @param accessToken
* @return
*/
public String getTicket(String accessToken) {
if (redisUtil.hasKey(WxConstant.TICKET_KEY)) {
log.info("redis->ticket:" + String.valueOf(redisUtil.get(WxConstant.TICKET_KEY)));
//System.out.println();
return String.valueOf(redisUtil.get(WxConstant.TICKET_KEY));
}
;
Map<String, Object> param = new HashMap<String, Object>();
param.put("access_token", accessToken);
param.put("type", "jsapi");
String result = HttpClientUtils.sendGetReq(WxConstant.TICKET_URL, param);
JSONObject ticketObj = JSONObject.parseObject(result);
if (ticketObj.containsKey("ticket")) {
redisUtil.set(WxConstant.TICKET_KEY, ticketObj.getString("ticket"), ticketObj.getLong("expires_in"));
log.info("ticket:" + ticketObj.getString("ticket"));
//System.out.println("ticket:" + ticketObj.getString("ticket"));
return ticketObj.getString("ticket");
}
return null;
}
/**
* sha1加密
*
* @param decript
* @return
*/
public String sha1(String decript) {
if (StringUtils.isBlank(decript)) {
return null;
}
return DigestUtils.sha1Hex(decript);
}
/**
* 获取10位的时间戳
*
* @return
*/
public String timestamp() {
return String.format("%010d", System.currentTimeMillis() / 1000);
}
/**
* 获取一定长度的随机字符串
*
* @param len
* @return
*/
public String randomStr(int len) {
return RandomStringUtils.randomAlphanumeric(len);
}
/**
* 生成4位随机数字
*
* @return
*/
public String random4Num() {
return String.format("%04d", new Random().nextInt(9999));
}
public String getSignature(String ticket, String noncestr, String timestamp, String url) {
String str = "jsapi_ticket=" + ticket + "&noncestr=" + noncestr + "×tamp=" + timestamp + "&url=" + url;
//System.out.println(str);
return sha1(str);
}
}