获取小程序码,接口:getUnlimitedQRCode

### 1. 官网地址
获取不限制的小程序码 | 微信开放文档
### 2. Java 代码实现
        

@Autowired
RestTemplate restTemplate
    /**
     * 获取小程序码,接口:getUnlimitedQRCode - 测试
     * 1. 先获取token
     * 2. 获取图片   
     * @return
     */
    @GetMapping('/getUnlimitedQRCodeImageBase64')
    def getUnlimitedQRCodeImageBase64(@RequestParam @RequestBody Map<String, String> params) {
        String token = testService.getAccessTokenTest()
//        log.info("mini.token : " + token)
        String imageUrlBase64 = testService.getwxacodeunlimitMini(token)
        log.info("imageUrlBase64 : " + imageUrlBase64)
        return success(imageUrlBase64)
    }
/**
 * 测试获取小程序码 token
 */
String getAccessTokenTest() {
    // 拼接url发起请求到微信认证服务器获取token
    String tokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET"
            .replace("APPID", "your_id")
            .replace("APPSECRET", "your_scret");
    // 发送请求获取access_token
    Map<String, String> responseBody = restTemplate.exchange(tokenUrl, HttpMethod.GET, null, new ParameterizedTypeReference<Map<String, String>>() {}).getBody();
    if (responseBody == null || responseBody.get("errcode") != null) {
        // 获取失败
        System.out.println("getAccessToken失败:" + (responseBody == null ? "null" : responseBody.toString()));
        return null;
    }
    return responseBody.get("access_token");
}

 /**
     * 返回base64 图片
     * @return
     */
    String getwxacodeunlimitMini(String token) {
        // 获取小程序码
        String codeUrl = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN".replace("ACCESS_TOKEN", token)

        Map<String, Object> map = new HashMap<>();

        try {
            // 设置路径参数,类似 https://xxx.com?a=1&b=2,请求路径问号后面的参数,得用encodeURIComponent进行转码,前端用decodeURIComponent方法即可还原
//            map.put("scene1", URLEncoder.encode("a=1&b=2", "utf-8"));
            map.put("scene", "a=1&b=2");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        // 跳转路径
        map.put("page", "pages/index");
        // 是否强制验证路径是否存在
        map.put("check_path", false);
        // 当前环境:正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版。 默认下面这句代码是注释的,发布版本上生产环境时要注释这句代码
        if(Holder.prod()){
            map.put("env_version", "release"); //默认
        }else {
            map.put("env_version", "trial");
        }

        try {
            // 请求方法返回字节数组,转成base64格式返回前端
            String base64 = Base64.getEncoder().encodeToString(getWechatQrcodeByRestTemplate(codeUrl, map));
            return base64;
//            return getWechatQrcodeByRestTemplate(codeUrl , map)

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

    }
public byte[] getWechatQrcodeByRestTemplate(String url, Map<String, Object> body) {
    return restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>(body, null), byte[].class).getBody();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值