|
@@ -0,0 +1,104 @@
|
|
|
+package com.ruoyi.web.controller.wechat;
|
|
|
+
|
|
|
+import cn.hutool.http.HttpUtil;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.ruoyi.common.core.redis.RedisCache;
|
|
|
+import com.ruoyi.common.utils.StringUtils;
|
|
|
+import com.ruoyi.market.domain.MarketDrawActivity;
|
|
|
+import com.ruoyi.market.domain.MarketDrawTemplate;
|
|
|
+import com.ruoyi.market.domain.vo.WechatVo;
|
|
|
+import com.ruoyi.market.service.MarketDrawActivityService;
|
|
|
+import com.ruoyi.market.service.MarketDrawTemplateService;
|
|
|
+import io.swagger.annotations.Api;
|
|
|
+import io.swagger.annotations.ApiOperation;
|
|
|
+import org.apache.http.HttpEntity;
|
|
|
+import org.apache.http.HttpResponse;
|
|
|
+import org.apache.http.client.HttpClient;
|
|
|
+import org.apache.http.client.methods.HttpPost;
|
|
|
+import org.apache.http.entity.StringEntity;
|
|
|
+import org.apache.http.impl.client.HttpClients;
|
|
|
+import org.apache.http.util.EntityUtils;
|
|
|
+import org.apache.ibatis.annotations.Param;
|
|
|
+import org.springframework.web.bind.annotation.PostMapping;
|
|
|
+import org.springframework.web.bind.annotation.RequestBody;
|
|
|
+import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
+import org.springframework.web.bind.annotation.RestController;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.util.Base64;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
+
|
|
|
+@Api(tags = "微信管理")
|
|
|
+@RestController
|
|
|
+@RequestMapping("/wechat")
|
|
|
+public class WechatController {
|
|
|
+ @Resource
|
|
|
+ private RedisCache redisCache;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private MarketDrawActivityService marketDrawActivityService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private MarketDrawTemplateService marketDrawTemplateService;
|
|
|
+
|
|
|
+ private static final String WECHAT_ACCESS_TOKEN_KEY = "access_token";
|
|
|
+
|
|
|
+ public String fetchAccessToken() {
|
|
|
+ String appId = "wxc649c8ca8e3f4e95";
|
|
|
+ String appSecret = "9b7929786aef456716b1a32142cf34bd";
|
|
|
+ String accessTokenUrl = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", appId, appSecret);
|
|
|
+ String response = HttpUtil.get(accessTokenUrl);
|
|
|
+ JSONObject jsonObject = JSON.parseObject(response);
|
|
|
+ return jsonObject.getString("access_token");
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public String getAccessToken() {
|
|
|
+ String accessToken = redisCache.getCacheObject(WECHAT_ACCESS_TOKEN_KEY);
|
|
|
+
|
|
|
+ if (StringUtils.isEmpty(accessToken)) {
|
|
|
+ accessToken = fetchAccessToken();
|
|
|
+ // access_token 有效期为 7200 秒
|
|
|
+ redisCache.setCacheObject(WECHAT_ACCESS_TOKEN_KEY, accessToken, 7000, TimeUnit.SECONDS);
|
|
|
+ }
|
|
|
+ return accessToken;
|
|
|
+ }
|
|
|
+
|
|
|
+ @PostMapping("/getQrCode")
|
|
|
+ @ApiOperation("获取小程序码")
|
|
|
+ public String getQrCode(@RequestBody WechatVo wechatVo) {
|
|
|
+ String url = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=" + getAccessToken();
|
|
|
+
|
|
|
+ HttpClient httpClient = HttpClients.createDefault();
|
|
|
+ HttpPost httpPost = new HttpPost(url);
|
|
|
+
|
|
|
+ // 构建请求参数,这里示意为一个 JSON 格式的请求体
|
|
|
+ JSONObject params = new JSONObject();
|
|
|
+ String sceneValue = wechatVo.getUserId() +' '+ wechatVo.getActivityId();
|
|
|
+ MarketDrawActivity activity = marketDrawActivityService.getById(wechatVo.getActivityId());
|
|
|
+ MarketDrawTemplate template = marketDrawTemplateService.getById(activity.getTemplateId());
|
|
|
+ params.put("path", template.getTemplateAppletPage() + "?userId=" + wechatVo.getUserId() + "&activityId=" + wechatVo.getActivityId()); // 路径
|
|
|
+ try {
|
|
|
+ StringEntity entity = new StringEntity(params.toJSONString(), "UTF-8");
|
|
|
+ httpPost.setEntity(entity);
|
|
|
+ httpPost.setHeader("Content-Type", "application/json");
|
|
|
+
|
|
|
+ HttpResponse response = httpClient.execute(httpPost);
|
|
|
+ HttpEntity responseEntity = response.getEntity();
|
|
|
+
|
|
|
+ if (responseEntity != null) {
|
|
|
+ byte[] bytes = EntityUtils.toByteArray(responseEntity);
|
|
|
+ // 返回 Base64 编码的字符串
|
|
|
+ return Base64.getEncoder().encodeToString(bytes);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ // 处理异常情况
|
|
|
+ return "Failed: " + e.getMessage();
|
|
|
+ }
|
|
|
+
|
|
|
+ return "Failed: Unknown error";
|
|
|
+ }
|
|
|
+
|
|
|
+}
|