IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> java调用微信接口getwxacodeunlimit生成小程序指定的访问页面 -> 正文阅读

[移动开发]java调用微信接口getwxacodeunlimit生成小程序指定的访问页面

1,首先,必须根据小程序的appid和appSecret获取到accessToken
2,然后再根据accessToken去获取指定页面的小程序二维码

	/** 
     * 1,第一步 获取 accessToken
     * 2,**appId,和appSecret是小程序的**,不是公众号的,注意
     * @return
     */
    public String getAccessToken(){
        String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appId+"&secret="+appSecret;
        JSONObject jsonObject = restTemplate.getForObject(url, JSONObject.class);
        String accessToken = "";
        if (String.valueOf(jsonObject.get("expires_in")).equals("7200")){
            accessToken = String.valueOf(jsonObject.get("access_token"));
            redisService.set(RedisConstants.WX_ACCESS_TOKEN, accessToken, 7200);
        }
        return accessToken;
    }
/**
     * 2,第一步 根据token获取二维码
     * @param accessToken
     * @return
     */
    public String getActivityQrCodeByAccessToken(String accessToken, LyCreateActivityQrCodeDto lyCreateActivityQrCodeDto) throws Exception {
        /********* 封装请求参数 **********/
        Map<String, Object> paraMap = new HashMap<>();
        //二维码携带参数 不超过32位 参数类型必须是字符串
        paraMap.put("scene", lyCreateActivityQrCodeDto.getScene());
        //二维码跳转页面
        paraMap.put("page", lyCreateActivityQrCodeDto.getPage());
        //二维码的宽度
        paraMap.put("width", 450);
        //自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调
        paraMap.put("auto_color", false);
        //是否需要透明底色, is_hyaline 为true时,生成透明底色的小程序码
        paraMap.put("is_hyaline", false);
        //要打开的小程序版本。正式版为 "release",体验版为 "trial",开发版为 "develop"
        paraMap.put("env_version", "trial");
        //检查page 是否存在,为 true 时 page 必须是已经发布的小程序存在的页面(否则报错);为 false 时允许小程序未发布或者 page 不存在, 但page 有数量上限(60000个)请勿滥用
        paraMap.put("check_path", false);

        /********* 执行post请求微信 获取二维码数据流 **********/
        byte[] result = WxUtil.getQrCodeByParam("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken, paraMap);
        // 将获取的二维码流,存入oss,这步看具体情况,我这里是将返回的流存入了oss,然后获取的是oss给的图片地址,也可以直接返回这个base64位的字节数组,img标签展示的时候,需要加上base64处理,一样可以显示处理二维码
        return QrCodeUtils.getQrCodeUrlByByteStream(result);
    }
package com.sport.sportadminserver.common.utils;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
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.conn.ConnectTimeoutException;
import org.apache.http.conn.ConnectionPoolTimeoutException;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import java.net.SocketTimeoutException;
import java.util.Map;

/**
 * @Description: 访问外部接口工具类
 * @Author: zdj
 * @Date: 2021/12/08
 * @version: 1.0.0
 */
public class WxUtil {
    
    /**
     * 一物一码
     * 获取小程序二维码数据流
     * @param url 请求路径
     * @param paraMap 其他参数
     * @return
     */
    public static byte[] getQrCodeByParam(String url, Map<String, Object> paraMap) {
        byte[] result = null;
        HttpPost httpPost = new HttpPost(url);
        httpPost.addHeader("Content-Type", "application/json");
        try {
            // 设置请求的参数
            JSONObject postData = new JSONObject();
            for (Map.Entry<String, Object> entry : paraMap.entrySet()) {
                postData.put(entry.getKey(), entry.getValue());
            }
            httpPost.setEntity(new StringEntity(postData.toString(), "UTF-8"));
            HttpClient httpClient = HttpClientBuilder.create().build();
            HttpResponse response = httpClient.execute(httpPost);
            HttpEntity entity = response.getEntity();
            result = EntityUtils.toByteArray(entity);
        } catch (ConnectionPoolTimeoutException e) {
            e.printStackTrace();
        } catch (ConnectTimeoutException e) {
            e.printStackTrace();
        } catch (SocketTimeoutException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            httpPost.releaseConnection();
        }
        return result;
    }
}

结果
在这里插入图片描述

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-10 11:10:25  更:2021-12-10 11:12:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:57:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码