From c4a361bbf646fe36821576624d4e447607aeeb7d Mon Sep 17 00:00:00 2001 From: "larry.liu" Date: Fri, 15 Nov 2019 14:46:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=BE=AE=E4=BF=A1=E6=99=BA?= =?UTF-8?q?=E8=83=BD=E7=A1=AC=E4=BB=B6=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- device/{definitions.go => authorize.go} | 45 ++++++++++++--- device/bind.go | 60 ++++++++++++++++++++ device/device.go | 73 +++++++------------------ device/message.go | 9 +++ device/qrcode.go | 73 +++++++++++++++++++++++++ 5 files changed, 199 insertions(+), 61 deletions(-) rename device/{definitions.go => authorize.go} (81%) create mode 100644 device/bind.go create mode 100644 device/message.go create mode 100644 device/qrcode.go diff --git a/device/definitions.go b/device/authorize.go similarity index 81% rename from device/definitions.go rename to device/authorize.go index df24067..9cca435 100644 --- a/device/definitions.go +++ b/device/authorize.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 } diff --git a/device/bind.go b/device/bind.go new file mode 100644 index 0000000..370fe5a --- /dev/null +++ b/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 +} diff --git a/device/device.go b/device/device.go index 08d5c1f..b2e9820 100644 --- a/device/device.go +++ b/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, - } - fmt.Println(req) - response, err := util.PostJSON(uri, req) - if err != nil { + if accessToken, err = d.GetAccessToken(); err != nil { return } - var result resCreateQRCode - err = json.Unmarshal(response, &result) - 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 } - if result.ErrCode != 0 { - err = fmt.Errorf("CreateQRCode Error , errcode=%d , errmsg=%s", result.ErrCode, result.ErrMsg) + if err = json.Unmarshal(response, &res); err != nil { + return + } + if res.ErrCode != 0 { + err = fmt.Errorf("DeviceState Error , errcode=%d , errmsg=%s", res.ErrCode, res.ErrMsg) return } - res = result.CodeList return } diff --git a/device/message.go b/device/message.go new file mode 100644 index 0000000..cfe5095 --- /dev/null +++ b/device/message.go @@ -0,0 +1,9 @@ +package device + +// 设备消息响应 +type MsgDevice struct { + DeviceType string + DeviceID string + SessionId string + OpenID string +} diff --git a/device/qrcode.go b/device/qrcode.go new file mode 100644 index 0000000..f31c300 --- /dev/null +++ b/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 +}