callback.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package controller
  2. import (
  3. "ElectronicInvoice/internal/service"
  4. "github.com/gogf/gf/v2/frame/g"
  5. "github.com/gogf/gf/v2/net/ghttp"
  6. "net/url"
  7. "strings"
  8. )
  9. // CallBack 回调
  10. func CallBack(r *ghttp.Request) {
  11. err := func() error {
  12. var (
  13. callType = r.Get("calltype").String()
  14. ctx = r.Context()
  15. )
  16. if g.Cfg().MustGet(r.Context(), "reqDebug", false).Bool() {
  17. g.Log().Infof(r.Context(), "%s\n接口回调 信息调试\ncallType: %s\ncallBack form: %+v", strings.Repeat("=", 50), callType, printFilter(r.Request.Form))
  18. }
  19. switch callType {
  20. case "userQuit": //用户退出登录
  21. service.JyInvoiceManager.Login = false
  22. g.Log().Info(ctx, "长在线退出登录")
  23. case "Invoicing": //开发票回调
  24. return service.InvoicingCallBackLogic(r)
  25. case "InvoicingAll": //批量开票
  26. g.Log().Info(ctx, "用户退出登录")
  27. case "offset":
  28. return service.InvoicingMakeRedCallBackLogic(r)
  29. case "livenessDetection":
  30. g.Log().Info(ctx, "活体认证:%s")
  31. case "login": //扫码登录回调
  32. var flag bool
  33. if r.Get("code").String() == "200" {
  34. flag = true
  35. }
  36. service.JyInvoiceManager.ScanLogin <- flag
  37. case "quit":
  38. t := r.Get("taskType").String()
  39. data := r.Get("data").String()
  40. g.Dump("quit--", data)
  41. switch t {
  42. case "2": //电子发票开具
  43. service.JyInvoiceManager.ReleasePool() //可进行下次开票请求
  44. g.Log().Infof(ctx, "开具发票结束")
  45. case "4": //活体认证
  46. case "5": //验证电子税局登录授权
  47. case "9": //红冲
  48. service.JyInvoiceManager.ReleasePool() //可进行下次开票请求
  49. g.Log().Infof(ctx, "发票冲红结束")
  50. default:
  51. g.Log().Infof(ctx, "未知回调任务退出 %d", t)
  52. }
  53. default:
  54. g.Log().Infof(ctx, "未设置消息回调:%s", callType)
  55. }
  56. return nil
  57. }()
  58. if err != nil {
  59. g.Log().Errorf(r.Context(), "回调异常:%v", err)
  60. return
  61. }
  62. r.Response.WriteJson(g.MapStrStr{"code": "200"})
  63. }
  64. // printFilter 打印参数调试
  65. func printFilter(value url.Values) map[string][]string {
  66. var filter = []string{"pdf"} //过滤部分字段
  67. res := map[string][]string{}
  68. for key, val := range value {
  69. add := true
  70. for _, v := range filter {
  71. if key == v {
  72. add = false
  73. break
  74. }
  75. }
  76. if add {
  77. res[key] = val
  78. }
  79. }
  80. return res
  81. }