微信开发文档 : 目录 | 微信开放文档
package mtc.utils.wechatUtils;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import mtc.configuration.wxpayConfig.WxpayStaticParameter;
import mtc.utils.redisUtils.RedisUtils;
import mtc.utils.wxpayUtils.HttpUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Formatter;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@Component
public class GetJsapiTicket {
@Autowired
private RedisUtils redisUtils;
/**
* 获取微信小程序Jsapi_ticket
* @return
*/
public String getJsapiTicket(){
String jsapiTicket = null ;
if (redisUtils.get("wechat:jsapiTicket") != null){
return (String) redisUtils.get("wechat:jsapiTicket");
}
String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi";
url = url.replace("ACCESS_TOKEN", GetAccessToken.getAppletAccessToken());
JsonNode jsonNode = HttpUtils.doGet(url);
Map map = new ObjectMapper().convertValue(jsonNode, Map.class);
if ("ok".equals(map.get("errmsg")) || (Integer) map.get("errcode") == 0){
jsapiTicket = (String) map.get("ticket");
//存到redis,时间7200s
redisUtils.set("wechat:jsapiTicket",jsapiTicket,7200L);
}
return jsapiTicket;
}
/**
* 签名封装参数返回
* @param url
* @return
*/
public Map<String,Object> jsJdkSignature(String url){
System.out.println("--------------------"+url);
Map returnMap = new HashMap();
long timestamp = System.currentTimeMillis() / 1000; //时间戳
String nonceStr = getNonceStr(); //随机字符串
String jsapiTicket = getJsapiTicket();
//签名
String string1 = "jsapi_ticket=" + jsapiTicket +
"&noncestr=" + nonceStr +
"×tamp=" + timestamp +
"&url=" + url;
try {
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(string1.getBytes("UTF-8"));
string1 = byteToHex(crypt.digest());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//封装返回值
returnMap.put("appId", WxpayStaticParameter.appId);
returnMap.put("timestamp",timestamp);
returnMap.put("nonceStr",nonceStr);
returnMap.put("signature", string1);
return returnMap;
}
private static String byteToHex(final byte[] hash) {
Formatter formatter = new Formatter();
for (byte b : hash)
{
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
}
/**
* 生成随机数
* @return
*/
public static String getNonceStr(){
return UUID.randomUUID().toString()
.replaceAll("-", "")
.substring(0, 16);
}
}
小程序获取accessToken
/**
* 获取小程序accessToken
* @return
*/
public static String getAppletAccessToken(){
String requestUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
String appid = WxpayStaticParameter.appId;//第三方用户唯一凭证
String secret = WxpayStaticParameter.appSecret;// 第三方用户唯一凭证密钥,即appsecret
requestUrl = requestUrl.replace("APPID", appid);
requestUrl = requestUrl.replace("APPSECRET", secret);
JsonNode jsonNode = HttpUtils.doGet(requestUrl);
Map map = new ObjectMapper().convertValue(jsonNode, Map.class);
String accessToken = (String)map.get("access_token");
return accessToken;
}