Przeglądaj źródła

完善微信智能硬件接口

larry.liu 6 lat temu
rodzic
commit
c4a361bbf6
5 zmienionych plików z 198 dodań i 60 usunięć
  1. 36 9
      device/definitions.go
  2. 60 0
      device/bind.go
  3. 20 51
      device/device.go
  4. 9 0
      device/message.go
  5. 73 0
      device/qrcode.go

+ 36 - 9
device/definitions.go

@@ -1,6 +1,10 @@
 package device
 
-import "github.com/silenceper/wechat/util"
+import (
+	"encoding/json"
+	"fmt"
+	"github.com/silenceper/wechat/util"
+)
 
 const (
 	//添加设备标识
@@ -76,12 +80,35 @@ type resDeviceAuthorize struct {
 	Resp []resBaseInfo `json:"resp"`
 }
 
-type resCreateQRCode struct {
-	util.CommonError
-	DeviceNum int         `json:"device_num"`
-	CodeList  []resQRCode `json:"code_list"`
-}
-type resQRCode struct {
-	DeviceId string `json:"device_id"`
-	Ticket   string `json:"ticket"`
+// DeviceAuthorize 设备授权
+func (d *Device) DeviceAuthorize(devices []ReqDevice, opType int, productId string) (res []resBaseInfo, err error) {
+	var accessToken string
+	accessToken, err = d.GetAccessToken()
+	if err != nil {
+		return
+	}
+
+	uri := fmt.Sprintf("%s?access_token=%s", uriAuthorize, accessToken)
+	req := reqDeviceAuthorize{
+		DeviceNum:  fmt.Sprintf("%d", len(devices)),
+		DeviceList: devices,
+		OpType:     fmt.Sprintf("%d", opType),
+		ProductId:  productId,
+	}
+	var response []byte
+	response, err = util.PostJSON(uri, req)
+	if err != nil {
+		return nil, err
+	}
+	var result resDeviceAuthorize
+	err = json.Unmarshal(response, &result)
+	if err != nil {
+		return
+	}
+	if result.ErrCode != 0 {
+		err = fmt.Errorf("DeviceAuthorize Error , errcode=%d , errmsg=%s", result.ErrCode, result.ErrMsg)
+		return
+	}
+	res = result.Resp
+	return
 }

+ 60 - 0
device/bind.go

@@ -0,0 +1,60 @@
+package device
+
+import (
+	"encoding/json"
+	"fmt"
+	"github.com/silenceper/wechat/util"
+)
+
+type ReqBind struct {
+	Ticket   string `json:"ticket"`
+	DeviceId string `json:"device_id"`
+	OpenId   string `json:"open_id"`
+}
+type resBind struct {
+	BaseResp util.CommonError `json:"base_resp"`
+}
+
+// Bind 设备绑定
+func (d *Device) Bind(req ReqBind) (err error) {
+	var accessToken string
+	if accessToken, err = d.GetAccessToken(); err != nil {
+		return
+	}
+	uri := fmt.Sprintf("%s?access_token=%s", uriBind, accessToken)
+	var response []byte
+	if response, err = util.PostJSON(uri, req); err != nil {
+		return
+	}
+	var result resBind
+	if err = json.Unmarshal(response, result); err != nil {
+		return
+	}
+	if result.BaseResp.ErrCode != 0 {
+		err = fmt.Errorf("DeviceBind Error , errcode=%d , errmsg=%s", result.BaseResp.ErrCode, result.BaseResp.ErrMsg)
+		return
+	}
+	return
+}
+
+// Bind 设备解绑
+func (d *Device) Unbind(req ReqBind) (err error) {
+	var accessToken string
+	if accessToken, err = d.GetAccessToken(); err != nil {
+		return
+	}
+	uri := fmt.Sprintf("%s?access_token=%s", uriUnbind, accessToken)
+	var response []byte
+	if response, err = util.PostJSON(uri, req); err != nil {
+		return
+	}
+	var result resBind
+	if err = json.Unmarshal(response, result); err != nil {
+		return
+	}
+	if result.BaseResp.ErrCode != 0 {
+		err = fmt.Errorf("DeviceBind Error , errcode=%d , errmsg=%s", result.BaseResp.ErrCode, result.BaseResp.ErrMsg)
+		return
+	}
+	return
+}

+ 20 - 51
device/device.go

@@ -8,8 +8,12 @@ import (
 )
 
 const (
-	deviceAuthorize = "https://api.weixin.qq.com/device/authorize_device"
-	deviceQRCode    = "https://api.weixin.qq.com/device/create_qrcode"
+	uriAuthorize    = "https://api.weixin.qq.com/device/authorize_device"
+	uriQRCode       = "https://api.weixin.qq.com/device/create_qrcode"
+	uriVerifyQRCode = "https://api.weixin.qq.com/device/verify_qrcode"
+	uriBind         = "https://api.weixin.qq.com/device/bind"
+	uriUnbind       = "https://api.weixin.qq.com/device/unbind"
+	uriState        = "https://api.weixin.qq.com/device/get_stat"
 )
 
 //Device struct
@@ -24,64 +28,29 @@ func NewDevice(context *context.Context) *Device {
 	return device
 }
 
-// DeviceAuthorize 设备授权
-func (d *Device) DeviceAuthorize(devices []ReqDevice, opType int, productId string) (res []resBaseInfo, err error) {
-	var accessToken string
-	accessToken, err = d.GetAccessToken()
-	if err != nil {
-		return nil, err
-	}
-
-	uri := fmt.Sprintf("%s?access_token=%s", deviceAuthorize, accessToken)
-	req := reqDeviceAuthorize{
-		DeviceNum:  fmt.Sprintf("%d", len(devices)),
-		DeviceList: devices,
-		OpType:     fmt.Sprintf("%d", opType),
-		ProductId:  productId,
-	}
-	response, err := util.PostJSON(uri, req)
-	if err != nil {
-		return nil, err
-	}
-	var result resDeviceAuthorize
-	err = json.Unmarshal(response, &result)
-	if err != nil {
-		return
-	}
-	if result.ErrCode != 0 {
-		err = fmt.Errorf("DeviceAuthorize Error , errcode=%d , errmsg=%s", result.ErrCode, result.ErrMsg)
-		return
-	}
-	res = result.Resp
-	return
+type resDeviceState struct {
+	util.CommonError
+	Status     int    `json:"status"`
+	StatusInfo string `json:"status_info"`
 }
 
-// CreateQRCode 获取设备二维码
-func (d *Device) CreateQRCode(devices []string) (res []resQRCode, err error) {
+// State 设备状态查询
+func (d *Device) State(deviceId string) (res resDeviceState, err error) {
 	var accessToken string
-	accessToken, err = d.GetAccessToken()
-	if err != nil {
-		return nil, err
-	}
-	uri := fmt.Sprintf("%s?access_token=%s", deviceQRCode, accessToken)
-	req := map[string]interface{}{
-		"device_num":     len(devices),
-		"device_id_list": devices,
+	if accessToken, err = d.GetAccessToken(); err != nil {
+		return
 	}
-	fmt.Println(req)
-	response, err := util.PostJSON(uri, req)
-	if err != nil {
+	uri := fmt.Sprintf("%s?access_token=%s&device_id=%s", uriState, accessToken, deviceId)
+	var response []byte
+	if response, err = util.HTTPGet(uri); err != nil {
 		return
 	}
-	var result resCreateQRCode
-	err = json.Unmarshal(response, &result)
-	if err != nil {
+	if err = json.Unmarshal(response, &res); err != nil {
 		return
 	}
-	if result.ErrCode != 0 {
-		err = fmt.Errorf("CreateQRCode Error , errcode=%d , errmsg=%s", result.ErrCode, result.ErrMsg)
+	if res.ErrCode != 0 {
+		err = fmt.Errorf("DeviceState Error , errcode=%d , errmsg=%s", res.ErrCode, res.ErrMsg)
 		return
 	}
-	res = result.CodeList
 	return
 }

+ 9 - 0
device/message.go

@@ -0,0 +1,9 @@
+package device
+
+// 设备消息响应
+type MsgDevice struct {
+	DeviceType string
+	DeviceID   string
+	SessionId  string
+	OpenID     string
+}

+ 73 - 0
device/qrcode.go

@@ -0,0 +1,73 @@
+package device
+
+import (
+	"encoding/json"
+	"fmt"
+	"github.com/silenceper/wechat/util"
+)
+
+type resCreateQRCode struct {
+	util.CommonError
+	DeviceNum int `json:"device_num"`
+	CodeList  []struct {
+		DeviceId string `json:"device_id"`
+		Ticket   string `json:"ticket"`
+	} `json:"code_list"`
+}
+
+// CreateQRCode 获取设备二维码
+func (d *Device) CreateQRCode(devices []string) (res resCreateQRCode, err error) {
+	var accessToken string
+	if accessToken, err = d.GetAccessToken(); err != nil {
+		return
+	}
+	uri := fmt.Sprintf("%s?access_token=%s", uriQRCode, accessToken)
+	req := map[string]interface{}{
+		"device_num":     len(devices),
+		"device_id_list": devices,
+	}
+	var response []byte
+	if response, err = util.PostJSON(uri, req); err != nil {
+		return
+	}
+	if err = json.Unmarshal(response, &res); err != nil {
+		return
+	}
+	if res.ErrCode != 0 {
+		err = fmt.Errorf("DeviceCreateQRCode Error , errcode=%d , errmsg=%s", res.ErrCode, res.ErrMsg)
+		return
+	}
+	return
+}
+
+type resVerifyQRCode struct {
+	util.CommonError
+	DeviceType string `json:"device_type"`
+	DeviceId   string `json:"device_id"`
+	Mac        string `json:"mac"`
+}
+
+// VerifyQRCode 验证设备二维码
+func (d *Device) VerifyQRCode(ticket string) (res resVerifyQRCode, err error) {
+	var accessToken string
+	if accessToken, err = d.GetAccessToken(); err != nil {
+		return
+	}
+	uri := fmt.Sprintf("%s?access_token=%s", uriVerifyQRCode, accessToken)
+	req := map[string]interface{}{
+		"ticket": ticket,
+	}
+	fmt.Println(req)
+	var response []byte
+	if response, err = util.PostJSON(uri, req); err != nil {
+		return
+	}
+	if err = json.Unmarshal(response, &res); err != nil {
+		return
+	}
+	if res.ErrCode != 0 {
+		err = fmt.Errorf("DeviceCreateQRCode Error , errcode=%d , errmsg=%s", res.ErrCode, res.ErrMsg)
+		return
+	}
+	return
+}