6.4.1 创建临时二维码
1.接口描述
创建临时二维码的接口地址如下:
- https:// api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN
调用该接口需要POST如下格式的JSON数据包:
- {"expire_seconds": 1800, "action_name": "QR_SCENE", "action_info":
- {"scene":
上述JSON数据包中的参数说明如表6-6所示。
表6-6 临时二维码接口的参数说明
接口调用成功时返回的JSON结果如下:
- {"ticket":"gQG28DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL0FuWC1DNmZuVEhvMV
- p4NDNMRnNRAAIEesLvUQMECAcAAA==","expire_seconds":1800}
上述JSON结果中的参数描述如表6-7所示。
表6-7 创建临时二维码返回参数描述
接口调用失败时返回的JSON结果示例如下:
- {"errcode":40001,"errmsg":"invalid credential"}
2.方法封装及使用
将创建临时二维码的操作封装成createTemporaryQRCode()方法,该方法的实现如下:
- /**
- * 创建临时带参数二维码
- *
- * @param accessToken 接口访问凭证
- * @param expireSeconds 二维码有效时间,单位为秒,最长1800秒
- * @param sceneId 场景ID
- * @return WeixinQRCode
- */
- public static WeixinQRCode createTemporaryQRCode(String accessToken,
- int expireSeconds, int sceneId) {
- WeixinQRCode weixinQRCode = null;
- // 拼接请求地址
- String requestUrl = "https:// api.weixin.qq.com/cgi-bin/qrcode/
- create?access_token=ACCESS_TOKEN";
- requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken);
- // 需要提交的JSON数据
- String jsonMsg = "{\"expire_seconds\": %d, \"action_name\": \"QR_ SCENE\",
- \"action_info\": {\"scene\": {\"scene_id\": %d}}}";
- // 创建临时带参数二维码
- JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "POST",
- String.format(jsonMsg, expireSeconds, sceneId));
- if (null != jsonObject) {
- try {
- weixinQRCode = new WeixinQRCode();
- weixinQRCode.setTicket(jsonObject.getString("ticket"));
- weixinQRCode.setExpireSeconds(jsonObject.getInt("expire_seconds"));
- log.info("创建临时带参二维码成功 ticket:{} expire_seconds:{}",
- weixin QRCode.getTicket(), weixinQRCode.getExpireSeconds());
- } catch (Exception e) {
- weixinQRCode = null;
- int errorCode = jsonObject.getInt("errcode");
- String errorMsg = jsonObject.getString("errmsg");
- log.error("创建临时带参二维码失败 errcode:{} errmsg:{}", errorCode, errorMsg);
- }
- }
- return weixinQRCode;
- }
createTemporaryQRCode()方法的返回值是WeixinQRCode对象,它封装了调用接口返回的ticket和expire_seconds参数。WeixinQRCode类的代码如下:
- package org.liufeng.course.pojo;
- /**
- * 临时二维码信息
- *
- * @author liufeng
- * @date 2013-11-10
- */
- public class WeixinQRCode {
- // 获取的二维码ticket
- private String ticket;
- // 二维码的有效时间,单位为秒,最长不超过1800秒
- private int expireSeconds;
- public String getTicket() {
- return ticket;
- }
- public void setTicket(String ticket) {
- this.ticket = ticket;
- }
- public int getExpireSeconds() {
- return expireSeconds;
- }
- public void setExpireSeconds(int expireSeconds) {
- this.expireSeconds = expireSeconds;
- }
- }
下面是createTemporaryQRCode()方法的使用示例,创建一个有效时长为900秒、场景值ID为111111的二维码。
- public static void main(String args[]) {
- // 获取接口访问凭证
- String accessToken = CommonUtil.getToken("APPID", "APPSECRET").getAccessToken();
- // 创建临时二维码
- WeixinQRCode weixinQRCode = createTemporaryQRCode(accessToken, 900, 111111);
- // 临时二维码的ticket
- System.out.println(weixinQRCode.getTicket());
- // 临时二维码的有效时间
- System.out.println(weixinQRCode.getExpireSeconds());
- }
上面示例程序的运行结果如图6-6所示。
图6-6 创建临时二维码示例程序的运行结果