response.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. package response
  2. import (
  3. "github.com/gogf/gf/encoding/gjson"
  4. "github.com/gogf/gf/errors/gerror"
  5. "github.com/gogf/gf/net/ghttp"
  6. "github.com/gogf/gf/util/gconv"
  7. )
  8. // JsonResponse 数据返回通用JSON数据结构
  9. type JsonResponse struct {
  10. //ID string `json:"id"` //
  11. Code int `json:"code"` // 错误码((1:成功, 0:失败, >1:错误码))
  12. Message string `json:"message"` // 提示信息
  13. Data interface{} `json:"data,omitempty"` // 返回数据(业务接口定义具体数据结构)
  14. Redirect string `json:"redirect,omitempty"` // 引导客户端跳转到指定路由
  15. }
  16. // JsonExit 返回JSON数据并退出当前HTTP执行函数。
  17. func JsonExit(r *ghttp.Request, code int, msg string, data ...interface{}) {
  18. responseData := interface{}(nil)
  19. if len(data) > 0 {
  20. responseData = data[0]
  21. }
  22. codeMsgs := GetCodeMsg(code, msg)
  23. response := &JsonResponse{
  24. //ID: r.GetCtxVar("RequestId").String(),
  25. Code: code,
  26. Message: codeMsgs,
  27. Data: responseData,
  28. }
  29. r.SetParam("apiReturnRes", response)
  30. _ = r.Response.WriteJsonExit(response)
  31. }
  32. func ApiResponse(r *ghttp.Request, res interface{}) {
  33. Map := gjson.New(res).Map()
  34. Map["id"] = r.GetCtxVar("request_id")
  35. r.Response.WriteJson(Map)
  36. r.Exit()
  37. }
  38. func Success(r *ghttp.Request) {
  39. res := dataReturn(r, 1)
  40. _ = r.Response.WriteJsonExit(res)
  41. }
  42. func Failure(r *ghttp.Request, code int, err error) {
  43. res := dataReturn(r, code, err.Error())
  44. _ = r.Response.WriteJsonExit(res)
  45. }
  46. func FailureCode(r *ghttp.Request, code int) {
  47. res := dataReturn(r, code)
  48. _ = r.Response.WriteJsonExit(res)
  49. }
  50. func dataReturn(r *ghttp.Request, code int, req ...interface{}) *JsonResponse {
  51. var msg string
  52. var data interface{}
  53. if len(req) > 0 {
  54. msg = gconv.String(req[0])
  55. }
  56. if len(req) > 1 {
  57. data = req[1]
  58. }
  59. //msg = GetCodeMsg(code, msg)
  60. if code != 1 && !gconv.Bool(r.GetCtxVar("api_code")) {
  61. code = 0
  62. }
  63. response := &JsonResponse{
  64. //ID: r.GetCtxVar("RequestId").String(),
  65. Code: code,
  66. Message: msg,
  67. Data: data,
  68. }
  69. r.SetParam("apiReturnRes", response)
  70. return response
  71. }
  72. func SuccessWithData(r *ghttp.Request, data interface{}) {
  73. res := dataReturn(r, 1, "ok", data)
  74. _ = r.Response.WriteJsonExit(res)
  75. }
  76. func FailureWithData(r *ghttp.Request, code int, err error, data interface{}) {
  77. res := dataReturn(r, code, err.Error(), data)
  78. _ = r.Response.WriteJsonExit(res)
  79. }
  80. //ParamErr 参数错误
  81. func ParamErr(r *ghttp.Request, err error) {
  82. res := dataReturn(r, 3000, gerror.Current(err))
  83. _ = r.Response.WriteJsonExit(res)
  84. }
  85. //NotOnline 应用未上线
  86. func NotOnline(r *ghttp.Request) {
  87. res := dataReturn(r, 3002)
  88. _ = r.Response.WriteJsonExit(res)
  89. }
  90. func BackErr(r *ghttp.Request, err error) {
  91. res := dataReturn(r, 10002, err.Error())
  92. _ = r.Response.WriteJsonExit(res)
  93. }
  94. func Number(r *ghttp.Request) {
  95. res := dataReturn(r, 10004)
  96. _ = r.Response.WriteJsonExit(res)
  97. }
  98. func Code(r *ghttp.Request, err error) {
  99. //res := dataReturn(r, gerror.Code(err).Code(), gerror.Code(err).Message(), gerror.Code(err).Detail())
  100. res := dataReturn(r, gerror.Code(err).Code(), err.Error(), gerror.Code(err).Detail())
  101. _ = r.Response.WriteJsonExit(res)
  102. }
  103. //Fatal 致命错误
  104. func Fatal(r *ghttp.Request) {
  105. res := dataReturn(r, 500)
  106. _ = r.Response.WriteJsonExit(res)
  107. }
  108. //Repeat 重复请求
  109. func Repeat(r *ghttp.Request) {
  110. res := dataReturn(r, 3001)
  111. _ = r.Response.WriteJsonExit(res)
  112. }
  113. //NotFound 接口不存在
  114. func NotFound(r *ghttp.Request) {
  115. res := dataReturn(r, 404)
  116. _ = r.Response.WriteJsonExit(res)
  117. }
  118. //Sign 签名错误
  119. func Sign(r *ghttp.Request, err error) {
  120. res := dataReturn(r, 99999, err.Error())
  121. _ = r.Response.WriteJsonExit(res)
  122. }
  123. //Auth 认证失败
  124. func Auth(r *ghttp.Request) {
  125. res := dataReturn(r, 999, "请登录")
  126. _ = r.Response.WriteJsonExit(res)
  127. }
  128. //Auth 认证失败 被冻结拉黑
  129. func AuthBlack(r *ghttp.Request) {
  130. res := dataReturn(r, 888, "您的账号被冻结拉黑,请联系管理员")
  131. _ = r.Response.WriteJsonExit(res)
  132. }
  133. //Auth 认证失败
  134. func NoPower(r *ghttp.Request) {
  135. response := &JsonResponse{
  136. //ID: r.GetCtxVar("RequestId").String(),
  137. Code: 5002,
  138. Message: "没有权限",
  139. }
  140. r.SetParam("apiReturnRes", response)
  141. _ = r.Response.WriteJsonExit(response)
  142. }
  143. //子账号登陆open
  144. func SubAccountLoginOpenStatus(r *ghttp.Request) {
  145. response := &JsonResponse{
  146. //ID: r.GetCtxVar("RequestId").String(),
  147. Code: 5002,
  148. Message: "账户未审核",
  149. }
  150. r.SetParam("apiReturnRes", response)
  151. _ = r.Response.WriteJsonExit(response)
  152. }