6.4.1 创建临时二维码

1.接口描述

创建临时二维码的接口地址如下:

  1. https:// api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN

调用该接口需要POST如下格式的JSON数据包:

  1. {"expire_seconds": 1800, "action_name": "QR_SCENE", "action_info":
  2. {"scene":

上述JSON数据包中的参数说明如表6-6所示。

表6-6 临时二维码接口的参数说明

6.4.1 创建临时二维码 - 图1

接口调用成功时返回的JSON结果如下:

  1. {"ticket":"gQG28DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL0FuWC1DNmZuVEhvMV
  2. p4NDNMRnNRAAIEesLvUQMECAcAAA==","expire_seconds":1800}

上述JSON结果中的参数描述如表6-7所示。

表6-7 创建临时二维码返回参数描述

6.4.1 创建临时二维码 - 图2

接口调用失败时返回的JSON结果示例如下:

  1. {"errcode":40001,"errmsg":"invalid credential"}

2.方法封装及使用

将创建临时二维码的操作封装成createTemporaryQRCode()方法,该方法的实现如下:

  1. /**
  2. * 创建临时带参数二维码
  3. *
  4. * @param accessToken 接口访问凭证
  5. * @param expireSeconds 二维码有效时间,单位为秒,最长1800秒
  6. * @param sceneId 场景ID
  7. * @return WeixinQRCode
  8. */
  9. public static WeixinQRCode createTemporaryQRCode(String accessToken,
  10. int expireSeconds, int sceneId) {
  11. WeixinQRCode weixinQRCode = null;
  12. // 拼接请求地址
  13. String requestUrl = "https:// api.weixin.qq.com/cgi-bin/qrcode/
  14. create?access_token=ACCESS_TOKEN";
  15. requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken);
  16. // 需要提交的JSON数据
  17. String jsonMsg = "{\"expire_seconds\": %d, \"action_name\": \"QR_ SCENE\",
  18. \"action_info\": {\"scene\": {\"scene_id\": %d}}}";
  19. // 创建临时带参数二维码
  20. JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "POST",
  21. String.format(jsonMsg, expireSeconds, sceneId));
  22.  
  23. if (null != jsonObject) {
  24. try {
  25. weixinQRCode = new WeixinQRCode();
  26. weixinQRCode.setTicket(jsonObject.getString("ticket"));
  27. weixinQRCode.setExpireSeconds(jsonObject.getInt("expire_seconds"));
  28. log.info("创建临时带参二维码成功 ticket:{} expire_seconds:{}",
  29. weixin QRCode.getTicket(), weixinQRCode.getExpireSeconds());
  30. } catch (Exception e) {
  31. weixinQRCode = null;
  32. int errorCode = jsonObject.getInt("errcode");
  33. String errorMsg = jsonObject.getString("errmsg");
  34. log.error("创建临时带参二维码失败 errcode:{} errmsg:{}", errorCode, errorMsg);
  35. }
  36. }
  37. return weixinQRCode;
  38. }

createTemporaryQRCode()方法的返回值是WeixinQRCode对象,它封装了调用接口返回的ticket和expire_seconds参数。WeixinQRCode类的代码如下:

  1. package org.liufeng.course.pojo;
  2. /**
  3. * 临时二维码信息
  4. *
  5. * @author liufeng
  6. * @date 2013-11-10
  7. */
  8. public class WeixinQRCode {
  9. // 获取的二维码ticket
  10. private String ticket;
  11. // 二维码的有效时间,单位为秒,最长不超过1800秒
  12. private int expireSeconds;
  13.  
  14. public String getTicket() {
  15. return ticket;
  16. }
  17.  
  18. public void setTicket(String ticket) {
  19. this.ticket = ticket;
  20. }
  21.  
  22. public int getExpireSeconds() {
  23. return expireSeconds;
  24. }
  25.  
  26. public void setExpireSeconds(int expireSeconds) {
  27. this.expireSeconds = expireSeconds;
  28. }
  29. }

下面是createTemporaryQRCode()方法的使用示例,创建一个有效时长为900秒、场景值ID为111111的二维码。

  1. public static void main(String args[]) {
  2. // 获取接口访问凭证
  3. String accessToken = CommonUtil.getToken("APPID", "APPSECRET").getAccessToken();
  4. // 创建临时二维码
  5. WeixinQRCode weixinQRCode = createTemporaryQRCode(accessToken, 900, 111111);
  6. // 临时二维码的ticket
  7. System.out.println(weixinQRCode.getTicket());
  8. // 临时二维码的有效时间
  9. System.out.println(weixinQRCode.getExpireSeconds());
  10. }

上面示例程序的运行结果如图6-6所示。

6.4.1 创建临时二维码 - 图3

图6-6 创建临时二维码示例程序的运行结果