mirror of
https://github.com/silenceper/wechat.git
synced 2026-02-04 21:02:25 +08:00
完善微信智能硬件接口
This commit is contained in:
@@ -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
device/bind.go
Normal file
60
device/bind.go
Normal file
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
9
device/message.go
Normal file
9
device/message.go
Normal file
@@ -0,0 +1,9 @@
|
||||
package device
|
||||
|
||||
// 设备消息响应
|
||||
type MsgDevice struct {
|
||||
DeviceType string
|
||||
DeviceID string
|
||||
SessionId string
|
||||
OpenID string
|
||||
}
|
||||
73
device/qrcode.go
Normal file
73
device/qrcode.go
Normal file
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user