`
kfcman
  • 浏览: 399592 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java 获取微信小程序二维码(指定启动页面和动态传入参数)

 
阅读更多

摘要:
Java 获取微信小程序二维码(指定启动页面和动态传入参数),Java 获取微信小程序二维码(指定启动页面和动态传入参数),Java 获取微信小程序二维码(指定启动页面和动态传入参数)
代码案例:

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
 
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
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.HttpClients;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.Logger;
 
import com.alibaba.fastjson.JSON;
import com.what21.server.common.integrate.wechat.WeChat;
 
public class WeChatApplet extends WeChat {
 
    static Logger logger = Logger.getLogger(WeChatApplet.class);
 
    /**
     * @return
     */
    public static Map<String, Object> getToken() {
        Map<String, Object> data = new HashMap<String, Object>();
        try {
            // ======================================================================//
            // 拼接调用微信的URL
            // grant_type:client_credential
            // appid:小程序
            // secret:小程序
            // ======================================================================//
            StringBuilder urlSb = new StringBuilder();
            urlSb.append("https://api.weixin.qq.com/cgi-bin/token");
            urlSb.append("?");
            urlSb.append("grant_type=%s&appid=%s&secret=%s");
            String tokenUrl = String.format(urlSb.toString(), "client_credential", MIN_APPID, MIN_APPSECRET);
            // ======================================================================//
            // 执行URL Get调用
            // ======================================================================//
            CloseableHttpClient httpClient = HttpClients.createDefault();
            HttpGet httpGet = new HttpGet(tokenUrl);
            HttpResponse httpResponse = httpClient.execute(httpGet);
            HttpEntity httpEntity = httpResponse.getEntity();
            String resultText = EntityUtils.toString(httpEntity, "utf-8");
            // ======================================================================//
            // 处理HTTP返回结果
            // ======================================================================//
            @SuppressWarnings("unchecked")
            Map<Object, Object> resultMap = JSON.parseObject(resultText, Map.class);
            if (resultMap != null) {
                if (resultMap != null && resultMap.size() > 0) {
                    // 合并2次调用结果
                    Set<Object> keySet = resultMap.keySet();
                    for (Object key : keySet) {
                        if (!data.containsKey(key)) {
                            data.put((String) key, resultMap.get(key));
                        }
                    }
                }
            }
        } catch (Exception e) {
            logger.error("fail to request wechat access token. [error={}]", e);
        }
        return data;
    }
 
    /**
     * @param accessToken
     * @param page
     * @param scene
     * @param width
     * @return
     */
    public static Map<String, Object> getMiniQrCode(String accessToken, String page, String scene, int width) {
        Map<String, Object> data = new HashMap<String, Object>();
        try {
            // ======================================================================//
            // 拼接调用微信的URL
            // ======================================================================//
            String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken;
            Map<String, Object> paramsMap = new HashMap<>();
            paramsMap.put("page", page);
            paramsMap.put("scene", scene);
            paramsMap.put("width", width <= 0 ? 430 : width);
            paramsMap.put("auto_color", false);
            Map<String, Object> line_color = new HashMap<String, Object>();
            line_color.put("r", 0);
            line_color.put("g", 0);
            line_color.put("b", 0);
            paramsMap.put("line_color", line_color);
            logger.info("调用生成微信URL接口传参:" + paramsMap);
            // ======================================================================//
            // 执行URL Post调用
            // ======================================================================//
            CloseableHttpClient httpClient = HttpClients.createDefault();
            HttpPost httpPost = new HttpPost(url);
            httpPost.addHeader(HTTP.CONTENT_TYPE, "application/json");
            // 必须是json模式的 post
            String body = JSON.toJSONString(paramsMap);
            StringEntity entity = new StringEntity(body);
            entity.setContentType("image/png");
            httpPost.setEntity(entity);
            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            // ======================================================================//
            // 处理HTTP返回结果
            // ======================================================================//
            InputStream contentStream = httpEntity.getContent();
            byte[] bytes = toByteArray(contentStream);
            contentStream.read(bytes);
            // 返回内容
            data.put("qrLength", bytes.length);
            data.put("qrBytes", bytes);
            data.put("qrBytesEncoder", Base64.getEncoder().encodeToString(bytes));
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("调用生成微信小程序码URL接口异常", e);
        }
        return data;
    }
 
    /**
     * @param input
     * @return
     * @throws IOException
     */
    public static byte[] toByteArray(InputStream input) throws IOException {
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        copy(input, output);
        return output.toByteArray();
    }
 
    /**
     * @param input
     * @param output
     * @return
     * @throws IOException
     */
    public static int copy(InputStream input, OutputStream output) throws IOException {
        long count = copyLarge(input, output);
        if (count > 2147483647L) {
            return -1;
        }
        return (int) count;
    }
 
    /**
     * @param input
     * @param output
     * @return
     * @throws IOException
     */
    public static long copyLarge(InputStream input, OutputStream output) throws IOException {
        byte[] buffer = new byte[4096];
        long count = 0L;
        int n = 0;
        while (-1 != (n = input.read(buffer))) {
            output.write(buffer, 0, n);
            count += n;
        }
        return count;
    }
 
}
测试方法:

import java.io.FileOutputStream;
import java.util.Map;
 
public class WeChatAppletTest {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        String access_token = (String) WeChatApplet.getToken().get("access_token");
        Map<String, Object> data = WeChatApplet.getMiniQrCode(access_token, "pages/index/index",
                "btype=1&border=xxx",60);
        String qrBytesEncoder = (String) data.get("qrBytesEncoder");
        Integer qrLength = (Integer) data.get("qrLength");
        System.out.println(qrBytesEncoder);
        System.out.println(qrLength);
        byte[] qrBytes = (byte[]) data.get("qrBytes");
        saveToImg("d://qrcode.png",qrBytes);
    }
 
    /**
     * @param imgPath
     * @param bytes
     * @return
     */
    public static int saveToImg(String imgPath, byte[] bytes) {
        int stateInt = 1;
        try {
            FileOutputStream fos = new FileOutputStream(imgPath);
            fos.write(bytes);
            fos.flush();
            fos.close();
        } catch (Exception e) {
            stateInt = 0;
            e.printStackTrace();
        } finally {
        }
        return stateInt;
    }
 
}

 

 

转载:http://www.what21.com/u/10004/6756200547748968305.htm

分享到:
评论

相关推荐

    微信小程序 绘制二维码 添加中间头像Logo

    在微信小程序中添加中间带有头像Logo的二维码是一项常见的需求,尤其在个性化和品牌推广方面。这个主题涉及到几个关键知识点,包括微信小程序的开发环境、SVG图像处理、Canvas API的运用以及图片资源的加载和合成。 ...

    微信小程序生成二维码demo

    这个“微信小程序生成二维码demo”应该是一个示例项目,旨在教授如何在微信小程序中生成和使用二维码。下面我们将深入探讨相关的知识点。 首先,我们需要了解微信小程序的基本概念。微信小程序是腾讯公司推出的一种...

    java微信小程序支付demo

    要实现Java微信小程序支付,首先需要在微信商户平台注册并获取必要的API密钥(AppID、商户号、支付密钥等)。然后,开发者需要在Java后端实现微信支付接口,包括订单创建、统一下单、支付结果查询等功能。 3. **...

    小程序/h5生成二维码方法

    2. **调用微信API**:微信提供了生成小程序二维码的API,如`wx.qrcode`接口。你需要将编码后的数据传入API,API会返回一个临时的二维码图片文件ID。 3. **展示二维码**:获取到图片ID后,你可以将其显示在小程序页面...

    调用微信和支付宝支付(java)

    3. **生成支付二维码或H5页面**:基于预支付交易会话标识,可以生成微信扫码支付的二维码,或者构建H5页面进行网页支付。 4. **支付结果通知**:微信服务器会将支付结果通过异步回调的方式通知到开发者指定的URL,...

    仿微信二维码、条码扫描

    Zxing库提供了Java、Android以及iOS等平台的API,使得开发者能够方便地在应用程序中集成二维码和条码扫描功能。 3. **使用Zxing实现扫码功能** - **集成Zxing到项目**:首先,需要在项目中引入Zxing的依赖库,对于...

    微信支付3.3.6demo(php版 + java版)

    - **AppID**:应用的唯一标识,对应微信开放平台或微信小程序的AppID。 - **支付密钥**:用于签名和验签的关键,确保交易安全。 - **统一下单接口**:创建订单的核心接口,包含商品信息、金额、交易类型等参数。 ...

    Java开发SSM框架微信支付的实现

    - `appID`:小程序ID,每个微信小程序都有唯一的标识。 - `mch_id`:商户号,企业开通微信支付后会获得的唯一识别码。 - `secret`:小程序密钥,用于与微信服务器交互时的身份验证。 这些参数通常会被封装在一...

    生成二维码代码及js,jar包

    例如,你可以使用草料二维码、微信小程序等工具,输入文本、网址或者联系人信息,一键生成二维码。 第二种方式是通过编程实现。在给定的"生成二维码代码"中,可能包含了JavaScript和Java的实现。JavaScript是一种...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    页面难以兼容适应不同分辨率的设备和浏览器。 本文研究并设计了基于Android+HTML5的在线认证检测系统,主要工作包括以下四个方面: (1)针对多窗口类浏览器模式问题,指出并分析了该问题存在的原因,利用Activity的...

    单点登录源码

    | └── zheng-ucenter-app -- 微信小程序后台 ├── zheng-api -- API接口总线系统 | ├── zheng-api-common -- api系统公共模块 | ├── zheng-api-rpc-api -- rpc接口包 | ├── zheng-api-rpc-service -- ...

Global site tag (gtag.js) - Google Analytics