qrcode.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package device
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/silenceper/wechat/v2/util"
  6. )
  7. //ResCreateQRCode 获取二维码的返回实体
  8. type ResCreateQRCode struct {
  9. util.CommonError
  10. DeviceNum int `json:"device_num"`
  11. CodeList []struct {
  12. DeviceID string `json:"device_id"`
  13. Ticket string `json:"ticket"`
  14. } `json:"code_list"`
  15. }
  16. // CreateQRCode 获取设备二维码
  17. func (d *Device) CreateQRCode(devices []string) (res ResCreateQRCode, err error) {
  18. var accessToken string
  19. if accessToken, err = d.GetAccessToken(); err != nil {
  20. return
  21. }
  22. uri := fmt.Sprintf("%s?access_token=%s", uriQRCode, accessToken)
  23. req := map[string]interface{}{
  24. "device_num": len(devices),
  25. "device_id_list": devices,
  26. }
  27. var response []byte
  28. if response, err = util.PostJSON(uri, req); err != nil {
  29. return
  30. }
  31. if err = json.Unmarshal(response, &res); err != nil {
  32. return
  33. }
  34. if res.ErrCode != 0 {
  35. err = fmt.Errorf("DeviceCreateQRCode Error , errcode=%d , errmsg=%s", res.ErrCode, res.ErrMsg)
  36. return
  37. }
  38. return
  39. }
  40. //ResVerifyQRCode 验证授权结果实体
  41. type ResVerifyQRCode struct {
  42. util.CommonError
  43. DeviceType string `json:"device_type"`
  44. DeviceID string `json:"device_id"`
  45. Mac string `json:"mac"`
  46. }
  47. // VerifyQRCode 验证设备二维码
  48. func (d *Device) VerifyQRCode(ticket string) (res ResVerifyQRCode, err error) {
  49. var accessToken string
  50. if accessToken, err = d.GetAccessToken(); err != nil {
  51. return
  52. }
  53. uri := fmt.Sprintf("%s?access_token=%s", uriVerifyQRCode, accessToken)
  54. req := map[string]interface{}{
  55. "ticket": ticket,
  56. }
  57. var response []byte
  58. if response, err = util.PostJSON(uri, req); err != nil {
  59. return
  60. }
  61. if err = json.Unmarshal(response, &res); err != nil {
  62. return
  63. }
  64. if res.ErrCode != 0 {
  65. err = fmt.Errorf("DeviceCreateQRCode Error , errcode=%d , errmsg=%s", res.ErrCode, res.ErrMsg)
  66. return
  67. }
  68. return
  69. }