本文只提供代码实现,具体参数含义请先仔细阅读微信公众号技术文档之生成带参数的二维码

临时二维码请求说明:

一、常量类

public class WechartConst {//生成带参数的二维码public static final String CREATE_QRCODE_URL = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN";//通过ticket换取二维码public static final String SHOW_QRCODE_URL = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET";}

二、创建实体类
QrCodeParam类

import com.alibaba.fastjson.annotation.JSONField;/*** 生成二维码请求参数*/
public class QrCodeParam {//该二维码有效时间,以秒为单位@JSONField(name = "expire_seconds")private int expireSeconds;//二维码类型,QR_SCENE为临时的整型参数值,QR_STR_SCENE为临时的字符串参数值@JSONField(name = "action_name")private String actionName;//二维码详细信息@JSONField(name = "action_info")private ActionInfo actionInfo;/*** 二维码信息*/public class ActionInfo {private Scene scene;/*** 场景值*/public class Scene {@JSONField(name = "scene_id")private Integer sceneId;public Integer getSceneId() {return sceneId;}public void setSceneId(Integer sceneId) {this.sceneId = sceneId;}}public Scene getScene() {return scene;}public void setScene(Scene scene) {this.scene = scene;}}public int getExpireSeconds() {return expireSeconds;}public void setExpireSeconds(int expireSeconds) {this.expireSeconds = expireSeconds;}public String getActionName() {return actionName;}public void setActionName(String actionName) {this.actionName = actionName;}public ActionInfo getActionInfo() {return actionInfo;}public void setActionInfo(ActionInfo actionInfo) {this.actionInfo = actionInfo;}
}

三、HttpUtil
用于发送POST或GET请求:HttpsUtil类

四、创建ticket,并通过ticket获取二维码

public class TemporaryQRcode {private static Logger log = LogManager.getLogger(TemporaryQRcode.class);/*** 生成临时二维码* @param expireSeconds  二维码有效时间(单位为秒)* @param sceneId  场景id  临时二维码场景值Id为32位非0整数* @param savePath 二维码保存路径* @return*/public String getTempQrcode(int expireSeconds, int sceneId, String savePath) {// 需要提交json数据QrCodeParam qrCodeParam = new QrCodeParam();QrCodeParam.ActionInfo actionInfo = qrCodeParam.new ActionInfo();QrCodeParam.ActionInfo.Scene scene = actionInfo.new Scene();//设置场景值scene.setSceneId(sceneId);actionInfo.setScene(scene);qrCodeParam.setActionInfo(actionInfo);qrCodeParam.setActionName("QR_SCENE");qrCodeParam.setExpireSeconds(expireSeconds);String ticket = getTicket(JSON.toJSONString(qrCodeParam));//是否保存二维码图片,不保存可直接返回qrCodeUrl //String qrCodeUrl = WechartConst.SHOW_QRCODE_URL.replace("TICKET", ticket);return getQRcode(ticket, savePath);}/*** 获取ticket* @param qrCodeParam* @return*/private String getTicket(String qrCodeParam){String ticket = null;// 拼接请求地址String requestUrl = WechartConst.CREATE_QRCODE_URL.replace("TOKEN", WechartConst.ACCESS_TOKEN);// 创建临时带参二维码JSONObject jsonObject = HttpsUtil.request(requestUrl, "POST",JSON.toJSONString(qrCodeParam) );if (null != jsonObject) {String response = jsonObject.toJSONString();if (!jsonObject.containsKey("errcode")){ticket = jsonObject.getString("ticket");System.out.println("临时带参二维码ticket成功" +response);} else {log.error("临时带参二维码ticket失败:"+response);}}return ticket;}/*** 通过ticket换取二维码并保存二维码图片* @param ticket* @param savePath* @return*/private String getQRcode(String ticket, String savePath) {String filepath ;String requestUrl = WechartConst.SHOW_QRCODE_URL.replace("TICKET", ticket);try {URL url = new URL(requestUrl);HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();conn.setDoInput(true);conn.setRequestMethod("GET");if (!savePath.endsWith("/")) {savePath += "/";}// 将ticket 作为文件名filepath = savePath + ticket + ".jpg";// 将微信服务器返回的输入流写入文件BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());FileOutputStream fos = new FileOutputStream(new File(filepath));byte[] buf = new byte[8096];int size = 0;while ((size = bis.read(buf)) != -1)fos.write(buf, 0, size);fos.close();bis.close();conn.disconnect();System.out.println("根据ticket换取二维码成功");} catch (Exception e) {filepath = null;log.error("根据ticket换取二维码失败" + e.getMessage());}return filepath;}

五、使用示例

  public static void main(String[] args) {String path = "d:/QRcode";TemporaryQRcode temporaryQRcode = new TemporaryQRcode();temporaryQRcode.getTempQrcode(900, 111111,path);}

微信公众号开发----生成带参数的临时二维码相关推荐

  1. 微信公众号怎么生成带统计的渠道二维码

    公众号生成带统计的渠道二维码,通过公众号开发接口生成带参数的二维码实现,记录粉丝关注取关的结果,包含粉丝昵称.粉丝头像等都是公众号平台提供的接口开发.微号帮平台现有功能渠道二维码生成实现,也可以自己开 ...

  2. 微信公众号怎么生成能追踪效果的二维码?

    微号帮平台微信渠道二维码功能介绍:为了满足用户渠道推广分析的需要,微信公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,微信公众号可以接收到事件推送. 现在 ...

  3. JAVA 实现微信公众号的生成带参数二维码和扫码后被动回复消息

    公司新需求实现生成微信公众号带参数二维码和对应扫码后回复相应信息的功能. 1.实现带参数二维码功能 public class QrTest {private static Logger logger ...

  4. 微信公众号之生成带参数的二维码

    生成带参数的二维码 为了满足用户渠道推广分析和用户帐号绑定等场景的需要,公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送.目前有2 ...

  5. 微信公众号怎么生成带参数的二维码?

    每位运营过微信公众平台的野生小编都知道,微信提供给开发者的文档是很高深的,最近为了弄个带参数的二维码,同样技术小白的小编也死了不少脑细胞了,然而我终于知道官方生成带参数的二维码的方法了. 1.注意事项 ...

  6. 随便记录一下:微信公众号后台管理系统,获取需要扫描的二维码

    今天心血来潮,看了一下微信扫码登陆.这里记录一下,重申一下–做事需要耐心!!! 微信公众号官网:mp.weixin.qq.com 我们需要分析的是二维码图片如何拿到了,当然,强大的f12绝对可以, 拿 ...

  7. 微信公众号怎么生成带粉丝关注统计的渠道二维码

    关于微信公众号在线生成带粉丝关注统计的渠道二维码,第三方工具微号帮提供了渠道二维码生成功能实现,可以为公众号生成带粉丝关注统计的渠道二维码,可以生成多个不同的渠道二维码,每个渠道二维码都可以单独统计粉 ...

  8. 基于phpqrcode生成带LOGO图标的二维码(源代码例子)

    基于phpqrcode生成带LOGO图标的二维码(源代码例子) <?php //文件输出 include('phpqrcode.php'); // 二维码数据 $data = 'http://w ...

  9. 公众号 多服务器配置_微信公众号开发之配置和接入(二)

    从今天开始我们就正式开始微信公众号开发了,首先进入微信官网https://mp.weixin.qq.com/,注册或者登陆(如果已经注册了)你的微信公众号,登陆后需要管理员用个人微信扫码验证通过才行, ...

最新文章

  1. java参数传递:值传递还是引用传递
  2. 最佳开发工具大全!前谷歌工程师两年打造“厂外生存指南”,登上GitHub热榜
  3. YOLT遥感图像检测算法详解
  4. 基于OIDC(OpenID Connect)的SSO
  5. c 语言 二进制 十进制,C 语言实例 - 二进制与十进制相互转换
  6. Mybatis-04-结果集映射resultMap/动态SQL/关联查询
  7. 连续年份高精度人口密度分布数据
  8. Pandas速查手册中文
  9. 走进波分 -- 16.Optix OSN9800产品介绍
  10. mkv文件用什么软件打开_什么是MKV文件,以及如何播放它们?
  11. 智能学习 | MATLAB实现Bee-CNN蜜蜂算法优化卷积神经网络图像分类预测
  12. coreldraw x8重新安装失败解决办法
  13. Android 调用系统相册选取视频,过滤视频(兼容小米)
  14. 如何在线文字转语音?
  15. git pull 提示错误 fatal: refusing to merge unrelated histories
  16. 计算机课gif,信息技术五年级下册第7课 认识GIF动画教学设计及反思
  17. 面试的时候我为什么会紧张
  18. U8860 华为荣耀各种刷机教程
  19. 广州.NET微软技术俱乐部休闲活动 - 每周三五晚周日下午爬白云山活动
  20. [Error: ENOENT: no such file or directory, open

热门文章

  1. android获取短信中心号
  2. APK保护技术——保护应用、游戏APP不被破解
  3. proxomx软件仓库无法使用解决
  4. 一、微信小程序-快速回顾(创建项目、项目结构分析)
  5. 解决Word导出PDF显示有批注的问题
  6. 玩转华为数据中心交换机系列 | 配置动态LACP模式的链路聚合示例
  7. 随笔二——JavaScript脚本语言
  8. System.IO.FileNotFoundException: Could not load file or assembly ‘xx.dll‘ or one of its dependencies
  9. GreenPlum 大数据平台--运维(三)
  10. linux分区的起始扇区,f-fdisk做磁盘分区,起始扇区从2048块开始