首页 > 编程语言 >Java生成微信小程序码

Java生成微信小程序码

时间:2023-05-11 14:56:20浏览次数:50  
标签:return String 微信 token 生成 Java params new import

官网文档地址:获取小程序码

package test;

import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

import java.io.*;
import java.net.URLEncoder;
import java.util.*;
import java.util.stream.Collectors;

/**
 * @description:
 * @author: Mr.Fang
 * @create: 2023-04-03 17:06
 **/

public class WxUtils {

    /**
     * description: 获取token,返回结果为 JSON 自行转 map
     * create by: Mr.Fang
     *
     * @return: java.lang.String
     * @date: 2023/4/3 17:46
     */
    public String getToken() throws IOException {
        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        Map<String, Object> params = new HashMap<>();
        params.put("appid", "appid");
        params.put("secret", "secret");
        params.put("grant_type", "client_credential");

        String url = handleParams("https://api.weixin.qq.com/cgi-bin/token", params);
        HttpGet httpGet = new HttpGet(url);

        CloseableHttpResponse response = httpClient.execute(httpGet);
        HttpEntity entity = response.getEntity(); // 响应结果

        return EntityUtils.toString(entity, CharSetType.UTF8.getType());
    }

    /**
     * description: 对象转 字符串
     * create by: Mr.Fang
     *
     * @param obj
     * @return: java.lang.String
     * @date: 2023/4/3 17:45
     */
    public String objToStr(Object obj) {
        ObjectMapper objectMapper = new ObjectMapper();
        if (Objects.nonNull(obj)) {
            try {
                return objectMapper.writeValueAsString(obj);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    /**
     * description:  字符串 转 对象转
     * create by: Mr.Fang
     *
     * @param jsonStr
     * @param objClass
     * @return: java.lang.String
     * @date: 2023/4/3 17:45
     */
    public <T> T strToObj(String jsonStr, Class<T> objClass) {
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            T t = objectMapper.readValue(jsonStr, objClass);
            return t;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    
    /**
     * description: 生成小程序码
     * create by: Mr.Fang
     *
     * @param scene 携带参数
     * @param page  页面路径
     * @param token token
     * @param path  保存路径
     * @return: java.lang.String
     * @date: 2023/5/11 14:22
     */
    public String appletQR(String scene, String page, String token, String path) throws IOException {
        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        Map<String, Object> params = new HashMap<>();
        params.put("scene", scene);
        params.put("page", page); //developer为开发版;trial为体验版;formal为正式版;默认为正式版
        params.put("env_version", "develop"); //要打开的小程序版本。正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版。
        HttpPost httpPost = new HttpPost("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + token);
        httpPost.addHeader("ContentTyp", "application/json");

        // 参数转 JSON 格式
        String json = objToStr(params);
        StringEntity stringEntity = new StringEntity(json, CharSetType.UTF8.getType());
        stringEntity.setContentEncoding(CharSetType.UTF8.getType());
        httpPost.setEntity(stringEntity);
        CloseableHttpResponse response = httpClient.execute(httpPost);
        HttpEntity entity = response.getEntity(); // 响应结果
        byte[] data;
        try {
            data = readInputStream(entity.getContent());
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        if (data.length < 100) { // 异常
            String error = new String(data);
            return null;
        }
        String fileName = UUID.randomUUID().toString().replaceAll("-", "") + ".png";
        String filePath = path + File.separator + fileName;
        // 创建文件
        FileOutputStream fileOutputStream = null;
        try {
            fileOutputStream = new FileOutputStream(filePath);
            fileOutputStream.write(data);
            fileOutputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 释放资源
        try {
            assert fileOutputStream != null;
            fileOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return fileName;
    }

    /**
     * description: 输入流转字节数组
     * create by: Mr.Fang
     *
     * @param inStream 输入流
     * @return: byte[]
     * @date: 2023/5/11 11:52
     */
    public static byte[] readInputStream(InputStream inStream) throws Exception {
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        // 创建一个Buffer字符串
        byte[] buffer = new byte[1024];
        // 每次读取的字符串长度,如果为-1,代表全部读取完毕
        int len = 0;
        // 使用一个输入流从buffer里把数据读取出来
        while ((len = inStream.read(buffer)) != -1) {
            // 用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
            outStream.write(buffer, 0, len);
        }
        // 关闭输入流
        inStream.close();
        // 把outStream里的数据写入内存
        return outStream.toByteArray();
    }

    public static void main(String[] args) throws IOException {
        WxUtils wxUtils = new WxUtils();
        // 获取 token
        String token = wxUtils.getToken();
        // 字符串转 map 对象
        Map map = wxUtils.strToObj(token, Map.class);
        // 生成小程序码
        String path = wxUtils.appletQR("2023", "pages/index/index", map.get("access_token").toString(), System.getProperty("user.dir") + File.separator);
        System.out.println(path);
    }

}

项目根目录生成小程序码

标签:return,String,微信,token,生成,Java,params,new,import
From: https://www.cnblogs.com/bxmm/p/17391023.html

相关文章

  • java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组
    1.java代码中fastjson生成字符串和解析字符串的方法List<TemplateFull>templateFulls=newArrayList<TemplateFull>();JSONArrayjsonArr=newJSONArray();jsonArr.addAll(templateFulls);StringjsonStr=jsonArr.toJSONString();System.out.pr......
  • java代理模式及动态代理类
    1.     代理模式代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。代理模式一般涉及到的角色有:抽象角色:声明真实对象和代理对象的共同接口;代理角色:......
  • JavaWeb之Servlet本质
    Servlet:服务器和Wepapp开发者之间的协议,sun公司已经规范了Servlet协议,Wepapp开发者只需要去实现规范接口类和对应的配置文件即可,Servlet底层是面向接口编程,用反射机制实例化一个类后再向下转型成Servlet类(因为Wepapp开发者实现规范好,只需到对应的文件中调用各个方法)菜鸟教程的解......
  • Java 9模块化关键字及应用场景
    一、背景SpringBoot3.0最低要求jdk17,为跟上节奏储备知识。二、简介关键字描述应用场景module定义一个模块代码隔离,依赖控制,代码可重用性openmodule定义一个像java9之前的开放模块像Java的旧版本那样允许完全反射exports...to指定模块的一部分对外提供......
  • Java 服务 CPU 占用过高排查
    先需要找出那个进程占用CPU高。top列出系统各个进程的资源占用情况。然后根据找到对应进行里哪个线程占用CPU高。top-Hp进程ID列出对应进程里面的线程占用资源情况找到对应线程ID后,再打印出对应线程的堆栈信息printf"%x\n"PID把线程ID转换为16进制。......
  • Linux重启Java的.sh脚本shell
    原文链接:https://blog.csdn.net/weixin_44821965/article/details/130039771前言最近看到了项目中重启Java服务的.sh文件,对sh文件里面的命令产生了好奇,于是研究了一下脚本里面每一个命令的具体意义一、.sh文件内容.sh文件里面的内容如下:ps-ef|grepplugins-web|grep-vgre......
  • 微信小程序获取appid 小程序appid获取 小程序页面链接获取
    1.可以获取任何小程序的appid2.可以获取任何小程序的对应页面链接3.以上二者收费服务2块钱一次,单独一项1元不支持后付费需要的加微信备注来意 ......
  • Java---内部类
    Java---内部类内部类的概念内部类就是一个类内部包含另一个类分类:成员内部类局部内部类(包含匿名内部类)格式:修饰符class外部类名称{修饰符class内部类名称{//}}注意:内用外,随意访问;外用内,需要内部类对象.代码示例publicclassBody{privateSt......
  • Java8相对于Java7新增了什么新特性
    Java8和Java7是两个不同的Java版本,Java8相对于Java7引入了相当多的新特性,以下是Java8相对于Java7新增的重要特性:Lambda表达式:Lambda表达式是Java8最重要的特性之一,它提供了一种简洁的编写匿名函数的方式,有助于编写更加易读和简单的代码。函数式接口和......
  • 【Java】Stream的一些日常操作
    1  前言 Java8出来的stream写法让我们对数据的处理带来了一些写法上的增进,这节就简单记录下平时使用的stream的一些操作,关于stream的书籍,可以看一下Java8实战,里边会有两三章讲解我们的stream。2 常用记录 //根据单个属性或者多个属性去重List<Object>data......