control.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package google
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "io"
  6. "net/http"
  7. "os"
  8. "strings"
  9. "bet24.com/log"
  10. "bet24.com/servers/payment/config"
  11. "bet24.com/servers/payment/db"
  12. "github.com/gin-gonic/gin"
  13. "golang.org/x/oauth2"
  14. "golang.org/x/oauth2/google"
  15. coreClient "bet24.com/servers/coreservice/client"
  16. )
  17. func Verify(c *gin.Context) {
  18. var req Req_Google
  19. if err := c.ShouldBind(&req); err != nil {
  20. log.Error("google.verify get params fail %v", err)
  21. c.String(http.StatusOK, "google.Verify get params fail %v", err)
  22. return
  23. }
  24. ipAddress := strings.Split(c.Request.RemoteAddr, ":")[0]
  25. objLog := db.NewGoogleAddLog()
  26. objLog.In.UserID = req.UserID
  27. objLog.In.PartnerID = req.PartnerID
  28. objLog.In.ProductID = req.ProductId
  29. objLog.In.Price = req.Price
  30. objLog.In.Token = req.Token
  31. objLog.In.IpAddress = ipAddress
  32. go objLog.DoAction()
  33. packageName := req.PackageName
  34. if packageName == "" {
  35. packageName = config.Server.PackageName
  36. }
  37. googleApiFile := "conf/google-api.json"
  38. if packageName == "forest.leaf.bigdog" {
  39. googleApiFile = "conf/google-bigdog.json"
  40. } else {
  41. packageFile := fmt.Sprintf("conf/%s.json", packageName)
  42. _, err := os.ReadFile(packageFile) // PUT your credential json file
  43. if err == nil {
  44. googleApiFile = packageFile
  45. }
  46. }
  47. data, err := os.ReadFile(googleApiFile) // PUT your credential json file
  48. if err != nil {
  49. log.Error("google.verify ReadFile %v", err)
  50. c.String(http.StatusOK, "google.verify ReadFile %v", err)
  51. return
  52. }
  53. log.Debug("google.Verify using api file %s", googleApiFile)
  54. confJSON, err := google.JWTConfigFromJSON(data, "https://www.googleapis.com/auth/androidpublisher")
  55. if err != nil {
  56. log.Error("google.verify JWTConfigFromJson conf %v", err)
  57. c.String(http.StatusOK, "google.verify JWTConfigFromJson conf %v", err)
  58. return
  59. }
  60. client := confJSON.Client(oauth2.NoContext)
  61. resp, err := client.Get(
  62. fmt.Sprintf("https://www.googleapis.com/androidpublisher/v3/applications/%s/purchases/products/%s/tokens/%s",
  63. packageName,
  64. req.ProductId,
  65. req.Token))
  66. if err != nil {
  67. log.Error("google.Verify Get err: %v", err)
  68. c.String(http.StatusOK, "google.verify Get err: %v", err)
  69. return
  70. }
  71. body, err := io.ReadAll(resp.Body)
  72. log.Debug("response:%v ", string(body))
  73. appResult := &GoogleIAP{}
  74. err = json.Unmarshal(body, &appResult)
  75. if len(appResult.OrderId) <= 0 {
  76. log.Error("google.verify orderId is empty")
  77. c.String(http.StatusOK, "google.verify orderId is empty")
  78. return
  79. }
  80. objSuccess := db.NewGoogleAddSuccessLog()
  81. objSuccess.In.UserID = req.UserID
  82. objSuccess.In.Token = appResult.OrderId
  83. objSuccess.In.ProductID = req.ProductId
  84. objSuccess.In.Price = req.Price
  85. objSuccess.In.PartnerID = req.PartnerID
  86. objSuccess.In.ResponseIAP = string(body)
  87. objSuccess.In.IpAddress = ipAddress
  88. objSuccess.DoAction()
  89. //操作成功,给道具
  90. if objSuccess.Out.RetCode == 1 {
  91. //充值
  92. resp := coreClient.Recharge(req.UserID, req.ProductId)
  93. log.Debug("%s 充值成功 %+v", "google.Verify", resp)
  94. }
  95. c.String(http.StatusOK, "success")
  96. return
  97. }
  98. func RewardAD(c *gin.Context) {
  99. //log.Debug("google.RewardAD %v", *c)
  100. c.String(http.StatusOK, "OK")
  101. }