package withdrawctrl import ( "bytes" "errors" "fmt" "net/http" "strconv" "91porn-server/app/service/withdrawser" "91porn-server/common/log" "91porn-server/common/rchgutil" "github.com/gin-gonic/gin" ) // GoldFishCallBack 金鱼结构回调函数 func GoldFishCallBack(ctx *gin.Context) { if err := func() error { exchg := rchgutil.GoldFishExchangeRes{} if err := ctx.ShouldBindJSON(&exchg); err != nil { log.Error(fmt.Sprintf("GoldFish callback parameter bind fail error:%+v:", err)) return err } e := rchgutil.GoldFishExchange{} log.Info(fmt.Sprintf("GoldFish callback parameter data:%+v:", exchg)) buf := bytes.Buffer{} buf.WriteString(strconv.Itoa(exchg.Code)) buf.WriteString(exchg.Mark) buf.WriteString(exchg.MercID) buf.WriteString(exchg.Money) buf.WriteString(exchg.OID) buf.WriteString(exchg.Status) buf.WriteString(exchg.TradeNo) buf.WriteString(e.GetAppSecret()) if !rchgutil.VerifySign(exchg.Sign, buf.String()) { log.Error("GoldFish callback sign verify fail") return errors.New("check sign fail") } moneyf, err := strconv.ParseFloat(exchg.Money, 64) if err != nil { log.Error(fmt.Sprintf("GoldFish callback ParseFloat fail error:%+v:", err)) return err } moneyf = moneyf * 100 money := int64(moneyf) exchg.TradeNo = rchgutil.EChgIDDisassemble(exchg.TradeNo) if err = withdrawser.ExchgCallBack(exchg.TradeNo, exchg.OID, money, exchg.Status, exchg.Mark); err != nil { log.Error(fmt.Sprintf("GoldFish RechargeCallBack fail error:%+v:", err)) return err } return nil }(); err != nil { ctx.String(http.StatusBadRequest, "fail") return } ctx.String(http.StatusOK, "success") }