|
@@ -0,0 +1,96 @@
|
|
|
+package com.ym.mec.student.controller;
|
|
|
+
|
|
|
+import io.swagger.annotations.Api;
|
|
|
+import io.swagger.annotations.ApiOperation;
|
|
|
+
|
|
|
+import java.io.IOException;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.SortedMap;
|
|
|
+import java.util.TreeMap;
|
|
|
+import java.util.UUID;
|
|
|
+
|
|
|
+import org.apache.commons.codec.digest.DigestUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.web.bind.annotation.GetMapping;
|
|
|
+import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
+import org.springframework.web.bind.annotation.RestController;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONPath;
|
|
|
+import com.ym.mec.common.controller.BaseController;
|
|
|
+import com.ym.mec.common.redis.service.RedisCache;
|
|
|
+import com.ym.mec.util.http.HttpUtil;
|
|
|
+import com.ym.mec.util.string.ValueUtil;
|
|
|
+
|
|
|
+@RequestMapping("wechat")
|
|
|
+@Api(tags = "微信")
|
|
|
+@RestController
|
|
|
+public class WechatController extends BaseController {
|
|
|
+
|
|
|
+ private String appId = "wx80f175c0eb6836e9";
|
|
|
+
|
|
|
+ private String secret = "a9d779747dba9f4e82f19882debe3e93";
|
|
|
+
|
|
|
+ private final static String WX_ACCESS_TOKEN = "WX_ACCESS_TOKEN";
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RedisCache<String, Object> redisCache;
|
|
|
+
|
|
|
+ @ApiOperation("获取签名")
|
|
|
+ @GetMapping(value = "/getSignature")
|
|
|
+ public Object getSignature(String url) throws Exception {
|
|
|
+
|
|
|
+ String accessToken = getAccessToken(appId, secret);
|
|
|
+
|
|
|
+ String ticket = getTicket(accessToken);
|
|
|
+
|
|
|
+ String noncestr = UUID.randomUUID().toString();
|
|
|
+ String timestamp = System.currentTimeMillis() + "";
|
|
|
+
|
|
|
+ SortedMap<String, Object> parameterMap = new TreeMap<String, Object>();
|
|
|
+ parameterMap.put("noncestr", noncestr);
|
|
|
+ parameterMap.put("jsapi_ticket", ticket);
|
|
|
+ parameterMap.put("timestamp", timestamp);
|
|
|
+ parameterMap.put("url", url);
|
|
|
+
|
|
|
+ String str = ValueUtil.joinKeyValue(parameterMap, "", "", "&", false, "");
|
|
|
+
|
|
|
+ String signature = DigestUtils.sha1Hex(str);
|
|
|
+
|
|
|
+ Map<String, Object> result = new HashMap<String, Object>();
|
|
|
+ result.put("appId", appId);
|
|
|
+ result.put("timestamp", timestamp);
|
|
|
+ result.put("nonceStr", noncestr);
|
|
|
+ result.put("signature", signature);
|
|
|
+
|
|
|
+ return succeed(result);
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getAccessToken(String appid, String secret) throws IOException {
|
|
|
+
|
|
|
+ if(redisCache.exists(WX_ACCESS_TOKEN)){
|
|
|
+ return redisCache.get(WX_ACCESS_TOKEN).toString();
|
|
|
+ }
|
|
|
+ Map<String, Object> parameterMap = new HashMap<String, Object>();
|
|
|
+ parameterMap.put("grant_type", "client_credential");
|
|
|
+ parameterMap.put("appid", appid);
|
|
|
+ parameterMap.put("secret", secret);
|
|
|
+
|
|
|
+ String result = HttpUtil.get("https://api.weixin.qq.com/cgi-bin/token", parameterMap);
|
|
|
+ String accessToken = (String) JSONPath.extract(result, "$.access_token");
|
|
|
+
|
|
|
+ redisCache.put(WX_ACCESS_TOKEN, accessToken, 7100);
|
|
|
+
|
|
|
+ return accessToken;
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getTicket(String accessToken) throws IOException {
|
|
|
+ Map<String, Object> parameterMap = new HashMap<String, Object>();
|
|
|
+ parameterMap.put("access_token", accessToken);
|
|
|
+ parameterMap.put("type", "jsapi");
|
|
|
+ String result = HttpUtil.get("https://api.weixin.qq.com/cgi-bin/ticket/getticket", parameterMap);
|
|
|
+
|
|
|
+ return (String) JSONPath.extract(result, "$.ticket");
|
|
|
+ }
|
|
|
+
|
|
|
+}
|