蛋蛋星球-客户端
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

175 lines
5.0 KiB

  1. package hdl
  2. import (
  3. "applet/app/cfg"
  4. "applet/app/db"
  5. "applet/app/md"
  6. "applet/app/utils"
  7. "applet/app/utils/logx"
  8. "code.fnuoos.com/EggPlanet/egg_models.git/src/implement"
  9. "code.fnuoos.com/EggPlanet/egg_models.git/src/model"
  10. "code.fnuoos.com/EggPlanet/egg_system_rules.git"
  11. "code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit"
  12. "crypto/sha256"
  13. "encoding/hex"
  14. "encoding/json"
  15. "fmt"
  16. "github.com/gin-gonic/gin"
  17. "github.com/tidwall/gjson"
  18. "io/ioutil"
  19. "net/url"
  20. "strings"
  21. "time"
  22. )
  23. func CallbackAlipayFace(c *gin.Context) {
  24. body, _ := ioutil.ReadAll(c.Request.Body)
  25. decodeArgs, err := url.QueryUnescape(string(body))
  26. if err != nil {
  27. _ = logx.Warn(err)
  28. return
  29. }
  30. data, err := url.ParseQuery(decodeArgs)
  31. if err != nil {
  32. return
  33. }
  34. dataMap := make(map[string]interface{})
  35. for k := range data {
  36. dataMap[k] = data.Get(k)
  37. }
  38. callbackStr := utils.Serialize(dataMap)
  39. fmt.Println("支付宝回调数据", string(callbackStr))
  40. }
  41. func CallbackChuanshanjia(c *gin.Context) {
  42. egg_system_rules.Init(cfg.RedisAddr)
  43. userId := c.Query("user_id")
  44. transId := c.Query("trans_id")
  45. primeRit := c.Query("prime_rit")
  46. sign := c.Query("sign")
  47. extra := c.Query("extra")
  48. id := gjson.Get(extra, "id").String()
  49. uniqId := gjson.Get(extra, "uniqId").String()
  50. phonePlatform := strings.ToLower(gjson.Get(extra, "platform").String())
  51. platform := "chuanshanjia"
  52. isEnd, spaceKey := comm(c, id, primeRit, platform, phonePlatform)
  53. if isEnd == 1 {
  54. fmt.Println("isEnd")
  55. c.String(200, "{\"is_verify\":true,\"reason\":20000}")
  56. return
  57. }
  58. keyStr := spaceKey + ":" + transId
  59. // 1. 使用SHA256算法计算摘要
  60. hash := sha256.Sum256([]byte(keyStr))
  61. // 2. 将摘要转换为十六进制字符串
  62. signStr := hex.EncodeToString(hash[:])
  63. fmt.Println("keyStr:" + keyStr)
  64. fmt.Println("signStr:" + signStr)
  65. if strings.Contains(signStr, sign) == false {
  66. fmt.Println("签名不一致")
  67. c.String(200, "{\"is_verify\":true,\"reason\":50002}")
  68. return
  69. }
  70. isEnds := commDoing(c, platform, transId, userId, extra, primeRit, uniqId)
  71. if isEnds == 1 {
  72. fmt.Println("处理结束")
  73. c.String(200, "{\"is_verify\":true,\"reason\":20000}")
  74. return
  75. }
  76. c.String(200, "{\"is_verify\":true,\"reason\":20000}")
  77. return
  78. }
  79. func CallbackYoulianghui(c *gin.Context) {
  80. egg_system_rules.Init(cfg.RedisAddr)
  81. userId := c.Query("userid")
  82. transId := c.Query("transid")
  83. primeRit := c.Query("pid")
  84. sign := c.Query("sig")
  85. extra := c.Query("extrainfo")
  86. id := gjson.Get(extra, "id").String()
  87. uniqId := gjson.Get(extra, "uniqId").String()
  88. phonePlatform := strings.ToLower(gjson.Get(extra, "platform").String())
  89. platform := "youlianghui"
  90. isEnd, spaceKey := comm(c, id, primeRit, platform, phonePlatform)
  91. if isEnd == 1 {
  92. c.String(200, "success")
  93. return
  94. }
  95. keyStr := spaceKey + ":" + transId
  96. // 1. 使用SHA256算法计算摘要
  97. hash := sha256.Sum256([]byte(keyStr))
  98. // 2. 将摘要转换为十六进制字符串
  99. signStr := hex.EncodeToString(hash[:])
  100. fmt.Println(signStr)
  101. if strings.Contains(signStr, sign) == false {
  102. c.String(200, "success")
  103. return
  104. }
  105. isEnds := commDoing(c, platform, transId, userId, extra, primeRit, uniqId)
  106. if isEnds == 1 {
  107. c.String(200, "success")
  108. return
  109. }
  110. c.String(200, "success")
  111. return
  112. }
  113. // 公共处理
  114. func commDoing(c *gin.Context, platform, transId, userId, extra, primeRit, uniqId string) int {
  115. types := gjson.Get(extra, "type").String()
  116. exist, _ := db.Db.Where("platform=? and oid=?", platform, transId).Exist(&model.AdvertisingCallback{})
  117. if exist {
  118. c.String(200, "{\"is_verify\":true,\"reason\":20000}")
  119. return 1
  120. }
  121. var tmp = model.AdvertisingCallback{
  122. Platform: platform,
  123. Oid: transId,
  124. Uid: utils.StrToInt(userId),
  125. SpaceId: primeRit,
  126. UniqId: uniqId,
  127. CreateAt: time.Now(),
  128. }
  129. db.Db.Insert(&tmp)
  130. // 写入mq处理
  131. ch, err := rabbit.Cfg.Pool.GetChannel()
  132. if err == nil {
  133. defer ch.Release()
  134. }
  135. if types == "incentive_eggSmash" { //首页砸蛋
  136. arg := md.AdvertisingWatch{Id: utils.IntToStr(tmp.Id)}
  137. err := ch.PublishV2(md.EggAdvertisingQueueExchange, arg, md.EggAdvertisingSmash)
  138. if err != nil {
  139. ch.PublishV2(md.EggAdvertisingQueueExchange, arg, md.EggAdvertisingSmash)
  140. }
  141. }
  142. if types == "incentive_eggSign" { //首页签到
  143. arg := md.AdvertisingWatch{Id: utils.IntToStr(tmp.Id)}
  144. err := ch.PublishV2(md.EggAdvertisingQueueExchange, arg, md.EggAdvertisingSign)
  145. if err != nil {
  146. ch.PublishV2(md.EggAdvertisingQueueExchange, arg, md.EggAdvertisingSign)
  147. }
  148. }
  149. return 0
  150. }
  151. func comm(c *gin.Context, id, primeRit, platform, phonePlatform string) (int, string) {
  152. NewAdvertisingSpaceDb := implement.NewAdvertisingSpaceDb(db.Db)
  153. space, _ := NewAdvertisingSpaceDb.GetAdvertisingSpace(id)
  154. if space == nil {
  155. return 1, ""
  156. }
  157. spaceData := gjson.Get(space.Info, platform+"."+phonePlatform+"_ad_id").String()
  158. spaceList := make([]interface{}, 0)
  159. json.Unmarshal([]byte(spaceData), &spaceList)
  160. spaceKey := ""
  161. for _, v := range spaceList {
  162. v1, ok := v.(map[string]interface{})
  163. if ok == false {
  164. continue
  165. }
  166. if v1["id"] == primeRit { //找到对应广告位的key
  167. spaceKey = utils.AnyToString(v1["key"])
  168. }
  169. }
  170. return 0, spaceKey
  171. }