java生成小程序二维码

2019-12-10更新

直接上代码

import com.alibaba.fastjson.JSONObject;
import com.yuboinfo.commom.utils.https.HttpXmlClient;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;

/**
 * @author admin
 */
public class XcxQrCode {
    /**
     * 生成二维码
     * Folder:文件夹路径
     * xcxUrl:小程序地址 必须已发布的小程序
     *
     * @param folder 文件夹名称
     * @param xcxUrl 小程序地址
     * @return 地址
     */
    public static String qrCode(String folder,String fileName, String xcxUrl,String appid,String secret) {

        //获取ACCESS_TOKEN
        String accessToken = getAccessToken( appid, secret);
        String name = getQrCode(accessToken, folder, fileName, xcxUrl, 300);
        System.out.println(name);
        return name;
    }

    public static String getAccessToken(String appid,String secret) {
        String requestStr = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET";
        requestStr = requestStr.replace("APPID", appid);
        requestStr = requestStr.replace("SECRET", secret);
        String oauth2Token = HttpXmlClient.get(requestStr);
        JSONObject jsonObject = JSONObject.parseObject(oauth2Token);
        return jsonObject.getString("access_token");
    }

    public static String getQrCode(String accessToken, String folder,String fileName, String xcxPath, int width) {
        String createwxaqrcodeStr = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=" + accessToken;

        InputStream is = null;
        try {
            JSONObject json = new JSONObject();
            json.put("path",xcxPath);
            json.put("width",width);
            String params = json.toString();
            is = postInputStream(createwxaqrcodeStr, params);
            boolean flag = saveToImgByInputStream(is, folder, fileName);
            if (flag) {
                return folder + "/" + fileName;
            }

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(is != null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return "";
    }

    /**
     * 发送HttpPost请求 返回流
     *
     * @param strUrl 服务地址
     * @param params json字符串,例如: "{ \"id\":\"12345\" }" ;其中属性名必须带双引号<br/>
     * @return 成功:返回json字符串<br/>
     */
    public static InputStream postInputStream(String strUrl, String params) {
        try {
            // 创建连接
            URL url = new URL(strUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setUseCaches(false);
            connection.setInstanceFollowRedirects(true);
            // 设置请求方式
            connection.setRequestMethod("POST");
            // 设置接收数据的格式
            connection.setRequestProperty("Accept", "application/json");
            // 设置发送数据的格式
            connection.setRequestProperty("Content-Type", "application/json");
            //创建链接
            connection.connect();
            // utf-8编码
            OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8);
            out.append(params);
            out.flush();
            out.close();
            return connection.getInputStream();

        } catch (IOException e) {

            e.printStackTrace();
        }
        return null;
    }

    /**
     * 将二进制转换成文件保存
     *
     * @param instreams 二进制流
     * @param imgPath   图片的保存路径
     * @param imgName   图片的名称
     * @return 1:保存正常
     * 0:保存失败
     */
    public static boolean saveToImgByInputStream(InputStream instreams, String imgPath, String imgName) {
        if (instreams != null) {
            FileOutputStream fos = null;
            try {
                createDir(imgPath);

                //可以是任何图片格式.jpg,.png等
                File file = new File(imgPath, imgName);
                fos = new FileOutputStream(file);
                byte[] b = new byte[1024];
                int nRead;
                while ((nRead = instreams.read(b)) != -1) {
                    fos.write(b, 0, nRead);
                }
                return true;
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (fos != null) {
                        fos.flush();
                        fos.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }
        return false;
    }

    /**
     * 创建文件夹
     *
     * @param destDirName 文件夹名称
     */
    public static void createDir(String destDirName) {
        try {
            destDirName = URLDecoder.decode(destDirName, "GB2312");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        File dir = new File(destDirName);
        if (dir.exists()) {
            System.out.println("创建目录" + destDirName + "失败,目标目录已经存在");
            return;
        }
        if (!destDirName.endsWith(File.separator)) {
            destDirName = destDirName + File.separator;
        }
        // 创建目录
        if (dir.mkdirs()) {
            System.out.println("创建目录:" + destDirName + "成功!");
        } else {
            System.out.println("创建目录:" + destDirName + "失败!");
        }
    }

    public static void main(String[] args) {
        String appid = "";
        String secret = "";
        qrCode("d:/","adf.png", "pages/index/index",appid,secret);
    }
}

HttpXmlClient.util



import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.jboss.logging.Logger;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author admin
 */
public class HttpXmlClient {
    private static Logger log = Logger.getLogger(HttpXmlClient.class);

    /**
     * 返回请求接口回复的json数据
     *
     * @param url    链接
     * @param params 参数
     * @return String
     */
    public static String post(String url, Map<String, String> params) {

        //获取DefaultHttpClient请求
        HttpClient httpclient = HttpClientBuilder.create().build();
        log.info("create httppost:" + url);
        HttpPost post = postForm(url, params);
        return invoke(httpclient, post);
    }

    public static String get(String url) {
        HttpClient httpclient = HttpClientBuilder.create().build();
        log.info("create httpget:" + url);
        HttpGet get = new HttpGet(url);
        return invoke(httpclient, get);
    }


    private static String invoke(HttpClient httpclient,
                                 HttpUriRequest httpost) {
        HttpResponse response = sendRequest(httpclient, httpost);
        return paseResponse(response);
    }

    private static String paseResponse(HttpResponse response) {
        log.info("get response from http server..");
        HttpEntity entity = response.getEntity();
        log.info("response status: " + response.getStatusLine());
        String body = null;
        try {
            body = EntityUtils.toString(entity);
            log.info(body);
        } catch (ParseException | IOException e) {
            e.printStackTrace();
        }

        return body;
    }

    private static HttpResponse sendRequest(HttpClient httpclient,
                                            HttpUriRequest httpost) {
        log.info("execute post...");
        HttpResponse response = null;
        try {
            response = httpclient.execute(httpost);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return response;
    }

    private static HttpPost postForm(String url, Map<String, String> params) {

        HttpPost httpost = new HttpPost(url);
        List<NameValuePair> nvps = new ArrayList<>();

        if (params != null) {
            Set<String> keySet = params.keySet();

            for (String key : keySet) {
                nvps.add(new BasicNameValuePair(key, params.get(key)));
            }
            try {
                log.info("set utf-8 form entity to httppost");
                httpost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }

        }
        return httpost;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

It-小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值