mitao
2024-06-06 3d2b51ea4520533de5e78f88dddf5b5c7dce4247
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
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;
    }
 
}