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 7997a70d..89371208 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 @@ -18,10 +18,10 @@ public interface WxMpQrcodeService { * 详情请见: 生成带参数的二维码 * * - * @param scene_id 参数。 - * @param expire_seconds 过期秒数,默认60秒,最小60秒,最大1800秒 + * @param sceneId 参数。 + * @param expireSeconds 过期秒数,默认60秒,最小60秒,最大1800秒 */ - WxMpQrCodeTicket qrCodeCreateTmpTicket(int scene_id, Integer expire_seconds) throws WxErrorException; + WxMpQrCodeTicket qrCodeCreateTmpTicket(int sceneId, Integer expireSeconds) throws WxErrorException; /** *
@@ -29,9 +29,9 @@ public interface WxMpQrcodeService {
    * 详情请见: 生成带参数的二维码
    * 
* - * @param scene_id 参数。永久二维码时最大值为100000(目前参数只支持1--100000) + * @param sceneId 参数。永久二维码时最大值为100000(目前参数只支持1--100000) */ - WxMpQrCodeTicket qrCodeCreateLastTicket(int scene_id) throws WxErrorException; + WxMpQrCodeTicket qrCodeCreateLastTicket(int sceneId) throws WxErrorException; /** *
@@ -39,9 +39,9 @@ public interface WxMpQrcodeService {
    * 详情请见: 生成带参数的二维码
    * 
* - * @param scene_str 参数。字符串类型长度现在为1到64 + * @param sceneStr 参数。字符串类型长度现在为1到64 */ - WxMpQrCodeTicket qrCodeCreateLastTicket(String scene_str) throws WxErrorException; + WxMpQrCodeTicket qrCodeCreateLastTicket(String sceneStr) throws WxErrorException; /** *
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 bb0e112c..9726b373 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
@@ -26,16 +26,20 @@ public class WxMpQrcodeServiceImpl implements WxMpQrcodeService {
   }
 
   @Override
-  public WxMpQrCodeTicket qrCodeCreateTmpTicket(int scene_id, Integer expire_seconds) throws WxErrorException {
+  public WxMpQrCodeTicket qrCodeCreateTmpTicket(int sceneId, Integer expireSeconds) throws WxErrorException {
+    if (sceneId == 0) {
+      throw new WxErrorException(WxError.newBuilder().setErrorCode(-1).setErrorMsg("临时二维码场景只不能为0!").build());
+    }
+
     String url = API_URL_PREFIX + "/create";
     JsonObject json = new JsonObject();
     json.addProperty("action_name", "QR_SCENE");
-    if (expire_seconds != null) {
-      json.addProperty("expire_seconds", expire_seconds);
+    if (expireSeconds != null) {
+      json.addProperty("expire_seconds", expireSeconds);
     }
     JsonObject actionInfo = new JsonObject();
     JsonObject scene = new JsonObject();
-    scene.addProperty("scene_id", scene_id);
+    scene.addProperty("scene_id", sceneId);
     actionInfo.add("scene", scene);
     json.add("action_info", actionInfo);
     String responseContent = this.wxMpService.execute(new SimplePostRequestExecutor(), url, json.toString());
@@ -43,13 +47,17 @@ public class WxMpQrcodeServiceImpl implements WxMpQrcodeService {
   }
 
   @Override
-  public WxMpQrCodeTicket qrCodeCreateLastTicket(int scene_id) throws WxErrorException {
+  public WxMpQrCodeTicket qrCodeCreateLastTicket(int sceneId) throws WxErrorException {
+    if (sceneId < 1 || sceneId > 100000) {
+      throw new WxErrorException(WxError.newBuilder().setErrorCode(-1).setErrorMsg("永久二维码的场景值目前只支持1--100000!").build());
+    }
+
     String url = API_URL_PREFIX + "/create";
     JsonObject json = new JsonObject();
     json.addProperty("action_name", "QR_LIMIT_SCENE");
     JsonObject actionInfo = new JsonObject();
     JsonObject scene = new JsonObject();
-    scene.addProperty("scene_id", scene_id);
+    scene.addProperty("scene_id", sceneId);
     actionInfo.add("scene", scene);
     json.add("action_info", actionInfo);
     String responseContent = this.wxMpService.execute(new SimplePostRequestExecutor(), url, json.toString());
@@ -57,13 +65,13 @@ public class WxMpQrcodeServiceImpl implements WxMpQrcodeService {
   }
 
   @Override
-  public WxMpQrCodeTicket qrCodeCreateLastTicket(String scene_str) throws WxErrorException {
+  public WxMpQrCodeTicket qrCodeCreateLastTicket(String sceneStr) throws WxErrorException {
     String url = API_URL_PREFIX + "/create";
     JsonObject json = new JsonObject();
     json.addProperty("action_name", "QR_LIMIT_STR_SCENE");
     JsonObject actionInfo = new JsonObject();
     JsonObject scene = new JsonObject();
-    scene.addProperty("scene_str", scene_str);
+    scene.addProperty("scene_str", sceneStr);
     actionInfo.add("scene", scene);
     json.add("action_info", actionInfo);
     String responseContent = this.wxMpService.execute(new SimplePostRequestExecutor(), url, json.toString());
@@ -81,7 +89,7 @@ public class WxMpQrcodeServiceImpl implements WxMpQrcodeService {
     String url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=%s";
     try {
       String resultUrl = String.format(url,
-              URLEncoder.encode(ticket, StandardCharsets.UTF_8.name()));
+        URLEncoder.encode(ticket, StandardCharsets.UTF_8.name()));
       if (needShortUrl) {
         return this.wxMpService.shortUrl(resultUrl);
       }
@@ -89,7 +97,7 @@ public class WxMpQrcodeServiceImpl implements WxMpQrcodeService {
       return resultUrl;
     } catch (UnsupportedEncodingException e) {
       WxError error = WxError.newBuilder().setErrorCode(-1)
-              .setErrorMsg(e.getMessage()).build();
+        .setErrorMsg(e.getMessage()).build();
       throw new WxErrorException(error);
     }
   }
diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpQrCodeServiceImplTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpQrCodeServiceImplTest.java
index 4c53ac17..a2ab5328 100644
--- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpQrCodeServiceImplTest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpQrCodeServiceImplTest.java
@@ -6,6 +6,7 @@ import me.chanjar.weixin.mp.api.ApiTestModule;
 import me.chanjar.weixin.mp.api.WxMpService;
 import me.chanjar.weixin.mp.bean.result.WxMpQrCodeTicket;
 import org.testng.Assert;
+import org.testng.annotations.DataProvider;
 import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
@@ -19,20 +20,26 @@ import java.io.File;
 @Test(groups = "qrCodeAPI")
 @Guice(modules = ApiTestModule.class)
 public class WxMpQrCodeServiceImplTest {
-
   @Inject
   protected WxMpService wxService;
 
-  public void testQrCodeCreateTmpTicket() throws WxErrorException {
-    WxMpQrCodeTicket ticket = this.wxService.getQrcodeService().qrCodeCreateTmpTicket(1, null);
+  @DataProvider
+  public Object[][] sceneIds() {
+    return new Object[][]{{-1}, {0}, {1}, {200000}};
+  }
+
+  @Test(dataProvider = "sceneIds")
+  public void testQrCodeCreateTmpTicket(int sceneId) throws WxErrorException {
+    WxMpQrCodeTicket ticket = this.wxService.getQrcodeService().qrCodeCreateTmpTicket(sceneId, null);
     Assert.assertNotNull(ticket.getUrl());
     Assert.assertNotNull(ticket.getTicket());
     Assert.assertTrue(ticket.getExpire_seconds() != -1);
     System.out.println(ticket);
   }
 
-  public void testQrCodeCreateLastTicket() throws WxErrorException {
-    WxMpQrCodeTicket ticket = this.wxService.getQrcodeService().qrCodeCreateLastTicket(1);
+  @Test(dataProvider = "sceneIds")
+  public void testQrCodeCreateLastTicket(int sceneId) throws WxErrorException {
+    WxMpQrCodeTicket ticket = this.wxService.getQrcodeService().qrCodeCreateLastTicket(sceneId);
     Assert.assertNotNull(ticket.getUrl());
     Assert.assertNotNull(ticket.getTicket());
     Assert.assertTrue(ticket.getExpire_seconds() == -1);