dongfuqiang 8 years ago
parent
commit
a7c72f613a
16 changed files with 668 additions and 0 deletions
  1. 80 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpDeviceService.java
  2. 7 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java
  3. 72 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpDeviceServiceImpl.java
  4. 6 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceImpl.java
  5. 12 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/AbstractDeviceBean.java
  6. 55 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/BaseResp.java
  7. 26 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/RespMsg.java
  8. 49 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/TransMsgResp.java
  9. 106 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/WxDevice.java
  10. 36 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/WxDeviceAuthorize.java
  11. 24 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/WxDeviceAuthorizeResult.java
  12. 34 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/WxDeviceBind.java
  13. 22 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/WxDeviceBindResult.java
  14. 50 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/WxDeviceMsg.java
  15. 49 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/WxDeviceQrCodeResult.java
  16. 40 0
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpDeviceServiceImplTest.java

+ 80 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpDeviceService.java

@@ -0,0 +1,80 @@
+package me.chanjar.weixin.mp.api;
+
+import me.chanjar.weixin.common.exception.WxErrorException;
+import me.chanjar.weixin.mp.bean.device.*;
+
+/**
+ * Created by keungtung on 10/12/2016.
+ */
+public interface WxMpDeviceService {
+  /**
+   * <pre>
+   * 主动发送消息给设备
+   * 详情请见:http://iot.weixin.qq.com/wiki/new/index.html?page=3-4-3
+   * </pre>
+   */
+  TransMsgResp transMsg(WxDeviceMsg msg) throws WxErrorException;
+
+  /**
+   * <pre>
+   *   获取一组新的deviceid和设备二维码
+   *   详情请见:http://iot.weixin.qq.com/wiki/new/index.html?page=3-4-6
+   * </pre>
+   * @param productId 产品id
+   * @return 返回WxDeviceQrCodeResult
+   */
+  WxDeviceQrCodeResult getQrCode(String productId) throws WxErrorException;
+
+  /**
+   * <pre>
+   *   将device id及其属性信息提交公众平台进行授权
+   *   详情请见:http://iot.weixin.qq.com/wiki/new/index.html?page=3-4-6
+   * </pre>
+   * @param wxDeviceAuthorize 授权请求对象
+   * @return WxDeviceAuthorizeResult
+   */
+  WxDeviceAuthorizeResult authorize(WxDeviceAuthorize wxDeviceAuthorize) throws WxErrorException;
+
+
+  /**
+   * <pre>
+   *   第三方后台绑定成功后,通知公众平台
+   *   详情请见:http://iot.weixin.qq.com/wiki/new/index.html/page=3-4-7
+   * </pre>
+   * @param wxDeviceBind 绑定请求对象
+   * @return WxDeviceBindResult
+   */
+  WxDeviceBindResult bind(WxDeviceBind wxDeviceBind) throws WxErrorException;
+
+  /**
+   * <pre>
+   *   强制绑定用户和设备
+   *   详情请见:http://iot.weixin.qq.com/wiki/new/index.html?page=3-4-7
+   * </pre>
+   * @param wxDeviceBind 强制绑定请求对象
+   * @return WxDeviceBindResult
+   */
+  WxDeviceBindResult compelBind(WxDeviceBind wxDeviceBind) throws WxErrorException;
+
+  /**
+   * <pre>
+   *   第三方确认用户和设备的解绑操作
+   *   详情请见:http://iot.weixin.qq.com/wiki/new/index.html/page=3-4-7
+   * </pre>
+   * @param wxDeviceBind 绑定请求对象
+   * @return WxDeviceBidResult
+   */
+  WxDeviceBindResult unbind(WxDeviceBind wxDeviceBind) throws WxErrorException;
+
+  /**
+   * <pre>
+   *   强制解绑用户和设备
+   *   详情请见:http://iot.weixin.qq.com/wiki/new/index.html?page=3-4-7
+   * </pre>
+   * @param wxDeviceBind 强制解绑请求对象
+   * @return WxDeviceBindResult
+   */
+  WxDeviceBindResult compelUnbind(WxDeviceBind wxDeviceBind) throws WxErrorException;
+
+
+}

+ 7 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java

@@ -345,4 +345,11 @@ public interface WxMpService {
    * @return WxMpTemplateMsgService
    */
   WxMpTemplateMsgService getTemplateMsgService();
+
+  /**
+   * 返回硬件平台相关接口方法的实现类对象,以方便调用其各个接口
+   *
+   * @return WxMpDeviceService
+   */
+  WxMpDeviceService getDeviceService();
 }

+ 72 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpDeviceServiceImpl.java

@@ -0,0 +1,72 @@
+package me.chanjar.weixin.mp.api.impl;
+
+import me.chanjar.weixin.common.exception.WxErrorException;
+import me.chanjar.weixin.mp.api.WxMpDeviceService;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.bean.device.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Created by keungtung on 10/12/2016.
+ */
+public class WxMpDeviceServiceImpl implements WxMpDeviceService {
+  private static final String API_URL_PREFIX = "https://api.weixin.qq.com/device";
+  private static Logger log = LoggerFactory.getLogger(WxMpMenuServiceImpl.class);
+
+  private WxMpService wxMpService;
+
+  WxMpDeviceServiceImpl(WxMpService wxMpService) {
+    this.wxMpService = wxMpService;
+  }
+
+  @Override
+  public TransMsgResp transMsg(WxDeviceMsg msg) throws WxErrorException {
+    String url = API_URL_PREFIX + "/transmsg";
+    String response = this.wxMpService.post(url,msg.toJson());
+    return TransMsgResp.fromJson(response);
+  }
+
+  @Override
+  public WxDeviceQrCodeResult getQrCode(String productId) throws WxErrorException {
+    String url = API_URL_PREFIX + "/getqrcode";
+    String response = this.wxMpService.get(url, "product_id=" + productId);
+    return WxDeviceQrCodeResult.fromJson(response);
+  }
+
+  @Override
+  public WxDeviceAuthorizeResult authorize(WxDeviceAuthorize wxDeviceAuthorize) throws WxErrorException {
+    String url = API_URL_PREFIX + "/authorize_device";
+    String response = this.wxMpService.post(url,wxDeviceAuthorize.toJson());
+    return WxDeviceAuthorizeResult.fromJson(response);
+  }
+
+  @Override
+  public WxDeviceBindResult bind(WxDeviceBind wxDeviceBind) throws WxErrorException {
+    String url = API_URL_PREFIX + "/bind";
+    String response = this.wxMpService.post(url,wxDeviceBind.toJson());
+    return WxDeviceBindResult.fromJson(response);
+  }
+
+  @Override
+  public WxDeviceBindResult compelBind(WxDeviceBind wxDeviceBind) throws WxErrorException {
+    String url = API_URL_PREFIX + "/compel_bind";
+    String response = this.wxMpService.post(url,wxDeviceBind.toJson());
+    return WxDeviceBindResult.fromJson(response);
+  }
+
+  @Override
+  public WxDeviceBindResult unbind(WxDeviceBind wxDeviceBind) throws WxErrorException {
+    String url = API_URL_PREFIX + "/unbind?";
+    String response = this.wxMpService.post(url, wxDeviceBind.toJson());
+    return WxDeviceBindResult.fromJson(response);
+  }
+
+  @Override
+  public WxDeviceBindResult compelUnbind(WxDeviceBind wxDeviceBind) throws WxErrorException {
+    String url = API_URL_PREFIX + "/compel_unbind?";
+    String response = this.wxMpService.post(url, wxDeviceBind.toJson());
+    return WxDeviceBindResult.fromJson(response);
+  }
+}
+

+ 6 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceImpl.java

@@ -62,6 +62,8 @@ public class WxMpServiceImpl implements WxMpService {
 
   private WxMpTemplateMsgService templateMsgService = new WxMpTemplateMsgServiceImpl(this);
 
+  private WxMpDeviceService deviceService = new WxMpDeviceServiceImpl(this);
+
   private CloseableHttpClient httpClient;
 
   private HttpHost httpProxy;
@@ -540,4 +542,8 @@ public class WxMpServiceImpl implements WxMpService {
     return this.templateMsgService;
   }
 
+  @Override
+  public WxMpDeviceService getDeviceService() {
+    return this.deviceService;
+  }
 }

+ 12 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/AbstractDeviceBean.java

@@ -0,0 +1,12 @@
+package me.chanjar.weixin.mp.bean.device;
+
+import me.chanjar.weixin.common.util.json.WxGsonBuilder;
+
+/**
+ * Created by keungtung on 14/12/2016.
+ */
+public abstract class AbstractDeviceBean {
+  public String toJson() {
+    return WxGsonBuilder.create().toJson(this);
+  }
+}

+ 55 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/BaseResp.java

@@ -0,0 +1,55 @@
+package me.chanjar.weixin.mp.bean.device;
+
+/**
+ * Created by keungtung on 10/12/2016.
+ */
+public class BaseResp extends AbstractDeviceBean{
+  private BaseInfo base_info;
+  private Integer errcode;
+  private String errmsg;
+
+  public Integer getErrcode() {
+    return errcode;
+  }
+
+  public void setErrcode(Integer errcode) {
+    this.errcode = errcode;
+  }
+
+  public BaseInfo getBase_info() {
+    return base_info;
+  }
+
+  public void setBase_info(BaseInfo base_info) {
+    this.base_info = base_info;
+  }
+
+  public String getErrmsg() {
+    return errmsg;
+  }
+
+  public void setErrmsg(String errmsg) {
+    this.errmsg = errmsg;
+  }
+
+  private class BaseInfo {
+    private String device_type;
+    private String device_id;
+
+    public String getDevice_type() {
+      return device_type;
+    }
+
+    public void setDevice_type(String device_type) {
+      this.device_type = device_type;
+    }
+
+    public String getDevice_id() {
+      return device_id;
+    }
+
+    public void setDevice_id(String device_id) {
+      this.device_id = device_id;
+    }
+  }
+}

+ 26 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/RespMsg.java

@@ -0,0 +1,26 @@
+package me.chanjar.weixin.mp.bean.device;
+
+/**
+ * Created by keungtung on 10/12/2016.
+ */
+
+public class RespMsg extends AbstractDeviceBean{
+  private Integer retCode;
+  private String errorInfo;
+
+  public Integer getRetCode() {
+    return retCode;
+  }
+
+  public void setRetCode(Integer retCode) {
+    this.retCode = retCode;
+  }
+
+  public String getErrorInfo() {
+    return errorInfo;
+  }
+
+  public void setErrorInfo(String errorInfo) {
+    this.errorInfo = errorInfo;
+  }
+}

+ 49 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/TransMsgResp.java

@@ -0,0 +1,49 @@
+package me.chanjar.weixin.mp.bean.device;
+
+import me.chanjar.weixin.common.util.json.WxGsonBuilder;
+
+/**
+ * Created by keungtung on 14/12/2016.
+ */
+public class TransMsgResp extends AbstractDeviceBean{
+  private Integer ret;
+  private String ret_info;
+  private Integer errcode;
+  private String errmsg;
+
+  public static TransMsgResp fromJson(String json) {
+    return WxGsonBuilder.create().fromJson(json, TransMsgResp.class);
+  }
+
+  public Integer getRet() {
+    return ret;
+  }
+
+  public void setRet(Integer ret) {
+    this.ret = ret;
+  }
+
+  public String getRet_info() {
+    return ret_info;
+  }
+
+  public void setRet_info(String ret_info) {
+    this.ret_info = ret_info;
+  }
+
+  public Integer getErrcode() {
+    return errcode;
+  }
+
+  public void setErrcode(Integer errcode) {
+    this.errcode = errcode;
+  }
+
+  public String getErrmsg() {
+    return errmsg;
+  }
+
+  public void setErrmsg(String errmsg) {
+    this.errmsg = errmsg;
+  }
+}

+ 106 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/WxDevice.java

@@ -0,0 +1,106 @@
+package me.chanjar.weixin.mp.bean.device;
+
+/**
+ * Created by keungtung on 10/12/2016.
+ */
+public class WxDevice {
+  private String id;
+  private String mac;
+  private String connect_protocol;
+  private String auth_key;
+  private String close_strategy;
+  private String conn_strategy;
+  private String crypt_method;
+  private String auth_ver;
+  private String manu_mac_pos;
+  private String ser_mac_pos;
+  private String ble_simple_protocol;
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getMac() {
+    return mac;
+  }
+
+  public void setMac(String mac) {
+    this.mac = mac;
+  }
+
+  public String getConnect_protocol() {
+    return connect_protocol;
+  }
+
+  public void setConnect_protocol(String connect_protocol) {
+    this.connect_protocol = connect_protocol;
+  }
+
+  public String getAuth_key() {
+    return auth_key;
+  }
+
+  public void setAuth_key(String auth_key) {
+    this.auth_key = auth_key;
+  }
+
+  public String getClose_strategy() {
+    return close_strategy;
+  }
+
+  public void setClose_strategy(String close_strategy) {
+    this.close_strategy = close_strategy;
+  }
+
+  public String getConn_strategy() {
+    return conn_strategy;
+  }
+
+  public void setConn_strategy(String conn_strategy) {
+    this.conn_strategy = conn_strategy;
+  }
+
+  public String getCrypt_method() {
+    return crypt_method;
+  }
+
+  public void setCrypt_method(String crypt_method) {
+    this.crypt_method = crypt_method;
+  }
+
+  public String getAuth_ver() {
+    return auth_ver;
+  }
+
+  public void setAuth_ver(String auth_ver) {
+    this.auth_ver = auth_ver;
+  }
+
+  public String getManu_mac_pos() {
+    return manu_mac_pos;
+  }
+
+  public void setManu_mac_pos(String manu_mac_pos) {
+    this.manu_mac_pos = manu_mac_pos;
+  }
+
+  public String getSer_mac_pos() {
+    return ser_mac_pos;
+  }
+
+  public void setSer_mac_pos(String ser_mac_pos) {
+    this.ser_mac_pos = ser_mac_pos;
+  }
+
+  public String getBle_simple_protocol() {
+    return ble_simple_protocol;
+  }
+
+  public void setBle_simple_protocol(String ble_simple_protocol) {
+    this.ble_simple_protocol = ble_simple_protocol;
+  }
+}

+ 36 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/WxDeviceAuthorize.java

@@ -0,0 +1,36 @@
+package me.chanjar.weixin.mp.bean.device;
+
+import java.util.List;
+
+/**
+ * Created by keungtung on 10/12/2016.
+ */
+public class WxDeviceAuthorize extends  AbstractDeviceBean{
+  private String deivce_num;
+  private String op_type;
+  private List<WxDevice> device_list;
+
+  public String getDeivce_num() {
+    return deivce_num;
+  }
+
+  public void setDeivce_num(String deivce_num) {
+    this.deivce_num = deivce_num;
+  }
+
+  public String getOp_type() {
+    return op_type;
+  }
+
+  public void setOp_type(String op_type) {
+    this.op_type = op_type;
+  }
+
+  public List<WxDevice> getDevice_list() {
+    return device_list;
+  }
+
+  public void setDevice_list(List<WxDevice> device_list) {
+    this.device_list = device_list;
+  }
+}

+ 24 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/WxDeviceAuthorizeResult.java

@@ -0,0 +1,24 @@
+package me.chanjar.weixin.mp.bean.device;
+
+import me.chanjar.weixin.common.util.json.WxGsonBuilder;
+
+import java.util.List;
+
+/**
+ * Created by keungtung on 10/12/2016.
+ */
+public class WxDeviceAuthorizeResult extends AbstractDeviceBean{
+  private List<BaseResp> resp;
+
+  public static WxDeviceAuthorizeResult fromJson(String response) {
+    return WxGsonBuilder.create().fromJson(response, WxDeviceAuthorizeResult.class);
+  }
+
+  public List<BaseResp> getResp() {
+    return resp;
+  }
+
+  public void setResp(List<BaseResp> resp) {
+    this.resp = resp;
+  }
+}

+ 34 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/WxDeviceBind.java

@@ -0,0 +1,34 @@
+package me.chanjar.weixin.mp.bean.device;
+
+/**
+ * Created by keungtung on 10/12/2016.
+ */
+public class WxDeviceBind extends AbstractDeviceBean{
+  private String ticket;
+  private String device_id;
+  private String openid;
+
+  public String getTicket() {
+    return ticket;
+  }
+
+  public void setTicket(String ticket) {
+    this.ticket = ticket;
+  }
+
+  public String getDevice_id() {
+    return device_id;
+  }
+
+  public void setDevice_id(String device_id) {
+    this.device_id = device_id;
+  }
+
+  public String getOpenid() {
+    return openid;
+  }
+
+  public void setOpenid(String openid) {
+    this.openid = openid;
+  }
+}

+ 22 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/WxDeviceBindResult.java

@@ -0,0 +1,22 @@
+package me.chanjar.weixin.mp.bean.device;
+
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+
+/**
+ * Created by keungtung on 10/12/2016.
+ */
+public class WxDeviceBindResult extends AbstractDeviceBean{
+  private BaseResp base_resp;
+
+  public static WxDeviceBindResult fromJson(String json) {
+    return WxMpGsonBuilder.create().fromJson(json, WxDeviceBindResult.class);
+  }
+
+  public BaseResp getBase_resp() {
+    return base_resp;
+  }
+
+  public void setBase_resp(BaseResp base_resp) {
+    this.base_resp = base_resp;
+  }
+}

+ 50 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/WxDeviceMsg.java

@@ -0,0 +1,50 @@
+package me.chanjar.weixin.mp.bean.device;
+
+import me.chanjar.weixin.common.util.ToStringUtils;
+
+/**
+ * Created by keungtung on 10/12/2016.
+ */
+public class WxDeviceMsg extends AbstractDeviceBean{
+  private String deviceType;
+  private String deviceId;
+  private String openId;
+  private String content;
+
+  @Override
+  public String toString() {
+    return ToStringUtils.toSimpleString(this);
+  }
+
+  public String getDeviceType() {
+    return deviceType;
+  }
+
+  public void setDeviceType(String deviceType) {
+    this.deviceType = deviceType;
+  }
+
+  public String getDeviceId() {
+    return deviceId;
+  }
+
+  public void setDeviceId(String deviceId) {
+    this.deviceId = deviceId;
+  }
+
+  public String getOpenId() {
+    return openId;
+  }
+
+  public void setOpenId(String openId) {
+    this.openId = openId;
+  }
+
+  public String getContent() {
+    return content;
+  }
+
+  public void setContent(String content) {
+    this.content = content;
+  }
+}

+ 49 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/WxDeviceQrCodeResult.java

@@ -0,0 +1,49 @@
+package me.chanjar.weixin.mp.bean.device;
+
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+
+/**
+ * Created by keungtung on 10/12/2016.
+ */
+public class WxDeviceQrCodeResult extends AbstractDeviceBean{
+  private String deviceid;
+  private String qrticket;
+  private String devcielicence;
+  private RespMsg resp_msg;
+
+  public static WxDeviceQrCodeResult fromJson(String json) {
+    return WxMpGsonBuilder.INSTANCE.create().fromJson(json, WxDeviceQrCodeResult.class);
+  }
+
+  public String getDevcielicence() {
+    return devcielicence;
+  }
+
+  public void setDevcielicence(String devcielicence) {
+    this.devcielicence = devcielicence;
+  }
+
+  public RespMsg getResp_msg() {
+    return resp_msg;
+  }
+
+  public void setResp_msg(RespMsg resp_msg) {
+    this.resp_msg = resp_msg;
+  }
+
+  public String getDeviceid() {
+    return deviceid;
+  }
+
+  public void setDeviceid(String deviceid) {
+    this.deviceid = deviceid;
+  }
+
+  public String getQrticket() {
+    return qrticket;
+  }
+
+  public void setQrticket(String qrticket) {
+    this.qrticket = qrticket;
+  }
+}

+ 40 - 0
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpDeviceServiceImplTest.java

@@ -0,0 +1,40 @@
+package me.chanjar.weixin.mp.api.impl;
+
+
+import com.google.inject.Inject;
+import me.chanjar.weixin.common.exception.WxErrorException;
+import me.chanjar.weixin.mp.api.ApiTestModule;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.bean.device.WxDeviceQrCodeResult;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Guice;
+import org.testng.annotations.Test;
+
+/**
+ * Created by keungtung on 14/12/2016.
+ */
+@Test(groups = "deviceApi")
+@Guice(modules = ApiTestModule.class)
+public class WxMpDeviceServiceImplTest {
+  @Inject
+  protected WxMpService wxService;
+
+  @Test(dataProvider = "productId")
+  public void testGetQrcode(String productId) {
+    try {
+      WxDeviceQrCodeResult result = wxService.getDeviceService().getQrCode(productId);
+      println(result.toJson());
+    } catch (WxErrorException e) {
+      println(e.getMessage());
+    }
+  }
+
+  private void println(String content) {
+    System.out.println(content);
+  }
+
+  @DataProvider(name = "productId")
+  public Object[][] getProductId() {
+    return new Object[][]{new Object[]{"25639"}};
+  }
+}