前言:最近一直在开发微信的东西,总结一下微信生成带参数的二维码。这个其实在参考文章的第一篇总结的非常详细,大家可以参考一下。这里总结一下微信生成带参数二维码的过程和主要开发代码。

注:本文使用RestTemplate提供远程请求,RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法。 
参考文章:Spring提供的用于访问Rest服务的客户端:RestTemplate实践

一、微信二维码介绍

目前有2种类型的二维码: 
1、临时二维码:是有过期时间的,最长可以设置为在二维码生成后的30天(即2592000秒)后过期,但能够生成较多数量。临时二维码主要用于帐号绑定等不要求二维码永久保存的业务场景 
2、永久二维码:是无过期时间的,但数量较少(目前为最多10万个)。永久二维码主要用于适用于帐号绑定、用户来源统计等场景。

参考文章:生成带参数的二维码

二、创建二维码

创建二维码我们需要先获取access_token,再传入参数,获取ticket或者url得到二维码。

1:获取access_token

2:创建二维码请求说明

2.1 临时二维码请求说明

http请求方式: POST
URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKENPOST数据格式:json
POST数据例子:{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}

2.2 永久二维码请求说明

http请求方式: POST
URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKENPOST数据格式:json
POST数据例子:{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 123}}}
或者也可以使用以下POST数据创建字符串形式的二维码参数:
{"action_name": "QR_LIMIT_STR_SCENE", "action_info": {"scene": {"scene_str": "123"}}}

2.3 参数说明

参数 说明
expire_seconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。
action_name 二维码类型,QR_SCENE为临时,QR_LIMIT_SCENE为永久,QR_LIMIT_STR_SCENE为永久的字符串参数值
action_info 二维码详细信息
scene_id 场景值ID,临时二维码时为32位非0整型,永久二维码时最大值为100000(目前参数只支持1–100000)
scene_str 场景值ID(字符串形式的ID),字符串类型,长度限制为1到64,仅永久二维码支持此字段

3:java接口开发

3.1 常量

// 临时二维码
private final static String QR_SCENE = "QR_SCENE";
// 永久二维码
private final static String QR_LIMIT_SCENE = "QR_LIMIT_SCENE";
// 永久二维码(字符串)
private final static String QR_LIMIT_STR_SCENE = "QR_LIMIT_STR_SCENE";
// 创建二维码
private String create_ticket_path = "https://api.weixin.qq.com/cgi-bin/qrcode/create";
// 通过ticket换取二维码
private String showqrcode_path = "https://mp.weixin.qq.com/cgi-bin/showqrcode";  

3.2 创建临时带参数二维码

/** * 创建临时带参数二维码 * @param accessToken * @expireSeconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。 * @param sceneId 场景Id * @return */
public String createTempQr(String accessToken, String expireSeconds, int sceneId) { RestTemplate rest = new RestTemplate();String url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token="+accessToken ;// 参数:{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}Map<String,Integer> intMap = new HashMap<String,Integer>();  intMap.put("scene_id",sceneId);  Map<String,Map<String,Integer>> mapMap = new HashMap<String,Map<String,Integer>>();  mapMap.put("scene", intMap);   Map<String,Object> paramsMap = new HashMap<String,Object>();  paramsMap.put("expire_seconds", expireSeconds);  paramsMap.put("action_name", QR_SCENE);  paramsMap.put("action_info", mapMap); MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();HttpEntity requestEntity = new HttpEntity(paramsMap, headers);Map result = null;try {ResponseEntity<Map> entity = rest.exchange(url, HttpMethod.POST, requestEntity,Map.class, new Object[0]);LOG.info("调用生成微信临时二维码URL接口返回结果:" + entity.getBody());result = (Map) entity.getBody();} catch (Exception e) {LOG.error("调用生成微信临时二维码URL接口异常",e);}if(!BlankUtil.isBlank(result)){return result;}return null;
}

3.3 创建永久二维码(数字)

/** * 创建永久二维码(字符串)* @param sceneId 场景id * @param accessToken * @return */
public Map createForeverQr(Integer sceneId,String accessToken ) {RestTemplate rest = new RestTemplate();String url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token="+accessToken ;// 参数:{"action_name": "QR_LIMIT_STR_SCENE", "action_info": {"scene": {"scene_str": sceneStr}}}Map<String,Object> param = new HashMap<>();param.put("action_name", "QR_LIMIT_STR_SCENE");Map<String,Object> action = new HashMap<>();Map<String,Object> scene = new HashMap<>();scene.put("scene_id", sceneId);action.put("scene", scene);param.put("action_info", action);MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();HttpEntity requestEntity = new HttpEntity(param, headers);Map result = null;try {ResponseEntity<Map> entity = rest.exchange(url, HttpMethod.POST, requestEntity,Map.class, new Object[0]);LOG.info("调用生成微信永久二维码URL接口返回结果:" + entity.getBody());result = (Map) entity.getBody();} catch (Exception e) {LOG.error("调用生成微信永久二维码URL接口异常",e);}if(!BlankUtil.isBlank(result)){return result;}return null;
}

3.4 创建永久二维码(字符串)

/** * 创建永久二维码(字符串)* @param sceneStr 场景值 * @param accessToken * @return */
public Map createForeverStrQr(String sceneStr,String accessToken ) {RestTemplate rest = new RestTemplate();String url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token="+accessToken ;// 参数:{"action_name": "QR_LIMIT_STR_SCENE", "action_info": {"scene": {"scene_str": sceneStr}}}Map<String,Object> param = new HashMap<>();param.put("action_name", "QR_LIMIT_STR_SCENE");Map<String,Object> action = new HashMap<>();Map<String,Object> scene = new HashMap<>();scene.put("scene_str", sceneStr);action.put("scene", scene);param.put("action_info", action);MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();HttpEntity requestEntity = new HttpEntity(param, headers);Map result = null;try {ResponseEntity<Map> entity = rest.exchange(url, HttpMethod.POST, requestEntity,Map.class, new Object[0]);LOG.info("调用生成微信永久二维码URL接口返回结果:" + entity.getBody());result = (Map) entity.getBody();} catch (Exception e) {LOG.error("调用生成微信永久二维码URL接口异常",e);}if(!BlankUtil.isBlank(result)){return result;}return null;
}

4:返回参数

4.1 返回说明

正确的Json返回结果:
{"ticket":"gQH47joAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL2taZ2Z3TVRtNzJXV1Brb3ZhYmJJAAIEZ23sUwMEmm3sUw==","expire_seconds":60,"url":"http:\/\/weixin.qq.com\/q\/kZgfwMTm72WWPkovabbI"}
  • 1
  • 2

4.2 参数说明

参数 说明
ticket 获取的二维码ticket,凭借此ticket可以在有效时间内换取二维码。
expire_seconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天)。
url 二维码图片解析后的地址,开发者可根据该地址自行生成需要的二维码图片

三、获取二维码图片

1:通过ticket换取二维码

获取二维码ticket后,开发者可用ticket换取二维码图片。请注意,本接口无须登录态即可调用。

1.1 请求说明

HTTP GET请求(请使用https协议)
https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET

提醒:TICKET记得进行UrlEncode

2:通过url换取二维码

生成的微信二维码还包含一个图片解析后的地址url。

实例:

http://weixin.qq.com/q/02gxxGBN2HbaT10000w07E

我们开始使用草料二维码生成工具,或者根据url创建二维码图片。

参考文章:

Java微信公众平台开发之生成带参二维码 
微信官方技术文档—生成带参数的二维码

微信公众平台 生成带参数的二维码相关推荐

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

    官网功能介绍:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1443433542 1.获取access_token:根据公众号的 ...

  2. wechat-0050,微信公众号,带参数的二维码获取与扫码事件推送

    demo:https://github.com/wenrongyao/wechat-demo 摘要:这篇帖子讲述如何获取带参数的二维码,以及扫码带参数的二维码后的事件接收. 微信开发者文档:https ...

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

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

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

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

  5. 微信开发生成带参数的二维码的讲解

    在微信公众号平台开发者那里,在"账号管理"那里,有一项功能是"生成带参数的二维码",通过这儿生成的二维码,只要通过微信扫一扫之后,会把事件自动推送到微信公众号上 ...

  6. 微信生成带参数的二维码,合成海报,扫码后推送小程序?

    微信服务号渠道二维码功能,支持生成带参数二维码,合成海报二维码,微信扫码后推送内容:结合微号帮平台48小时信息推送,推送微信小程序. 带参二维码 海报二维码 微信扫码后回复 48小时信息推送 在微号帮 ...

  7. 生成带参数的二维码接口实例

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

  8. asp生成带参数的二维码并合成推广海报图片,asp合并合成推广海报图片asp代码

    最近做的一个项目中,客户要求用asp生成二维码,然后合并到一张背景图片上,合并生成一张推广海报来,可把我愁坏了,经过一个晚上的努力,成功了,下面把这个:asp生成带参数的二维码并合成推广海报,asp合 ...

  9. asp生成带参数的二维码并合成推广海报图片,asp合并合成推广海报图片asp代码...

    最近做的一个项目中,客户要求用asp生成二维码,然后合并到一张背景图片上,合并生成一张推广海报来,可把我愁坏了,经过一个晚上的努力,成功了,下面把这个:asp生成带参数的二维码并合成推广海报,asp合 ...

最新文章

  1. Linux驱动框架之framebuffer驱动框架
  2. Ajax的数据发送与接收(jQuery)
  3. 转发:linux修改光盘作为源
  4. .net面试题大全,绝大部分面试题
  5. 微信小程序 CSS filter(滤镜)的使用示例
  6. Asp.net(C#)中备份还原SQL Server数据库实现
  7. RxHttp 一条链发送请求之注解处理器 Generated API(四)
  8. Netty学习总结(4)——图解Netty之Pipeline、channel、Context之间的数据流向
  9. 短视频直播带货APP源码 全开源原生直播APP源码
  10. visual studio html插件,实用的 Visual Studio Code 插件
  11. 似乎可以破解软件代码
  12. pip更改为豆瓣源以及源信任问题
  13. 幼儿园故事导入语案例_幼儿园大班语言故事
  14. MyBayis插件-逆向工程
  15. 报错Takes no arguements解决办法
  16. 电流感应放大器应用技术要点
  17. 电商行业特点以及理解电商的模式
  18. 基于战舰V3的4.3寸电容触摸屏
  19. VISI 21五金冲压连续模具设计视频教程 SDK21教程
  20. Centos Stream 9安装docker-ce

热门文章

  1. 构建高质量的持续交付体系
  2. 根据经纬度获取日出日落时间
  3. medoo php 教程,使用Medoo框架完成增删改查功能
  4. Fate单机部署(主机版本)
  5. 汉诺塔(一) nyist88
  6. 10.10 英语单词
  7. NPU架构分析与应用
  8. docker部署zabbix
  9. 您试图连接的 SQL Server 2016 实例未安装
  10. TransE论文第3节:相关工作