From f1b270bd283b7d555998cc885adee53ffe823a18 Mon Sep 17 00:00:00 2001 From: Element Date: Thu, 27 Jul 2017 14:55:27 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E4=BA=8C=E7=BB=B4=E7=A0=81=EF=BC=88=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E7=A0=81=EF=BC=89=E6=8E=A5=E5=8F=A3=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=B0=8F=E7=A8=8B=E5=BA=8F=E6=A8=A1=E6=9D=BF=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E8=AF=BB=E5=8F=96=E9=94=99=E8=AF=AF=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E7=9A=84NullPoint?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wx/miniapp/api/WxMaMsgService.java | 2 +- .../wx/miniapp/api/WxMaQrcodeService.java | 82 +++++++++++++++++++ .../miniapp/api/impl/WxMaMsgServiceImpl.java | 8 +- .../api/impl/WxMaQrcodeServiceImpl.java | 47 +++++++++++ .../bean/WxMaJscode2SessionResult.java | 11 +++ .../wx/miniapp/bean/WxMaQrcode.java | 2 +- .../wx/miniapp/bean/WxMaQrcodeWrapper.java | 16 ++++ .../wx/miniapp/bean/WxMaWxcode.java | 64 +++++++++++++++ .../wx/miniapp/bean/WxMaWxcodeLimit.java | 68 +++++++++++++++ .../util/http/QrCodeRequestExecutor.java | 6 +- .../util/json/WxMaKefuMessageGsonAdapter.java | 1 - .../api/impl/WxMaMsgServiceImplTest.java | 3 +- .../api/impl/WxMaQrcodeServiceImplTest.java | 12 +++ .../wx/miniapp/bean/WxMaMessageTest.java | 1 - .../wx/miniapp/demo/WxMaDemoServer.java | 4 +- 15 files changed, 314 insertions(+), 13 deletions(-) create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaQrcodeWrapper.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcode.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcodeLimit.java diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMsgService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMsgService.java index 65522f4b75..46f5af5a89 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMsgService.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMsgService.java @@ -31,5 +31,5 @@ public interface WxMaMsgService { * 接口url格式:https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN * */ - void sendTemplateMsg(WxMaTemplateMessage templateMessage) throws WxErrorException; + String sendTemplateMsg(WxMaTemplateMessage templateMessage) throws WxErrorException; } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaQrcodeService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaQrcodeService.java index 822f5de8a4..539e4c2f84 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaQrcodeService.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaQrcodeService.java @@ -7,6 +7,9 @@ /** *
  * 二维码相关操作接口
+ *
+ * 接口A(createWxCode)加上接口C(createQrcode),总共生成的码数量限制为100,000,请谨慎调用。
+ *
  * 文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/qrcode.html
  * 
* @@ -15,6 +18,46 @@ public interface WxMaQrcodeService { /** + * lineColor 包装类 + * 用于描述二维码(小程序码)颜色(RGB参数值),详情请查看文档 + */ + public static class LineColor { + + private String r = "0", g = "0", b = "0"; + + public LineColor(String r, String g, String b) { + this.r = r; + this.g = g; + this.b = b; + } + + public String getR() { + return r; + } + + public void setR(String r) { + this.r = r; + } + + public String getG() { + return g; + } + + public void setG(String g) { + this.g = g; + } + + public String getB() { + return b; + } + + public void setB(String b) { + this.b = b; + } + } + + /** + * 接口C *
    * 获取小程序页面二维码
    * 适用于需要的码数量较少的业务场景
@@ -27,4 +70,43 @@ public interface WxMaQrcodeService {
    * @param width 默认430 二维码的宽度
    */
   File createQrcode(String path, int width) throws WxErrorException;
+
+  File createQrcode(String path) throws WxErrorException;
+
+  /**
+   * 接口A
+   * 获取小程序码
+   *
+   * @param path      不能为空,最大长度 128 字节
+   * @param width     默认430 二维码的宽度
+   * @param autoColor 默认true 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调
+   * @param lineColor auth_color 为 false 时生效,使用 rgb 设置颜色 例如 {"r":"xxx","g":"xxx","b":"xxx"}
+   * @return
+   * @throws WxErrorException
+   */
+  File createWxCode(String path, int width, boolean autoColor, LineColor lineColor) throws WxErrorException;
+
+  File createWxCode(String path, int width) throws WxErrorException;
+
+  File createWxCode(String path) throws WxErrorException;
+
+  /**
+   * 接口B
+   * 获取小程序码(永久有效、数量暂无限制)
+   *
+   * 通过该接口生成的小程序码,永久有效,数量暂无限制。
+   * 用户扫描该码进入小程序后,将统一打开首页,开发者需在对应页面根据获取的码中 scene 字段的值,再做处理逻辑。
+   * 使用如下代码可以获取到二维码中的 scene 字段的值。
+   * 调试阶段可以使用开发工具的条件编译自定义参数 scene=xxxx 进行模拟,开发工具模拟时的 scene 的参数值需要进行 urlencode
+   * @param scene   最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)
+   * @param page    必须是已经发布的小程序页面,例如 "pages/index/index" ,如果不填写这个字段,默认跳主页面
+   * @param width   默认false 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调
+   * @param autoColor 默认true 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调
+   * @param lineColor auth_color 为 false 时生效,使用 rgb 设置颜色 例如 {"r":"xxx","g":"xxx","b":"xxx"}
+   * @return
+   * @throws WxErrorException
+   */
+  File createWxCodeLimit(String scene,String page,int width,boolean autoColor,LineColor lineColor) throws WxErrorException;
+
+  File createWxCodeLimit(String scene,String page) throws WxErrorException;
 }
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java
index 70a4e50445..6516857a99 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java
@@ -27,12 +27,14 @@ public boolean sendKefuMsg(WxMaKefuMessage message) throws WxErrorException {
   }
 
   @Override
-  public void sendTemplateMsg(WxMaTemplateMessage templateMessage) throws WxErrorException {
+  public String sendTemplateMsg(WxMaTemplateMessage templateMessage) throws WxErrorException {
     String responseContent = this.wxMaService.post(TEMPLATE_MSG_SEND_URL, templateMessage.toJson());
     JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject();
-    if (jsonObject.get("errcode").getAsInt() != 0) {
-      throw new WxErrorException(WxError.fromJson(responseContent));
+    if (jsonObject.get("errcode").getAsInt() == 0) {
+      return jsonObject.get("errmsg").getAsString();
     }
+
+    throw new WxErrorException(WxError.fromJson(responseContent));
   }
 
 }
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImpl.java
index f0fc36af16..f9a158dadc 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImpl.java
@@ -3,6 +3,8 @@
 import cn.binarywang.wx.miniapp.api.WxMaQrcodeService;
 import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.binarywang.wx.miniapp.bean.WxMaQrcode;
+import cn.binarywang.wx.miniapp.bean.WxMaWxcode;
+import cn.binarywang.wx.miniapp.bean.WxMaWxcodeLimit;
 import cn.binarywang.wx.miniapp.util.http.QrCodeRequestExecutor;
 import me.chanjar.weixin.common.exception.WxErrorException;
 
@@ -25,4 +27,49 @@ public File createQrcode(String path, int width) throws WxErrorException {
       url, new WxMaQrcode(path, width));
   }
 
+  @Override
+  public File createQrcode(String path) throws WxErrorException {
+    return this.createQrcode(path,430);
+  }
+
+  @Override
+  public File createWxCode(String path, int width, boolean autoColor, LineColor lineColor) throws WxErrorException {
+    String url = "https://api.weixin.qq.com/wxa/getwxacode";
+    WxMaWxcode wxMaWxcode = new WxMaWxcode();
+    wxMaWxcode.setPath(path);
+    wxMaWxcode.setWidth(width);
+    wxMaWxcode.setAutoColor(autoColor);
+    wxMaWxcode.setLineColor(lineColor);
+    return this.wxMaService.execute(new QrCodeRequestExecutor(this.wxMaService.getRequestHttp()),
+      url, wxMaWxcode);
+  }
+
+  @Override
+  public File createWxCode(String path, int width) throws WxErrorException {
+    return this.createWxCode(path,width,true,null);
+  }
+
+  @Override
+  public File createWxCode(String path) throws WxErrorException {
+    return this.createWxCode(path,430,true,null);
+  }
+
+  @Override
+  public File createWxCodeLimit(String scene, String page, int width, boolean autoColor, LineColor lineColor) throws WxErrorException {
+    String url = "http://api.weixin.qq.com/wxa/getwxacodeunlimit";
+    WxMaWxcodeLimit wxMaWxcodeLimit = new WxMaWxcodeLimit();
+    wxMaWxcodeLimit.setScene(scene);
+    wxMaWxcodeLimit.setPage(page);
+    wxMaWxcodeLimit.setWidth(width);
+    wxMaWxcodeLimit.setAutoColor(autoColor);
+    wxMaWxcodeLimit.setLineColor(lineColor);
+    return this.wxMaService.execute(new QrCodeRequestExecutor(this.wxMaService.getRequestHttp()),
+      url, wxMaWxcodeLimit);
+  }
+
+  @Override
+  public File createWxCodeLimit(String scene, String page) throws WxErrorException {
+    return this.createWxCodeLimit(scene,page,430,true,null);
+  }
+
 }
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaJscode2SessionResult.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaJscode2SessionResult.java
index 4b9cc93d6b..255e404ef2 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaJscode2SessionResult.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaJscode2SessionResult.java
@@ -18,6 +18,9 @@ public class WxMaJscode2SessionResult {
   @SerializedName("openid")
   private String openid;
 
+  @SerializedName("unionid")
+  private String unionid;
+
   public String getSessionKey() {
     return sessionKey;
   }
@@ -42,6 +45,14 @@ public void setOpenid(String openid) {
     this.openid = openid;
   }
 
+  public String getUnionid() {
+    return unionid;
+  }
+
+  public void setUnionid(String unionid) {
+    this.unionid = unionid;
+  }
+
   public static WxMaJscode2SessionResult fromJson(String json) {
     return WxMaGsonBuilder.create().fromJson(json, WxMaJscode2SessionResult.class);
   }
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaQrcode.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaQrcode.java
index 83050f0619..a047d7c8b1 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaQrcode.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaQrcode.java
@@ -7,7 +7,7 @@
 /**
  * @author Binary Wang
  */
-public class WxMaQrcode implements Serializable {
+public class WxMaQrcode extends WxMaQrcodeWrapper implements Serializable {
   private static final long serialVersionUID = 5777119669111011584L;
   private String path;
   private int width = 430;
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaQrcodeWrapper.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaQrcodeWrapper.java
new file mode 100644
index 0000000000..37c5c5db88
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaQrcodeWrapper.java
@@ -0,0 +1,16 @@
+package cn.binarywang.wx.miniapp.bean;
+
+import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
+
+/**
+ * 微信二维码(小程序码)包装器
+ * Created by Element on 2017/7/27.
+ */
+public abstract class WxMaQrcodeWrapper {
+
+  @Override
+  public String toString() {
+    return WxMaGsonBuilder.create().toJson(this);
+  }
+
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcode.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcode.java
new file mode 100644
index 0000000000..53fb8512de
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcode.java
@@ -0,0 +1,64 @@
+package cn.binarywang.wx.miniapp.bean;
+
+import cn.binarywang.wx.miniapp.api.WxMaQrcodeService;
+import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
+import com.google.gson.annotations.SerializedName;
+
+import java.io.Serializable;
+
+/**
+ * Created by Element on 2017/7/27.
+ */
+public class WxMaWxcode extends WxMaQrcodeWrapper implements Serializable {
+
+  private static final long serialVersionUID = 1287399621649210322L;
+  private String path;
+  private int width = 430;
+
+  @SerializedName("auto_color")
+  private boolean autoColor = true;
+
+  @SerializedName("line_color")
+  private WxMaQrcodeService.LineColor lineColor = new WxMaQrcodeService.LineColor("0","0","0");
+
+  public static WxMaWxcode fromJson(String json) {
+    return WxMaGsonBuilder.create().fromJson(json, WxMaWxcode.class);
+  }
+
+  public static long getSerialVersionUID() {
+    return serialVersionUID;
+  }
+
+  public String getPath() {
+    return path;
+  }
+
+  public void setPath(String path) {
+    this.path = path;
+  }
+
+  public int getWidth() {
+    return width;
+  }
+
+  public void setWidth(int width) {
+    this.width = width;
+  }
+
+  public boolean isAutoColor() {
+    return autoColor;
+  }
+
+  public void setAutoColor(boolean autoColor) {
+    this.autoColor = autoColor;
+  }
+
+  public WxMaQrcodeService.LineColor getLineColor() {
+    return lineColor;
+  }
+
+  public void setLineColor(WxMaQrcodeService.LineColor lineColor) {
+    this.lineColor = lineColor;
+  }
+
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcodeLimit.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcodeLimit.java
new file mode 100644
index 0000000000..c3cffcfd35
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcodeLimit.java
@@ -0,0 +1,68 @@
+package cn.binarywang.wx.miniapp.bean;
+
+import cn.binarywang.wx.miniapp.api.WxMaQrcodeService;
+import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
+import com.google.gson.annotations.SerializedName;
+
+import java.io.Serializable;
+
+/**
+ * Created by Element on 2017/7/27.
+ */
+public class WxMaWxcodeLimit extends WxMaQrcodeWrapper implements Serializable{
+  private static final long serialVersionUID = 4782193774524960401L;
+  private String scene;
+  private String page;
+
+  private int width = 430;
+
+  @SerializedName("auto_color")
+  private boolean autoColor = true;
+
+  @SerializedName("line_color")
+  private WxMaQrcodeService.LineColor lineColor = new WxMaQrcodeService.LineColor("0","0","0");
+
+  public String getPage() {
+    return page;
+  }
+
+  public void setPage(String page) {
+    this.page = page;
+  }
+
+  public static WxMaWxcodeLimit fromJson(String json) {
+    return WxMaGsonBuilder.create().fromJson(json, WxMaWxcodeLimit.class);
+  }
+
+  public String getScene() {
+    return scene;
+  }
+
+  public void setScene(String scene) {
+    this.scene = scene;
+  }
+
+  public int getWidth() {
+    return width;
+  }
+
+  public void setWidth(int width) {
+    this.width = width;
+  }
+
+  public boolean isAutoColor() {
+    return autoColor;
+  }
+
+  public void setAutoColor(boolean autoColor) {
+    this.autoColor = autoColor;
+  }
+
+  public WxMaQrcodeService.LineColor getLineColor() {
+    return lineColor;
+  }
+
+  public void setLineColor(WxMaQrcodeService.LineColor lineColor) {
+    this.lineColor = lineColor;
+  }
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/http/QrCodeRequestExecutor.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/http/QrCodeRequestExecutor.java
index 7883ffda9b..dc482dff25 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/http/QrCodeRequestExecutor.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/http/QrCodeRequestExecutor.java
@@ -1,6 +1,6 @@
 package cn.binarywang.wx.miniapp.util.http;
 
-import cn.binarywang.wx.miniapp.bean.WxMaQrcode;
+import cn.binarywang.wx.miniapp.bean.WxMaQrcodeWrapper;
 import me.chanjar.weixin.common.bean.result.WxError;
 import me.chanjar.weixin.common.exception.WxErrorException;
 import me.chanjar.weixin.common.util.fs.FileUtils;
@@ -25,7 +25,7 @@
 /**
  * @author Binary Wang
  */
-public class QrCodeRequestExecutor implements RequestExecutor {
+public class QrCodeRequestExecutor implements RequestExecutor {
   protected RequestHttp requestHttp;
 
   public QrCodeRequestExecutor(RequestHttp requestHttp) {
@@ -33,7 +33,7 @@ public QrCodeRequestExecutor(RequestHttp requestHttp) {
   }
 
   @Override
-  public File execute(String uri, WxMaQrcode ticket) throws WxErrorException, IOException {
+  public File execute(String uri, WxMaQrcodeWrapper ticket) throws WxErrorException, IOException {
     HttpPost httpPost = new HttpPost(uri);
     if (requestHttp.getRequestHttpProxy() != null) {
       httpPost
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/json/WxMaKefuMessageGsonAdapter.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/json/WxMaKefuMessageGsonAdapter.java
index 33c46d63cd..829469f872 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/json/WxMaKefuMessageGsonAdapter.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/json/WxMaKefuMessageGsonAdapter.java
@@ -14,7 +14,6 @@
 import com.google.gson.JsonObject;
 import com.google.gson.JsonSerializationContext;
 import com.google.gson.JsonSerializer;
-import org.apache.commons.lang3.StringUtils;
 
 import java.lang.reflect.Type;
 
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImplTest.java
index 9604a25691..37e3608bff 100644
--- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImplTest.java
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImplTest.java
@@ -9,7 +9,8 @@
 import com.google.inject.Inject;
 import me.chanjar.weixin.common.api.WxConsts;
 import me.chanjar.weixin.common.exception.WxErrorException;
-import org.testng.annotations.*;
+import org.testng.annotations.Guice;
+import org.testng.annotations.Test;
 
 import java.text.SimpleDateFormat;
 import java.util.Date;
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImplTest.java
index 48dad9362a..52ec9ef152 100644
--- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImplTest.java
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImplTest.java
@@ -23,4 +23,16 @@ public void testCreateQrCode() throws Exception {
     System.out.println(qrCode);
   }
 
+  @Test
+  public void testCreateWxCode() throws Exception{
+    final File wxCode = this.wxService.getQrcodeService().createWxCode("111", 122);
+    System.out.println(wxCode);
+  }
+
+  @Test
+  public void testCreateWxCodeLimit() throws Exception{
+    final File wxCode = this.wxService.getQrcodeService().createWxCodeLimit("111",null);
+    System.out.println(wxCode);
+  }
+
 }
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaMessageTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaMessageTest.java
index 881091a1df..cdf989a6af 100644
--- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaMessageTest.java
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/bean/WxMaMessageTest.java
@@ -1,6 +1,5 @@
 package cn.binarywang.wx.miniapp.bean;
 
-import cn.binarywang.wx.miniapp.bean.WxMaMessage;
 import me.chanjar.weixin.common.api.WxConsts;
 import org.testng.annotations.Test;
 
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/demo/WxMaDemoServer.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/demo/WxMaDemoServer.java
index fe986c8e71..f6dcbae27b 100644
--- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/demo/WxMaDemoServer.java
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/demo/WxMaDemoServer.java
@@ -2,8 +2,8 @@
 
 import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
-import cn.binarywang.wx.miniapp.bean.WxMaMessage;
 import cn.binarywang.wx.miniapp.bean.WxMaKefuMessage;
+import cn.binarywang.wx.miniapp.bean.WxMaMessage;
 import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage;
 import cn.binarywang.wx.miniapp.config.WxMaConfig;
 import cn.binarywang.wx.miniapp.constant.WxMaConstants;
@@ -69,7 +69,7 @@ public void handle(WxMaMessage wxMessage, Map context,
       }
     }
   };
-  
+
   private static final WxMaMessageHandler qrcodeHandler = new WxMaMessageHandler() {
     @Override
     public void handle(WxMaMessage wxMessage, Map context,

From 328d753d0f5bd08c42617d31efa89fd2597073cd Mon Sep 17 00:00:00 2001
From: Element 
Date: Thu, 27 Jul 2017 15:23:07 +0800
Subject: [PATCH 2/4] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=B0=8F=E7=A8=8B?=
 =?UTF-8?q?=E5=BA=8F=E4=BA=8C=E7=BB=B4=E7=A0=81=EF=BC=88=E5=B0=8F=E7=A8=8B?=
 =?UTF-8?q?=E5=BA=8F=E7=A0=81=EF=BC=89=E6=8E=A5=E5=8F=A3=20=E4=BF=AE?=
 =?UTF-8?q?=E5=A4=8D=E5=B0=8F=E7=A8=8B=E5=BA=8F=E6=A8=A1=E6=9D=BF=E6=8E=A8?=
 =?UTF-8?q?=E9=80=81=E8=AF=BB=E5=8F=96=E9=94=99=E8=AF=AF=E5=AD=97=E6=AE=B5?=
 =?UTF-8?q?=E5=AF=BC=E8=87=B4=E7=9A=84NullPoint?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../main/java/me/chanjar/weixin/common/util/fs/FileUtils.java  | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/fs/FileUtils.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/fs/FileUtils.java
index df031b3371..535b3284a9 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/fs/FileUtils.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/fs/FileUtils.java
@@ -24,7 +24,7 @@ public static File createTmpFile(InputStream inputStream, String name, String ex
       tmpFile = File.createTempFile(name, '.' + ext, tmpDirFile);
     }
 
-    tmpFile.deleteOnExit();
+//    tmpFile.deleteOnExit();
 
     try (FileOutputStream fos = new FileOutputStream(tmpFile)) {
       int read = 0;
@@ -34,6 +34,7 @@ public static File createTmpFile(InputStream inputStream, String name, String ex
       }
 
       fos.flush();
+      fos.close();
       return tmpFile;
     }
   }

From 9aef1b63c63e5a49fc64d13a78cf385ea3172a4e Mon Sep 17 00:00:00 2001
From: Element 
Date: Thu, 27 Jul 2017 15:34:07 +0800
Subject: [PATCH 3/4] =?UTF-8?q?=E6=9B=B4=E6=AD=A3WxMaMsgService=E6=8E=A5?=
 =?UTF-8?q?=E5=8F=A3=E9=80=BB=E8=BE=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../java/cn/binarywang/wx/miniapp/api/WxMaMsgService.java | 2 +-
 .../wx/miniapp/api/impl/WxMaMsgServiceImpl.java           | 8 +++-----
 2 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMsgService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMsgService.java
index 46f5af5a89..65522f4b75 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMsgService.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaMsgService.java
@@ -31,5 +31,5 @@ public interface WxMaMsgService {
    * 接口url格式:https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN
    * 
*/ - String sendTemplateMsg(WxMaTemplateMessage templateMessage) throws WxErrorException; + void sendTemplateMsg(WxMaTemplateMessage templateMessage) throws WxErrorException; } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java index 6516857a99..70a4e50445 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaMsgServiceImpl.java @@ -27,14 +27,12 @@ public boolean sendKefuMsg(WxMaKefuMessage message) throws WxErrorException { } @Override - public String sendTemplateMsg(WxMaTemplateMessage templateMessage) throws WxErrorException { + public void sendTemplateMsg(WxMaTemplateMessage templateMessage) throws WxErrorException { String responseContent = this.wxMaService.post(TEMPLATE_MSG_SEND_URL, templateMessage.toJson()); JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject(); - if (jsonObject.get("errcode").getAsInt() == 0) { - return jsonObject.get("errmsg").getAsString(); + if (jsonObject.get("errcode").getAsInt() != 0) { + throw new WxErrorException(WxError.fromJson(responseContent)); } - - throw new WxErrorException(WxError.fromJson(responseContent)); } } From 2b1ce0929f88affa0cfb7be101218a9f2b8e477b Mon Sep 17 00:00:00 2001 From: Element Date: Thu, 27 Jul 2017 15:41:58 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BD=BF=E7=94=A8IDEA=E5=AF=B9miniapp?= =?UTF-8?q?=E5=81=9A=E4=BA=86=E6=89=B9=E9=87=8F=E6=A0=BC=E5=BC=8F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../weixin/common/util/fs/FileUtils.java | 1 - .../wx/miniapp/api/WxMaQrcodeService.java | 91 ++++++++++--------- .../api/impl/WxMaQrcodeServiceImpl.java | 8 +- .../bean/WxMaJscode2SessionResult.java | 8 +- .../wx/miniapp/bean/WxMaWxcode.java | 2 +- .../wx/miniapp/bean/WxMaWxcodeLimit.java | 12 +-- .../wx/miniapp/builder/ImageBuilder.java | 2 +- .../message/WxMaMessageInterceptor.java | 2 +- .../api/impl/WxMaQrcodeServiceImplTest.java | 6 +- 9 files changed, 66 insertions(+), 66 deletions(-) diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/fs/FileUtils.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/fs/FileUtils.java index 535b3284a9..37ee5ebe4b 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/fs/FileUtils.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/fs/FileUtils.java @@ -34,7 +34,6 @@ public static File createTmpFile(InputStream inputStream, String name, String ex } fos.flush(); - fos.close(); return tmpFile; } } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaQrcodeService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaQrcodeService.java index 539e4c2f84..c2222bc93e 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaQrcodeService.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaQrcodeService.java @@ -17,45 +17,6 @@ */ public interface WxMaQrcodeService { - /** - * lineColor 包装类 - * 用于描述二维码(小程序码)颜色(RGB参数值),详情请查看文档 - */ - public static class LineColor { - - private String r = "0", g = "0", b = "0"; - - public LineColor(String r, String g, String b) { - this.r = r; - this.g = g; - this.b = b; - } - - public String getR() { - return r; - } - - public void setR(String r) { - this.r = r; - } - - public String getG() { - return g; - } - - public void setG(String g) { - this.g = g; - } - - public String getB() { - return b; - } - - public void setB(String b) { - this.b = b; - } - } - /** * 接口C *
@@ -93,20 +54,60 @@ public void setB(String b) {
   /**
    * 接口B
    * 获取小程序码(永久有效、数量暂无限制)
-   *
+   * 

* 通过该接口生成的小程序码,永久有效,数量暂无限制。 * 用户扫描该码进入小程序后,将统一打开首页,开发者需在对应页面根据获取的码中 scene 字段的值,再做处理逻辑。 * 使用如下代码可以获取到二维码中的 scene 字段的值。 * 调试阶段可以使用开发工具的条件编译自定义参数 scene=xxxx 进行模拟,开发工具模拟时的 scene 的参数值需要进行 urlencode - * @param scene 最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式) - * @param page 必须是已经发布的小程序页面,例如 "pages/index/index" ,如果不填写这个字段,默认跳主页面 - * @param width 默认false 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调 + * + * @param scene 最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式) + * @param page 必须是已经发布的小程序页面,例如 "pages/index/index" ,如果不填写这个字段,默认跳主页面 + * @param width 默认false 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调 * @param autoColor 默认true 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调 * @param lineColor auth_color 为 false 时生效,使用 rgb 设置颜色 例如 {"r":"xxx","g":"xxx","b":"xxx"} * @return * @throws WxErrorException */ - File createWxCodeLimit(String scene,String page,int width,boolean autoColor,LineColor lineColor) throws WxErrorException; + File createWxCodeLimit(String scene, String page, int width, boolean autoColor, LineColor lineColor) throws WxErrorException; + + File createWxCodeLimit(String scene, String page) throws WxErrorException; + + /** + * lineColor 包装类 + * 用于描述二维码(小程序码)颜色(RGB参数值),详情请查看文档 + */ + public static class LineColor { + + private String r = "0", g = "0", b = "0"; + + public LineColor(String r, String g, String b) { + this.r = r; + this.g = g; + this.b = b; + } + + public String getR() { + return r; + } - File createWxCodeLimit(String scene,String page) throws WxErrorException; + public void setR(String r) { + this.r = r; + } + + public String getG() { + return g; + } + + public void setG(String g) { + this.g = g; + } + + public String getB() { + return b; + } + + public void setB(String b) { + this.b = b; + } + } } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImpl.java index f9a158dadc..fd58855b3d 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImpl.java @@ -29,7 +29,7 @@ public File createQrcode(String path, int width) throws WxErrorException { @Override public File createQrcode(String path) throws WxErrorException { - return this.createQrcode(path,430); + return this.createQrcode(path, 430); } @Override @@ -46,12 +46,12 @@ public File createWxCode(String path, int width, boolean autoColor, LineColor li @Override public File createWxCode(String path, int width) throws WxErrorException { - return this.createWxCode(path,width,true,null); + return this.createWxCode(path, width, true, null); } @Override public File createWxCode(String path) throws WxErrorException { - return this.createWxCode(path,430,true,null); + return this.createWxCode(path, 430, true, null); } @Override @@ -69,7 +69,7 @@ public File createWxCodeLimit(String scene, String page, int width, boolean auto @Override public File createWxCodeLimit(String scene, String page) throws WxErrorException { - return this.createWxCodeLimit(scene,page,430,true,null); + return this.createWxCodeLimit(scene, page, 430, true, null); } } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaJscode2SessionResult.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaJscode2SessionResult.java index 255e404ef2..471e6c46ec 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaJscode2SessionResult.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaJscode2SessionResult.java @@ -21,6 +21,10 @@ public class WxMaJscode2SessionResult { @SerializedName("unionid") private String unionid; + public static WxMaJscode2SessionResult fromJson(String json) { + return WxMaGsonBuilder.create().fromJson(json, WxMaJscode2SessionResult.class); + } + public String getSessionKey() { return sessionKey; } @@ -53,8 +57,4 @@ public void setUnionid(String unionid) { this.unionid = unionid; } - public static WxMaJscode2SessionResult fromJson(String json) { - return WxMaGsonBuilder.create().fromJson(json, WxMaJscode2SessionResult.class); - } - } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcode.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcode.java index 53fb8512de..9ea674ed98 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcode.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcode.java @@ -19,7 +19,7 @@ public class WxMaWxcode extends WxMaQrcodeWrapper implements Serializable { private boolean autoColor = true; @SerializedName("line_color") - private WxMaQrcodeService.LineColor lineColor = new WxMaQrcodeService.LineColor("0","0","0"); + private WxMaQrcodeService.LineColor lineColor = new WxMaQrcodeService.LineColor("0", "0", "0"); public static WxMaWxcode fromJson(String json) { return WxMaGsonBuilder.create().fromJson(json, WxMaWxcode.class); diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcodeLimit.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcodeLimit.java index c3cffcfd35..7619fe46f2 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcodeLimit.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaWxcodeLimit.java @@ -9,7 +9,7 @@ /** * Created by Element on 2017/7/27. */ -public class WxMaWxcodeLimit extends WxMaQrcodeWrapper implements Serializable{ +public class WxMaWxcodeLimit extends WxMaQrcodeWrapper implements Serializable { private static final long serialVersionUID = 4782193774524960401L; private String scene; private String page; @@ -20,7 +20,11 @@ public class WxMaWxcodeLimit extends WxMaQrcodeWrapper implements Serializable{ private boolean autoColor = true; @SerializedName("line_color") - private WxMaQrcodeService.LineColor lineColor = new WxMaQrcodeService.LineColor("0","0","0"); + private WxMaQrcodeService.LineColor lineColor = new WxMaQrcodeService.LineColor("0", "0", "0"); + + public static WxMaWxcodeLimit fromJson(String json) { + return WxMaGsonBuilder.create().fromJson(json, WxMaWxcodeLimit.class); + } public String getPage() { return page; @@ -30,10 +34,6 @@ public void setPage(String page) { this.page = page; } - public static WxMaWxcodeLimit fromJson(String json) { - return WxMaGsonBuilder.create().fromJson(json, WxMaWxcodeLimit.class); - } - public String getScene() { return scene; } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/builder/ImageBuilder.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/builder/ImageBuilder.java index 219e3fd43b..a903e97c43 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/builder/ImageBuilder.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/builder/ImageBuilder.java @@ -10,7 +10,7 @@ public final class ImageBuilder extends BaseBuilder { private String mediaId; public ImageBuilder() { - this.msgType = WxMaConstants.KefuMsgType.IMAGE; + this.msgType = WxMaConstants.KefuMsgType.IMAGE; } public ImageBuilder mediaId(String media_id) { diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/message/WxMaMessageInterceptor.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/message/WxMaMessageInterceptor.java index 1b220a0baa..3443862fe1 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/message/WxMaMessageInterceptor.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/message/WxMaMessageInterceptor.java @@ -17,7 +17,7 @@ public interface WxMaMessageInterceptor { /** * 拦截微信消息 * - * @param context 上下文,如果handler或interceptor之间有信息要传递,可以用这个 + * @param context 上下文,如果handler或interceptor之间有信息要传递,可以用这个 * @return true代表OK,false代表不OK */ boolean intercept(WxMaMessage wxMessage, diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImplTest.java index 52ec9ef152..eba65f7c34 100644 --- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImplTest.java +++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaQrcodeServiceImplTest.java @@ -24,14 +24,14 @@ public void testCreateQrCode() throws Exception { } @Test - public void testCreateWxCode() throws Exception{ + public void testCreateWxCode() throws Exception { final File wxCode = this.wxService.getQrcodeService().createWxCode("111", 122); System.out.println(wxCode); } @Test - public void testCreateWxCodeLimit() throws Exception{ - final File wxCode = this.wxService.getQrcodeService().createWxCodeLimit("111",null); + public void testCreateWxCodeLimit() throws Exception { + final File wxCode = this.wxService.getQrcodeService().createWxCodeLimit("111", null); System.out.println(wxCode); }