获取微信永久二维码

该代码段展示了如何从后端获取微信的access_token和ticket。首先通过构造URL并发送GET请求获取access_token,然后检查ticket请求是否因access_token问题失败,如果失败则重新获取access_token并重试。由于前端请求遇到跨域问题,选择在后端实现这一逻辑。
摘要由CSDN通过智能技术生成

1.获取access_token(偷懒没有转实体类,直接string截取的,感谢微信这个接口很规范)

public String getToken(String url, String appId, String appSecret){
        // 获取token
        String getTokenUrl = url+ "&appid=" + appId + "&secret=" + appSecret;
        LOGGER.debug("wx get access token is [{}]", getTokenUrl);
        RequestDTO requestDTO = new RequestDTO(getTokenUrl);
        ResponseDTO responseDTO = HttpClientUtils.get(requestDTO);
        LOGGER.debug("wx get access token data is [{}]", responseDTO.getContent());
        int end = responseDTO.getContent().lastIndexOf(",")-1;
        int start = responseDTO.getContent().indexOf(":") + 2;
        String token = responseDTO.getContent().substring(start, end);
        ACCESS_TOKEN = token;
        return token;
    }

2.请求获取ticket

public String getWxTicket(Integer projectId, Integer type, String url, String accessToken, String tokenUrl,
                              String appId, String appSecret) {
        // 获取ticket
        if (accessToken.contains("\"")) {
            accessToken = "";
        }
        String ticketURL= url + accessToken;
        LOGGER.debug("wx get ticket token is [{}]", ticketURL);
        RequestDTO requestDTO = new RequestDTO(ticketURL);
        requestDTO.setContent("{\n" +
                "    \"action_name\": \"QR_LIMIT_STR_SCENE\",\n" +
                "    \"action_info\": {\n" +
                "        \"scene\": {\n" +
                "            \"scene_str\": 自定义的内容" +
                "        }\n" +
                "    }\n" +
                "}");
        ResponseDTO responseDTO = HttpClientUtils.post(requestDTO);
        LOGGER.debug("wx get ticket data is [{}]", responseDTO.getContent());
        if (responseDTO.getContent().contains("access_token")) {    // token 有问题,重新请求
            String token = this.getToken(tokenUrl, appId, appSecret);
            ticketURL = url + token;
            requestDTO = new RequestDTO(ticketURL);
            requestDTO.setContent("{\n" +
                    "    \"action_name\": \"QR_LIMIT_STR_SCENE\",\n" +
                    "    \"action_info\": {\n" +
                    "        \"scene\": {\n" +
                    "            \"scene_str\": 自定义内容" +
                    "        }\n" +
                    "    }\n" +
                    "}");
            responseDTO = HttpClientUtils.post(requestDTO);
        } else {
            ACCESS_TOKEN = accessToken;
        }
        int start = responseDTO.getContent().lastIndexOf("url") + 6;
        int end = responseDTO.getContent().lastIndexOf("\"");
        String res = responseDTO.getContent().substring(start, end) + "," + ACCESS_TOKEN;
        return res;
    }

ps:本来想用前端请求,因为感觉前端更方便简单,但是尝试过程中,微信一直返回跨域拦截问题,说因为我的请求从某个域名发出,所以被微信拦截了,该问题未能找到比较好的解决办法,所以选择了从后端发起请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值