package report import ( "context" apiShanghu "duoduo/apis/shanghu" "duoduo/models/shanghu" "encoding/json" "fmt" "github.com/go-pay/gopay" "time" ) func CashOut() { for true { var cashOut shanghu.CashOut bm := make(gopay.BodyMap) cashOut.Status = 1 // 提现中 cashOutInfo, err := cashOut.GetCashOutByStatus() if err != nil { fmt.Println("GetCashOutByStatus err ", err.Error()) break } wechatV3, err := apiShanghu.NewWechatServiceV3("") if err != nil { break } bm.Set("need_query_detail", false) transferBatch, err := wechatV3.V3TransferMerchantQuery(context.Background(), cashOutInfo.PartnerTradeNo, bm) if err != nil { break } by, _ := json.Marshal(transferBatch) fmt.Println(string(by)) if transferBatch.Code != 0 { break } if transferBatch.Response.TransferBatch.FailNum == 0 && transferBatch.Response.TransferBatch.BatchStatus == "FINISHED" { //转账成功 cashOut.PartnerTradeNo = transferBatch.Response.TransferBatch.OutBatchNo cashOut.Status = 3 err = cashOut.UpdateCashOutStatus() if err != nil { break } } else if transferBatch.Response.TransferBatch.FailNum > 0 { //失败 cashOut.PartnerTradeNo = transferBatch.Response.TransferBatch.OutBatchNo cashOut.Status = 2 err = cashOut.UpdateCashOutStatus() if err != nil { break } } else if transferBatch.Response.TransferBatch.BatchStatus == "CLOSE" { cashOut.PartnerTradeNo = transferBatch.Response.TransferBatch.OutBatchNo cashOut.Status = 2 cashOut.FailRes = transferBatch.Response.TransferBatch.CloseReason err = cashOut.UpdateCashOutStatusClose() if err != nil { break } } else { time.Sleep(time.Second * 1) continue } } } func CashOutAccount() { for true { var cashOut shanghu.CashOut cashOut.AccountStatus = 0 //未分账 cashOut.Status = 3 //钱已到账为扣减金额 cashOutInfo, err := cashOut.GetCashOutByAccount() if err != nil { break } cashOut.AccountStatus = 3 //分账中 cashOut.ID = cashOutInfo.ID err = cashOut.UpdateCashOutAccountStatus() if err != nil { break } if cashOutInfo.AppID == "wxef36f8713d6469b5" { //b端 商户卡 var account shanghu.ClientPayTrans err = account.SettleSubMerchant(cashOutInfo.Amount, cashOutInfo.OpenID, cashOutInfo.ID) if err != nil { cashOut.AccountStatus = 2 //分账失败 cashOut.AccountFailRes = err.Error() cashOut.ID = cashOutInfo.ID cashOut.UpdateCashOutAccountStatus() continue } } else if cashOutInfo.AppID == "wx25357518f710b8ce" { //c端 周末传媒 var account shanghu.ClientPayTrans err = account.SettleSubClient(cashOutInfo.Amount, cashOutInfo.OpenID, cashOutInfo.ID) if err != nil { cashOut.AccountStatus = 2 //分账失败 cashOut.AccountFailRes = err.Error() cashOut.ID = cashOutInfo.ID cashOut.UpdateCashOutAccountStatus() continue } } else { continue } } }