package rechargectrl import ( "91porn-server/app/service/proxyser" "91porn-server/common" "bytes" "encoding/json" "errors" "fmt" "io" "net/http" "time" "91porn-server/app/service/rechargeser" "91porn-server/common/log" "91porn-server/common/rchgutil" "github.com/gin-gonic/gin" ) // CallBack 支付回调回调函数 func CallBack(ctx *gin.Context) { var transNo string = "" var payMoney int64 = 0 success, err := func() (string, error) { var err error name := ctx.Param("name") rchg := rchgutil.GetNotifyBack(name) if rchg == nil { log.Error(fmt.Sprintf("%s callback request path invalid.", name)) return "", errors.New(" request name invalid") } ata, _ := ctx.GetRawData() ctx.Request.Body = io.NopCloser(bytes.NewBuffer(ata)) bodystr := string(ata) log.Info(fmt.Sprintf("%s callback request url +%s, body:%s,contenttype:%s", name, ctx.Request.URL, bodystr, ctx.ContentType())) if err = ctx.ShouldBind(rchg); err != nil { log.Error(fmt.Sprintf("%s callback parameter bind fail error:%+v:", name, err)) return "", err } bs, _ := json.Marshal(rchg) log.Info(fmt.Sprintf("%s callback parameter data:%+v:", name, string(bs))) rb, err := rchg.Notify() if err != nil { return "", err } rb.TransNo = rchgutil.RChgIDDisassemble(rb.TransNo) if rb.SuccessAt.IsZero() { rb.SuccessAt = time.Now() } if rb.PaymentAt.IsZero() { rb.PaymentAt = rb.SuccessAt } if err = rechargeser.RechargeCallBack(ctx, rb.OID, rb.PayMoney, rb.TransNo, rb.Code, rb.PaymentAt, rb.SuccessAt); err != nil { log.Error(fmt.Sprintf("%s RechargeCallBack fail error:%+v:", name, err)) } transNo = rb.TransNo payMoney = rb.PayMoney return rchg.Success(), err }() if err != nil { ctx.String(http.StatusBadRequest, "fail") return } else { //异步处理全民代理分成 common.Go(func() { proxyser.HandelProxyRechargeCommission(nil, transNo, payMoney) }) ctx.String(http.StatusOK, success) } }