From fad8c7c21176564606306e1fec89e42c5e7b8df9 Mon Sep 17 00:00:00 2001 From: "q1ng.peng" Date: Mon, 14 Aug 2017 17:51:47 +0800 Subject: [PATCH 1/2] Update WxMpQrcodeService.java --- .../me/chanjar/weixin/mp/api/WxMpQrcodeService.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpQrcodeService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpQrcodeService.java index e2e17eb359..1efaee2512 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpQrcodeService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpQrcodeService.java @@ -25,6 +25,17 @@ public interface WxMpQrcodeService { * @param expireSeconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。 */ WxMpQrCodeTicket qrCodeCreateTmpTicket(int sceneId, Integer expireSeconds) throws WxErrorException; + + /** + *
+   * 换取临时二维码ticket
+   * 详情请见: 生成带参数的二维码
+   * 
+ * + * @param sceneStr 参数。字符串类型长度现在为1到64 + * @param expireSeconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。 + */ + WxMpQrCodeTicket qrCodeCreateTmpTicket(String sceneStr, Integer expireSeconds) throws WxErrorException; /** *

From 962bb1e0c8641b5703a5a2668b547f7a1900bb42 Mon Sep 17 00:00:00 2001
From: "q1ng.peng" 
Date: Mon, 14 Aug 2017 17:59:26 +0800
Subject: [PATCH 2/2] Update WxMpQrcodeServiceImpl.java
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

在某些场景下,我们需要通过二维码传递String类型的参数,且该二维码只需要临时使用,但目前的sdk中好像没有提供对应生成带String类型参数的临时二维码的api,我查了官方文档,发现是允许这么做的,所以我加上了这个,希望有帮助。
---
 .../mp/api/impl/WxMpQrcodeServiceImpl.java    | 26 +++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpQrcodeServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpQrcodeServiceImpl.java
index 817a0b68f2..4fd553c70e 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpQrcodeServiceImpl.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpQrcodeServiceImpl.java
@@ -53,6 +53,32 @@ public WxMpQrCodeTicket qrCodeCreateTmpTicket(int sceneId, Integer expireSeconds
     String responseContent = this.wxMpService.post(url, json.toString());
     return WxMpQrCodeTicket.fromJson(responseContent);
   }
+  
+  @Override
+  public WxMpQrCodeTicket qrCodeCreateTmpTicket(String sceneStr, Integer expireSeconds) throws WxErrorException {
+	      //expireSeconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。
+	      if (expireSeconds != null && expireSeconds > 2592000) {
+	        throw new WxErrorException(WxError.newBuilder().setErrorCode(-1)
+	          .setErrorMsg("临时二维码有效时间最大不能超过2592000(即30天)!").build());
+	      }
+
+	      if (expireSeconds == null) {
+	        expireSeconds = 30;
+	      }
+
+	      String url = API_URL_PREFIX + "/create";
+	      JsonObject json = new JsonObject();
+	      json.addProperty("action_name", "QR_LIMIT_STR_SCENE");
+	      json.addProperty("expire_seconds", expireSeconds);
+
+	      JsonObject actionInfo = new JsonObject();
+	      JsonObject scene = new JsonObject();
+	      scene.addProperty("scene_str", sceneStr);
+	      actionInfo.add("scene", scene);
+	      json.add("action_info", actionInfo);
+	      String responseContent = this.wxMpService.post(url, json.toString());
+	      return WxMpQrCodeTicket.fromJson(responseContent);
+  }
 
   @Override
   public WxMpQrCodeTicket qrCodeCreateLastTicket(int sceneId) throws WxErrorException {