router.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. package router
  2. import (
  3. "fmt"
  4. "github.com/gogf/gf/frame/g"
  5. "github.com/gogf/gf/net/ghttp"
  6. "github.com/gogf/gf/os/gtime"
  7. douyinOauth "github.com/lin-jim-leon/douyin/open/oauth"
  8. douyinUser "github.com/lin-jim-leon/douyin/open/user"
  9. _ "github.com/lin-jim-leon/kuaishou/open/merchant"
  10. "github.com/lin-jim-leon/kuaishou/open/oauth"
  11. _ "github.com/lin-jim-leon/kuaishou/open/oauth"
  12. "github.com/lin-jim-leon/kuaishou/open/user"
  13. _ "github.com/lin-jim-leon/kuaishou/open/user"
  14. "strconv"
  15. youngeetalentapi "youngmini_server/app/api/youngee_talent_api"
  16. "youngmini_server/app/model/youngee_talent_model"
  17. "youngmini_server/app/system/assignment"
  18. "youngmini_server/app/system/sectask"
  19. "youngmini_server/app/system/wxpay"
  20. "youngmini_server/middleware"
  21. )
  22. // MiddlewareCORS 允许跨域请求中间件 所有的路由都会经过这个中间件
  23. func MiddlewareCORS(r *ghttp.Request) {
  24. corsOptions := r.Response.DefaultCORSOptions()
  25. corsOptions.AllowHeaders = "Authorization,Content-Length,X-CSRF-Token,Token,session,X_Requested_With,Accept,Origin,Host,Connection,Accept-Encoding,Accept-Language,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Pragma"
  26. corsOptions.ExposeHeaders = "Content-Length,Access-Control-Allow-Origin,Access-Control-Allow-Headers,Content-Language,Expires,Last-Modified,Pragma,FooBar"
  27. corsOptions.MaxAge = 1728000
  28. //corsOptions := ghttp.CORSOptions{
  29. //AllowOrigin: "*",
  30. //AllowMethods: "POST,GET,OPTIONS,PUT,DELETE,UPDATE",
  31. //AllowCredentials: "false",
  32. //MaxAge: 1728000,
  33. //AllowHeaders: "Authorization,Content-Length,X-CSRF-Token,Token,session,X_Requested_With,Accept,Origin,Host,Connection,Accept-Encoding,Accept-Language,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Pragma",
  34. //ExposeHeaders: "Content-Length,Access-Control-Allow-Origin,Access-Control-Allow-Headers,Content-Language,Expires,Last-Modified,Pragma,FooBar",
  35. //}
  36. //corsOptions.AllowDomain = []string{"goframe.org", "johng.cn"}
  37. //corsOptions.AllowHeaders = "Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,Keep-Alive,X-Requested-With,X-Forwarded-*,Pragma,Cache-Control,If-Modified-Since,userToken,appid"
  38. r.Response.CORS(corsOptions)
  39. r.Middleware.Next()
  40. }
  41. // MiddlewareAuth 用户认证中间件
  42. //
  43. // func MiddlewareAuth(r *ghttp.Request) {
  44. // //排除路径
  45. // array := garray.NewFrom(g.Slice{"/admin/account"})
  46. // if array.Contains(r.RequestURI) == false {
  47. // userData, err := backstage_service.Token.AuthorizationGetUserData(r)
  48. // if err != nil {
  49. // r.Response.WriteStatus(http.StatusForbidden)
  50. // response.JsonExit(r, http.StatusForbidden, err.Error())
  51. // }
  52. // if userData == nil {
  53. // r.Response.WriteStatus(http.StatusUnauthorized)
  54. // response.JsonExit(r, http.StatusForbidden, "用户不存在")
  55. // }
  56. // }
  57. // // 中间件处理逻辑
  58. // r.Middleware.Next()
  59. // }
  60. //
  61. // 用于存数据库的验证信息
  62. // json用于序列化和反序列化
  63. // MiddlewareSuperAuth 超级管理员可以操作的登录接口
  64. //
  65. // func MiddlewareSuperAuth(r *ghttp.Request) {
  66. // // 排除路径
  67. // userData, _ := backstage_service.Token.AuthorizationGetUserData(r)
  68. // if userData.User != "10000000" {
  69. // r.Response.WriteStatus(http.StatusPaymentRequired)
  70. // response.JsonExit(r, http.StatusPaymentRequired, "没有权限操作")
  71. // }
  72. // // 中间件处理逻辑
  73. // r.Middleware.Next()
  74. // }
  75. func init() {
  76. s := g.Server()
  77. // 解决跨域
  78. s.BindMiddleware("/*", MiddlewareCORS)
  79. // v2小程序端接口
  80. s.Group("/youngee/c", func(group *ghttp.RouterGroup) {
  81. group.Middleware(middleware.ErrorHandler)
  82. //用于快手电商:nignx转发含code的请求到此处
  83. s.BindHandler("/kuaishouauth", func(r *ghttp.Request) {
  84. fmt.Println("****进入rounter中的/kuaishouauth*******")
  85. ClientKey := "ks651333097154138217"
  86. ClientSecret := "dBt0rVRhTpUqcrOYGGpv0A"
  87. //SignSecret := "bf6393dce0a2b669ee348bebb837b0da"
  88. code := r.GetString("code")
  89. state := r.GetString("state")
  90. //获取accesstoken
  91. res_auth, _ := oauth.GetAccessToken(ClientKey, ClientSecret, code)
  92. //如果该快手账号(openID)已经有数据了,更新数据。没有数据则插入数据。
  93. _, err := g.DB().Model("platform_kuaishou_user_info").
  94. Where("open_id = ? AND platform_id = ?", res_auth.OpenId, 4).
  95. Delete()
  96. if err != nil {
  97. r.Response.WriteJson("platform_kuaishou_user_info delete failed")
  98. }
  99. AccessToken := res_auth.AccessToken
  100. //获取基本信息
  101. res_info, _ := user.GetUserinfo(ClientKey, AccessToken)
  102. //30天销量不在扫码时获取。
  103. err_auth := r.Response.WriteJson(res_auth)
  104. err_info := r.Response.WriteJson(res_info)
  105. if err_auth != nil {
  106. panic("write auth_response error")
  107. }
  108. if err_info != nil {
  109. panic("write auth_response error")
  110. }
  111. if res_auth.Result != 1 {
  112. panic("授权结果出错了")
  113. }
  114. if res_info.Result != 1 {
  115. panic("获取用户信息出错了")
  116. }
  117. //auth中含有最终信息
  118. authInfo := &youngee_talent_model.KuaishouUserInfo{
  119. Code: code,
  120. TalentId: state,
  121. AccessToken: AccessToken,
  122. OpenId: res_auth.OpenId,
  123. PlatformId: 4, //快手平台
  124. RefreshToken: res_auth.RefreshToken,
  125. HeadUri: res_info.Data.Head,
  126. NickName: res_info.Data.Name,
  127. Fan: res_info.Data.Fan,
  128. UpdateTime: gtime.Now(),
  129. CreateTime: gtime.Now(),
  130. }
  131. if _, err := g.DB().Model("platform_kuaishou_user_info").Save(authInfo); err != nil {
  132. r.Response.WriteJson(g.Map{
  133. "error": err.Error(),
  134. })
  135. return
  136. }
  137. })
  138. //用于快手平台:nignx转发含code的请求到此处
  139. s.BindHandler("/kuaishouVideo", func(r *ghttp.Request) {
  140. fmt.Println("****进入rounter中的/kuaishouVideo*******")
  141. ClientKey := "ks671599294546520767"
  142. ClientSecret := "8VSrp3O09nunjLMXR1uotg"
  143. //SignSecret := "bf6393dce0a2b669ee348bebb837b0da"
  144. code := r.GetString("code")
  145. state := r.GetString("state")
  146. //获取accesstoken
  147. res_auth, _ := oauth.GetAccessToken(ClientKey, ClientSecret, code)
  148. //如果该快手账号(openID)已经有数据了,删除。模拟在快手刷新授权 没有数据则空操作
  149. _, err := g.DB().Model("platform_kuaishou_user_info").
  150. Where("open_id = ? AND platform_id = ?", res_auth.OpenId, 8).
  151. Delete()
  152. if err != nil {
  153. r.Response.WriteJson("platform_kuaishou_user_info delete failed")
  154. }
  155. AccessToken := res_auth.AccessToken
  156. //获取基本信息
  157. res_info, _ := user.GetUserinfo(ClientKey, AccessToken)
  158. //视频数据不在扫码时获取。
  159. //用户进入主页获取,并存入数据库中
  160. err_auth := r.Response.WriteJson(res_auth)
  161. err_info := r.Response.WriteJson(res_info)
  162. if err_auth != nil {
  163. panic("write auth_response error")
  164. }
  165. if err_info != nil {
  166. panic("write auth_response error")
  167. }
  168. if res_auth.Result != 1 {
  169. panic("授权结果出错了")
  170. }
  171. if res_info.Result != 1 {
  172. panic("获取用户信息出错了")
  173. }
  174. //auth中含有最终信息
  175. authInfo := &youngee_talent_model.KuaishouUserInfo{
  176. Code: code,
  177. TalentId: state,
  178. AccessToken: AccessToken,
  179. OpenId: res_auth.OpenId,
  180. PlatformId: 8, //快手平台
  181. RefreshToken: res_auth.RefreshToken,
  182. HeadUri: res_info.Data.Head,
  183. NickName: res_info.Data.Name,
  184. Fan: res_info.Data.Fan,
  185. UpdateTime: gtime.Now(),
  186. CreateTime: gtime.Now(),
  187. }
  188. if _, err := g.DB().Model("platform_kuaishou_user_info").Save(authInfo); err != nil {
  189. r.Response.WriteJson(g.Map{
  190. "error": err.Error(),
  191. })
  192. return
  193. }
  194. })
  195. //用于抖音平台:nignx转发含code的请求到此处
  196. s.BindHandler("/douyinauth", func(r *ghttp.Request) {
  197. ClientKey := "ks671599294546520767"
  198. ClientSecret := "8VSrp3O09nunjLMXR1uotg"
  199. code := r.GetString("code")
  200. state := r.GetString("state")
  201. //获取accesstoken
  202. res_auth, _ := douyinOauth.GetAccessToken(ClientKey, ClientSecret, code)
  203. douyinOpenId := res_auth.Data.OpenId
  204. //如果该快手账号(openID)已经有数据了,删除。模拟在快手刷新授权 没有数据则空操作
  205. _, err := g.DB().Model("platform_kuaishou_user_info").
  206. Where("open_id = ? AND platform_id = ?", douyinOpenId, 2).
  207. Delete()
  208. if err != nil {
  209. r.Response.WriteJson("抖音账号覆盖失败")
  210. }
  211. AccessToken := res_auth.Data.AccessToken
  212. //获取基本信息
  213. res_info, _ := douyinUser.GetUserInfo(res_auth.Data.OpenId, AccessToken)
  214. //获取用户粉丝数
  215. res_fans, _ := douyinUser.GetUserFans(AccessToken, "7", douyinOpenId) //近7天,返回一个列表每天都有总粉丝数
  216. errCode := res_fans.Data.ErrorCode
  217. var fansNumStr string
  218. if errCode == 0 { // 满足千粉以上
  219. fansNumStr = res_fans.Data.ResultList[0].TotalFans
  220. } else {
  221. fansNumStr = "0"
  222. }
  223. fansNum, err := strconv.Atoi(fansNumStr)
  224. if err != nil {
  225. fmt.Println("Error converting string to int:", err)
  226. // 可以在这里添加错误处理逻辑
  227. }
  228. //视频数据不在扫码时获取。
  229. //用户进入主页获取,并存入数据库中
  230. err_auth := r.Response.WriteJson(res_auth)
  231. err_info := r.Response.WriteJson(res_info)
  232. if err_auth != nil {
  233. panic("write auth_response error")
  234. }
  235. if err_info != nil {
  236. panic("write auth_response error")
  237. }
  238. if res_auth.Data.ErrorCode != 0 {
  239. panic("抖音授权结果出错了")
  240. }
  241. if res_info.Data.ErrorCode != 0 {
  242. panic("抖音获取用户信息出错了")
  243. }
  244. //auth中含有最终信息
  245. authInfo := &youngee_talent_model.KuaishouUserInfo{
  246. Code: code,
  247. TalentId: state,
  248. AccessToken: AccessToken,
  249. OpenId: douyinOpenId,
  250. PlatformId: 2, //抖音平台
  251. RefreshToken: res_auth.Data.RefreshToken,
  252. HeadUri: res_info.Data.Avatar,
  253. NickName: res_info.Data.Nickname,
  254. Fan: fansNum, //专门获取粉丝数的接口,默认为0。
  255. UpdateTime: gtime.Now(),
  256. CreateTime: gtime.Now(),
  257. }
  258. if _, err := g.DB().Model("platform_kuaishou_user_info").Save(authInfo); err != nil {
  259. r.Response.WriteJson(g.Map{
  260. "error": err.Error(),
  261. })
  262. return
  263. }
  264. })
  265. // 达人不需要鉴权的接口
  266. group.GET("/g", youngeetalentapi.TalentGetApi)
  267. group.POST("/p", youngeetalentapi.TalentPostApi)
  268. // 达人需要鉴权的接口
  269. group.Group("/t", func(group *ghttp.RouterGroup) {
  270. group.Middleware(middleware.DuplicateVerify, middleware.WxAuth)
  271. group.GET("/g", youngeetalentapi.TalentAuthGetApi)
  272. group.POST("/p", youngeetalentapi.TalentAuthPostApi)
  273. })
  274. })
  275. // v2小程序端接口
  276. s.Group("/youngee/c/api", func(group *ghttp.RouterGroup) {
  277. group.Middleware(middleware.ErrorHandler)
  278. //// 达人不需要鉴权的接口
  279. //group.GET("/g", youngeetalentapi.TalentGetApi)
  280. //group.POST("/p", youngeetalentapi.TalentPostApi)
  281. group.Group("/selection", func(group *ghttp.RouterGroup) {
  282. group.GET("/list", sectask.SecTask.List)
  283. })
  284. // 达人需要鉴权的接口
  285. group.Group("/t", func(group *ghttp.RouterGroup) {
  286. group.Middleware(middleware.DuplicateVerify, middleware.WxAuth)
  287. group.Group("/secTask", func(group *ghttp.RouterGroup) {
  288. group.GET("/list", sectask.SecTask.List)
  289. group.GET("/list-tab", sectask.SecTask.ListTab)
  290. group.GET("/logistics/detail", sectask.SecTask.ShowLogisticsDetail)
  291. })
  292. group.Group("/assignment", func(group *ghttp.RouterGroup) {
  293. group.GET("/list", assignment.Assignment.List)
  294. group.POST("/add", assignment.Assignment.Add)
  295. })
  296. group.Group("/wxpay", func(group *ghttp.RouterGroup) {
  297. group.POST("/pay", wxpay.WxPay.WxPay)
  298. })
  299. })
  300. })
  301. }