controller.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package facebook
  2. import (
  3. "fmt"
  4. "net/http"
  5. "strconv"
  6. "bet24.com/public"
  7. "bet24.com/servers/payment/db"
  8. "bet24.com/log"
  9. "bet24.com/servers/payment/config"
  10. "github.com/gin-gonic/gin"
  11. "github.com/huandu/facebook"
  12. )
  13. // 获取密钥
  14. func getSecret(appId string) string {
  15. for _, v := range config.Server.Facebooks {
  16. if v.APP_ID == appId {
  17. return v.APP_SECRET
  18. }
  19. }
  20. return ""
  21. }
  22. // 删除 facebook 账号
  23. func Del(c *gin.Context) {
  24. appId := c.Param("id")
  25. appSecret := getSecret(appId)
  26. if appSecret == "" {
  27. log.Error("facebook.del appId=%s appSecret=%s is invalid", appId, appSecret)
  28. return
  29. }
  30. var req struct {
  31. Signed_Request string `json:"signed_request" form:"signed_request"`
  32. }
  33. if err := c.ShouldBind(&req); err != nil {
  34. log.Debug("%s query params err %v", "facebook.controller.DelFacebook", err)
  35. c.String(http.StatusOK, "")
  36. return
  37. }
  38. log.Debug("facebook.controller.DelFacebook appId=%s appSecret=%s req ==> %+v", appId, appSecret, req)
  39. if req.Signed_Request == "" {
  40. log.Debug("skip this case as we don't have a valid signed request.")
  41. return
  42. }
  43. app := facebook.New(appId, appSecret)
  44. res, err := app.ParseSignedRequest(req.Signed_Request)
  45. if err != nil {
  46. log.Error("cannot parse signed request. [e:%v]", err)
  47. return
  48. }
  49. log.Debug("signed request is '%v'.", res)
  50. facebookId := fmt.Sprintf("fb.%s", res.Get("user_id"))
  51. userId := db.DelFacebook(facebookId)
  52. if userId <= 0 {
  53. log.Error("facebook.Del facebookId=%s userId=%d", facebookId, userId)
  54. }
  55. // 生成md5加密串
  56. checkContent := fmt.Sprintf("userId=fb.%s&key=%s", res.Get("user_id"), config.Server.Facebook_KEY)
  57. sign := public.GetMd5String(checkContent)
  58. status_url := fmt.Sprintf("%s?id=%s&sign=%s", config.Server.Facebook_STATUS_URL, res.Get("user_id"), sign)
  59. confirmation_code := strconv.Itoa(userId)
  60. c.JSON(http.StatusOK, RespData{
  61. Url: status_url,
  62. Confirmation_code: confirmation_code,
  63. })
  64. log.Debug("facebook.Del 删除成功 userId=%d facebookId=%s", userId, facebookId)
  65. return
  66. }
  67. func Info(c *gin.Context) {
  68. var req struct {
  69. UserID int `json:"id" form:"id"`
  70. Sign string `json:"sign" form:"sign"`
  71. }
  72. if err := c.ShouldBind(&req); err != nil {
  73. log.Debug("%s query params err %v", "hall.controller.Info", err)
  74. c.String(http.StatusOK, "")
  75. return
  76. }
  77. log.Debug("facebook.controller.Info req ==> %+v", req)
  78. if req.UserID <= 0 {
  79. c.String(http.StatusOK, "Akun tidak valid")
  80. return
  81. }
  82. // 生成md5加密串
  83. checkContent := fmt.Sprintf("userId=fb.%d&key=%s", req.UserID, config.Server.Facebook_KEY)
  84. sign := public.GetMd5String(checkContent)
  85. if sign != req.Sign {
  86. c.String(http.StatusOK, "data ilegal")
  87. return
  88. }
  89. facebookId := fmt.Sprintf("fb.%d", req.UserID)
  90. userId := db.GetFacebook(facebookId)
  91. if userId > 0 {
  92. c.String(http.StatusOK, "Akun ini valid")
  93. return
  94. }
  95. c.String(http.StatusOK, "Akun telah dibatalkan")
  96. return
  97. }