tripartiteLogin.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. package service
  2. import (
  3. "ElectronicInvoice/internal/consts"
  4. "ElectronicInvoice/util"
  5. "context"
  6. "github.com/gogf/gf/v2/errors/gerror"
  7. "github.com/gogf/gf/v2/frame/g"
  8. "github.com/gogf/gf/v2/util/gconv"
  9. "time"
  10. )
  11. // Login 登录系统
  12. func (t *TripartiteAuth) Login() error {
  13. type (
  14. loginFirstRes struct {
  15. Ewm string `json:"ewm"` //扫码二维码
  16. IsVerificationCode int `json:"isVerificationCode"` //是否需要输入验证码 1需要 2不需要
  17. }
  18. )
  19. var (
  20. ctx = context.Background()
  21. d loginFirstRes
  22. loginType = g.Cfg().MustGet(ctx, "loginType", 0).Int() //0 短信登录 1 扫码登录
  23. )
  24. //授权登录
  25. err := CommonDoPost("/index_index/startPort",
  26. t.GetFormHeaderWithToken(),
  27. g.MapStrAny{
  28. "taxNum": g.Cfg().MustGet(ctx, "company.taxNum"),
  29. "tel": g.Cfg().MustGet(ctx, "company.account"),
  30. "password": g.Cfg().MustGet(ctx, "company.password"),
  31. "login_type": loginType,
  32. "parameter": "cccc",
  33. },
  34. func(i interface{}) error {
  35. if err := gconv.Struct(i, &d); err != nil {
  36. return err
  37. }
  38. return nil
  39. })
  40. if err != nil {
  41. return gerror.Wrap(err, "授权登录异常")
  42. }
  43. if loginType == 0 { //短信登录
  44. //TODO 发送消息 取填写验证码
  45. g.Log().Infof(ctx, "等待接收登录验证码")
  46. select {
  47. case <-time.After(time.Minute * 5):
  48. g.Log().Infof(ctx, "已接接收登录验证码接收超时")
  49. return consts.AuthTimeOut
  50. case yzm := <-JyInvoiceManager.phoneCode:
  51. if err := t.LoginAfterKeepOnline(yzm); err != nil {
  52. return gerror.Wrap(err, "短信验证失败")
  53. }
  54. }
  55. } else {
  56. //ToDo be developed
  57. // 等待扫完完成回调 默认扫码成功
  58. if err := util.SendQrImage2ChatBot(d.Ewm); err != nil {
  59. return gerror.Wrap(err, "发送企业微信登录消息异常")
  60. }
  61. select {
  62. case <-time.After(time.Minute * 5):
  63. g.Log().Infof(ctx, "已接接收登录验证码接收超时")
  64. return consts.AuthTimeOut
  65. case scanOk := <-JyInvoiceManager.ScanLogin:
  66. if !scanOk {
  67. return gerror.Wrap(err, "扫码登录验证失败")
  68. }
  69. }
  70. }
  71. JyInvoiceManager.Login = true
  72. return nil
  73. }
  74. // LoginAfterKeepOnline 长期登录授权接口
  75. func (t *TripartiteAuth) LoginAfterKeepOnline(yzm string) error {
  76. var (
  77. ctx = context.Background()
  78. )
  79. g.Log().Infof(ctx, "已接接收登录验证码 %s", yzm)
  80. err := CommonDoPost("/index_index/onLine",
  81. t.GetFormHeaderWithToken(),
  82. g.MapStrAny{
  83. "taxNum": g.Cfg().MustGet(ctx, "company.taxNum"),
  84. "tel": g.Cfg().MustGet(ctx, "company.account"),
  85. "yzm": yzm,
  86. },
  87. nil)
  88. if err != nil {
  89. return gerror.Wrap(err, "授权登录异常")
  90. }
  91. return nil
  92. }
  93. // VerifyLogin 验证登录
  94. func (t *TripartiteAuth) VerifyLogin() error {
  95. var (
  96. ctx = context.Background()
  97. )
  98. err := CommonDoPost("/index_index/verifyLogin",
  99. t.GetFormHeaderWithToken(),
  100. g.MapStrAny{
  101. "taxNum": g.Cfg().MustGet(ctx, "company.taxNum"),
  102. "tel": g.Cfg().MustGet(ctx, "company.account"),
  103. },
  104. nil)
  105. if err != nil {
  106. return gerror.Wrap(err, "授权登录异常")
  107. }
  108. return err
  109. }
  110. // SyncData 验证登录
  111. func (t *TripartiteAuth) SyncData() error {
  112. var (
  113. ctx = context.Background()
  114. )
  115. err := CommonDoPost("/index_index/syncData",
  116. t.GetFormHeaderWithToken(),
  117. g.MapStrAny{
  118. "taxNum": g.Cfg().MustGet(ctx, "company.taxNum"),
  119. "tel": g.Cfg().MustGet(ctx, "company.account"),
  120. "start_time": "2024-01-01",
  121. "end_time": "2024-05-01",
  122. "total": 10,
  123. },
  124. nil)
  125. if err != nil {
  126. return gerror.Wrap(err, "Demo")
  127. }
  128. return err
  129. }