device.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package device
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/silenceper/wechat/context"
  6. "github.com/silenceper/wechat/util"
  7. )
  8. const (
  9. deviceAuthorize = "https://api.weixin.qq.com/device/authorize_device"
  10. deviceQRCode = "https://api.weixin.qq.com/device/create_qrcode"
  11. )
  12. //Device struct
  13. type Device struct {
  14. *context.Context
  15. }
  16. //NewDevice 实例
  17. func NewDevice(context *context.Context) *Device {
  18. device := new(Device)
  19. device.Context = context
  20. return device
  21. }
  22. // DeviceAuthorize 设备授权
  23. func (d *Device) DeviceAuthorize(devices []ReqDevice, opType int, productId string) (res []resBaseInfo, err error) {
  24. var accessToken string
  25. accessToken, err = d.GetAccessToken()
  26. if err != nil {
  27. return nil, err
  28. }
  29. uri := fmt.Sprintf("%s?access_token=%s", deviceAuthorize, accessToken)
  30. req := reqDeviceAuthorize{
  31. DeviceNum: fmt.Sprintf("%d", len(devices)),
  32. DeviceList: devices,
  33. OpType: fmt.Sprintf("%d", opType),
  34. ProductId: productId,
  35. }
  36. response, err := util.PostJSON(uri, req)
  37. if err != nil {
  38. return nil, err
  39. }
  40. var result resDeviceAuthorize
  41. err = json.Unmarshal(response, &result)
  42. if err != nil {
  43. return
  44. }
  45. if result.ErrCode != 0 {
  46. err = fmt.Errorf("DeviceAuthorize Error , errcode=%d , errmsg=%s", result.ErrCode, result.ErrMsg)
  47. return
  48. }
  49. res = result.Resp
  50. return
  51. }
  52. // CreateQRCode 获取设备二维码
  53. func (d *Device) CreateQRCode(devices []string) (res []resQRCode, err error) {
  54. var accessToken string
  55. accessToken, err = d.GetAccessToken()
  56. if err != nil {
  57. return nil, err
  58. }
  59. uri := fmt.Sprintf("%s?access_token=%s", deviceQRCode, accessToken)
  60. req := map[string]interface{}{
  61. "device_num": len(devices),
  62. "device_id_list": devices,
  63. }
  64. fmt.Println(req)
  65. response, err := util.PostJSON(uri, req)
  66. if err != nil {
  67. return
  68. }
  69. var result resCreateQRCode
  70. err = json.Unmarshal(response, &result)
  71. if err != nil {
  72. return
  73. }
  74. if result.ErrCode != 0 {
  75. err = fmt.Errorf("CreateQRCode Error , errcode=%d , errmsg=%s", result.ErrCode, result.ErrMsg)
  76. return
  77. }
  78. res = result.CodeList
  79. return
  80. }