package com.sinata.rest.modular.member.controller;
|
|
import cn.hutool.core.codec.Base64Encoder;
|
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.json.JSONObject;
|
import com.sinata.rest.common.ApiUtils;
|
import com.sinata.rest.common.PayUtils;
|
import com.sinata.rest.modular.system.controller.AuthController;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParams;
|
import io.swagger.annotations.ApiOperation;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.http.HttpEntity;
|
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.MediaType;
|
import org.springframework.http.ResponseEntity;
|
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.client.RestTemplate;
|
|
import javax.annotation.Resource;
|
import java.util.HashMap;
|
import java.util.Map;
|
|
@Slf4j
|
@RestController
|
@RequestMapping("/wx")
|
@Api(tags = "微信api相关", description = "获取token、二维码、URL Link")
|
public class WxController extends AuthController {
|
|
@Resource
|
private RestTemplate restTemplate;
|
|
@GetMapping(value = "/getAccessToken")
|
@ApiOperation(value = "获取AccessToken", response = ApiUtils.class)
|
public String getAccessToken() {
|
String access_token = PayUtils.getAccessToken();
|
return access_token;
|
}
|
@GetMapping(value = "/createwxaqrcode")
|
@ApiOperation(value = "获取小程序二维码", response = ApiUtils.class)
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "path", value = "扫码进入的小程序页面路径,最大长度 128 字节,不能为空;对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 \"?foo=bar\",即可在 wx.getLaunchOptionsSync 接口中的 query 参数获取到 {foo:\"bar\"}。", dataType = "String", paramType = "query"),
|
@ApiImplicitParam(name = "width", value = "二维码的宽度,单位 px。最小 280px,最大 1280px;默认是430", dataType = "Integer", paramType = "query"),
|
})
|
public Object createwxaqrcode(String path, Integer width) {
|
String access_token = PayUtils.getAccessToken();
|
|
String url = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=" + access_token;
|
|
// 设置请求报头
|
HttpHeaders headers = new HttpHeaders();
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
// 创建请求主体
|
Map<String, Object> requestBody = new HashMap<>();
|
if (StrUtil.isNotBlank(path)) {
|
requestBody.put("path", path);
|
}
|
if (width != null) {
|
requestBody.put("width", width);
|
}
|
|
// 用请求体和头创建HttpEntity对象
|
HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, headers);
|
|
// 发送POST请求并获得响应
|
ResponseEntity<byte[]> responseEntity = restTemplate.postForEntity(
|
url,
|
requestEntity,
|
byte[].class
|
);
|
|
// 获取响应体
|
byte[] responseBody = responseEntity.getBody();
|
|
return Base64Encoder.encode(responseBody);
|
}
|
|
@GetMapping(value = "/generate_urllink")
|
@ApiOperation(value = "获取URL Link", response = ApiUtils.class)
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "path", value = "通过 URL Link 进入的小程序页面路径,必须是已经发布的小程序存在的页面。path 为空时会跳转小程序主页", dataType = "String", paramType = "query"),
|
@ApiImplicitParam(name = "query", value = "传递的参数,小程序端在APP.onLaunch直接获取参数", dataType = "String", paramType = "query"),
|
})
|
public Object generate_urllink(String path, String query) {
|
JSONObject responseBody = null;
|
try {
|
String access_token = PayUtils.getAccessToken();
|
|
String url = "https://api.weixin.qq.com/wxa/generate_urllink?access_token=" + access_token;
|
|
// 设置请求报头
|
HttpHeaders headers = new HttpHeaders();
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
// 创建请求主体
|
Map<String, Object> requestBody = new HashMap<>();
|
if (StrUtil.isNotBlank(path)) {
|
requestBody.put("path", path);
|
}
|
if (StrUtil.isNotBlank(query)) {
|
requestBody.put("query", query);
|
}
|
// 到期失效的 URL Link 失效类型,失效时间:0,失效间隔天数:1
|
requestBody.put("expire_type", 1);
|
// 到期失效的 URL Link 的失效间隔天数,最长间隔天数为30天. expire_type为 1 时必填
|
requestBody.put("expire_interval", 30);
|
|
// 用请求体和头创建HttpEntity对象
|
HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, headers);
|
|
// 发送POST请求并获得响应
|
ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity(
|
url,
|
requestEntity,
|
JSONObject.class
|
);
|
|
// 获取响应体
|
responseBody = responseEntity.getBody();
|
} catch (Exception e) {
|
log.error("generate_urllink异常",e);
|
}
|
|
// 打印响应体
|
System.out.println(responseBody);
|
log.info("响应体---->{}",responseBody);
|
|
return responseBody;
|
}
|
|
@GetMapping(value = "/generatescheme")
|
@ApiOperation(value = "获取URL Scheme", response = ApiUtils.class)
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "path", value = "已经发布的小程序存在的页面", dataType = "String", paramType = "query"),
|
@ApiImplicitParam(name = "query", value = "传递的参数,小程序端在APP.onLaunch直接获取参数", dataType = "String", paramType = "query"),
|
})
|
public Object generatescheme(String path, String query) {
|
String access_token = PayUtils.getAccessToken();
|
|
String url = "https://api.weixin.qq.com/wxa/generatescheme?access_token=" + access_token;
|
|
// 设置请求报头
|
HttpHeaders headers = new HttpHeaders();
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
// 创建请求主体
|
Map<String, Object> requestBody = new HashMap<>();
|
Map<String, String> jump_wxa = new HashMap();
|
if (StrUtil.isNotBlank(path)) {
|
jump_wxa.put("path", path);
|
}
|
if (StrUtil.isNotBlank(query)) {
|
jump_wxa.put("query", query);
|
}
|
requestBody.put("jump_wxa", jump_wxa);
|
|
// 到期失效的 URL Link 失效类型,失效时间:0,失效间隔天数:1
|
requestBody.put("expire_type", 1);
|
// 到期失效的 URL Link 的失效间隔天数,最长间隔天数为30天. expire_type为 1 时必填
|
requestBody.put("expire_interval", 30);
|
|
// 用请求体和头创建HttpEntity对象
|
HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, headers);
|
|
// 发送POST请求并获得响应
|
ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity(
|
url,
|
requestEntity,
|
JSONObject.class
|
);
|
|
// 获取响应体
|
JSONObject responseBody = responseEntity.getBody();
|
|
// 打印响应体
|
System.out.println(responseBody);
|
|
return responseBody;
|
}
|
|
}
|