Files

227 lines
9.3 KiB
Go
Raw Permalink Normal View History

2026-02-17 13:06:23 +08:00
package service
import (
"encoding/json"
"strconv"
"xiawan/wx/api/req"
"xiawan/wx/api/vo"
"xiawan/wx/clientsdk"
"xiawan/wx/clientsdk/baseinfo"
"xiawan/wx/srv/wxface"
)
// 获取银行卡信息
func GetBandCardListService(queryKey string) vo.DTO {
return checkExIdPerformNoCreateConnect(queryKey, func(iwxConnect wxface.IWXConnect, newIWXConnect bool) vo.DTO {
wxAccount := iwxConnect.GetWXAccount()
loginState := wxAccount.GetLoginState()
//判断在线情况
if loginState == baseinfo.MMLoginStateNoLogin {
return vo.NewFail("该账号需要重新登录loginState == MMLoginStateNoLogin ")
} else if !iwxConnect.CheckOnLineStatus() {
return vo.NewFail("账号离线,自动上线失败loginState == " + strconv.Itoa(int(wxAccount.GetLoginState())))
}
reqInvoker := iwxConnect.GetWXReqInvoker()
tmpReqItem := &baseinfo.TenPayReqItem{}
tmpReqItem.CgiCMD = 72
tmpReqItem.ReqText = ""
tenPayResp, err := reqInvoker.SendBandCardRequest(tmpReqItem)
if err != nil {
return vo.NewFail("GetBandCardListService err:" + err.Error())
}
// 解析响应
retResp := &baseinfo.TenPayResp{}
retText := tenPayResp.GetRetText().GetBuffer()
err = json.Unmarshal(retText, retResp)
if err != nil {
return vo.NewFail("查询QB信息失败")
}
return vo.NewSuccessObj(retResp, "")
})
}
// 生成自定义二维码
func GeneratePayQCodeService(queryKey string, req req.GeneratePayQCodeModel) vo.DTO {
return checkExIdPerformNoCreateConnect(queryKey, func(iwxConnect wxface.IWXConnect, newIWXConnect bool) vo.DTO {
wxAccount := iwxConnect.GetWXAccount()
loginState := wxAccount.GetLoginState()
//判断在线情况
if loginState == baseinfo.MMLoginStateNoLogin {
return vo.NewFail("该账号需要重新登录loginState == MMLoginStateNoLogin ")
} else if !iwxConnect.CheckOnLineStatus() {
return vo.NewFail("账号离线,自动上线失败loginState == " + strconv.Itoa(int(wxAccount.GetLoginState())))
}
reqInvoker := iwxConnect.GetWXReqInvoker()
var tenpayUrl = "delay_confirm_flag=0&desc=" + req.Name + "&fee=" + req.Money + "&fee_type=CNY&pay_scene=31&receiver_name=" + wxAccount.GetUserInfo().WxId + "&scene=31&transfer_scene=2"
wcPaySign, err := clientsdk.TenPaySignDes3(tenpayUrl, "%^&*Tenpay!@#$")
if err != nil {
return vo.NewFail("no")
}
tenpayUrl += "&WCPaySign=" + wcPaySign
tmpReqItem := &baseinfo.TenPayReqItem{}
tmpReqItem.CgiCMD = 94
tmpReqItem.ReqText = tenpayUrl
tenPayResp, err := reqInvoker.SendTenPayRequest(tmpReqItem)
if err != nil {
return vo.NewFail("GetBandCardListService err:" + err.Error())
}
// 解析响应
retResp := &baseinfo.GeneratePayQCodeResp{}
retText := tenPayResp.GetRetText().GetBuffer()
err = json.Unmarshal(retText, retResp)
if err != nil {
return vo.NewFail("查询QB信息失败")
}
return vo.NewSuccessObj(retResp, "")
})
}
// CollectMoneyService 确认收款
func CollectMoneyService(queryKey string, req req.CollectmoneyModel) vo.DTO {
return checkExIdPerformNoCreateConnect(queryKey, func(iwxConnect wxface.IWXConnect, newIWXConnect bool) vo.DTO {
wxAccount := iwxConnect.GetWXAccount()
loginState := wxAccount.GetLoginState()
//判断在线情况
if loginState == baseinfo.MMLoginStateNoLogin {
return vo.NewFail("该账号需要重新登录loginState == MMLoginStateNoLogin ")
} else if !iwxConnect.CheckOnLineStatus() {
return vo.NewFail("账号离线,自动上线失败loginState == " + strconv.Itoa(int(wxAccount.GetLoginState())))
}
reqInvoker := iwxConnect.GetWXReqInvoker()
tenpayUrl := "invalid_time=" + req.InvalidTime + "&op=confirm&total_fee=0&trans_id=" + req.TransFerId + "&transaction_id=" + req.TransactionId + "&username=" + req.ToUserName
wcPaySign, err := clientsdk.TenPaySignDes3(tenpayUrl, "%^&*Tenpay!@#$")
if err != nil {
return vo.NewFail("no")
}
tenpayUrl += "&WCPaySign=" + wcPaySign
tmpReqItem := &baseinfo.TenPayReqItem{}
tmpReqItem.CgiCMD = 85
tmpReqItem.ReqText = tenpayUrl
tenPayResp, err := reqInvoker.SendTenPayRequest(tmpReqItem)
if err != nil {
return vo.NewFail("CollectMoneyService err:" + err.Error())
}
return vo.NewSuccessObj(tenPayResp, "")
})
}
// 拆红包
func OpenRedEnvelopesService(queryKey string, req baseinfo.HongBaoItem) vo.DTO {
return checkExIdPerformNoCreateConnect(queryKey, func(iwxConnect wxface.IWXConnect, newIWXConnect bool) vo.DTO {
wxAccount := iwxConnect.GetWXAccount()
loginState := wxAccount.GetLoginState()
//判断在线情况
if loginState == baseinfo.MMLoginStateNoLogin {
return vo.NewFail("该账号需要重新登录loginState == MMLoginStateNoLogin ")
} else if !iwxConnect.CheckOnLineStatus() {
return vo.NewFail("账号离线,自动上线失败loginState == " + strconv.Itoa(int(wxAccount.GetLoginState())))
}
reqInvoker := iwxConnect.GetWXReqInvoker()
rsp, err := reqInvoker.SendOpenRedEnvelopesRequest(&req)
if err != nil {
return vo.NewFail("CollectMoneyService err:" + err.Error())
}
return vo.NewSuccessObj(rsp, "")
})
}
// 创建红包
func WXCreateRedPacketService(queryKey string, req baseinfo.RedPacket) vo.DTO {
return checkExIdPerformNoCreateConnect(queryKey, func(iwxConnect wxface.IWXConnect, newIWXConnect bool) vo.DTO {
wxAccount := iwxConnect.GetWXAccount()
loginState := wxAccount.GetLoginState()
//判断在线情况
if loginState == baseinfo.MMLoginStateNoLogin {
return vo.NewFail("该账号需要重新登录loginState == MMLoginStateNoLogin ")
} else if !iwxConnect.CheckOnLineStatus() {
return vo.NewFail("账号离线,自动上线失败loginState == " + strconv.Itoa(int(wxAccount.GetLoginState())))
}
reqInvoker := iwxConnect.GetWXReqInvoker()
rsp, err := reqInvoker.SendWXCreateRedPacketRequest(&req)
if err != nil {
return vo.NewFail("CollectMoneyService err:" + err.Error())
}
return vo.NewSuccessObj(rsp, "")
})
}
// 查看红包详情
func QueryRedEnvelopesDetailService(queryKey string, req baseinfo.HongBaoItem) vo.DTO {
return checkExIdPerformNoCreateConnect(queryKey, func(iwxConnect wxface.IWXConnect, newIWXConnect bool) vo.DTO {
wxAccount := iwxConnect.GetWXAccount()
loginState := wxAccount.GetLoginState()
//判断在线情况
if loginState == baseinfo.MMLoginStateNoLogin {
return vo.NewFail("该账号需要重新登录loginState == MMLoginStateNoLogin ")
} else if !iwxConnect.CheckOnLineStatus() {
return vo.NewFail("账号离线,自动上线失败loginState == " + strconv.Itoa(int(wxAccount.GetLoginState())))
}
reqInvoker := iwxConnect.GetWXReqInvoker()
rsp, err := reqInvoker.SendRedEnvelopesDetailRequest(&req)
if err != nil {
return vo.NewFail("QueryRedEnvelopesDetailService err:" + err.Error())
}
return vo.NewSuccessObj(string(rsp.GetRetText().GetBuffer()), "")
})
}
// 查看红包领取列表
func GetRedPacketListService(queryKey string, req baseinfo.GetRedPacketList) vo.DTO {
return checkExIdPerformNoCreateConnect(queryKey, func(iwxConnect wxface.IWXConnect, newIWXConnect bool) vo.DTO {
wxAccount := iwxConnect.GetWXAccount()
loginState := wxAccount.GetLoginState()
//判断在线情况
if loginState == baseinfo.MMLoginStateNoLogin {
return vo.NewFail("该账号需要重新登录loginState == MMLoginStateNoLogin ")
} else if !iwxConnect.CheckOnLineStatus() {
return vo.NewFail("账号离线,自动上线失败loginState == " + strconv.Itoa(int(wxAccount.GetLoginState())))
}
reqInvoker := iwxConnect.GetWXReqInvoker()
rsp, err := reqInvoker.SendGetRedPacketListRequest(&req)
if err != nil {
return vo.NewFail("QueryRedEnvelopesDetailService err:" + err.Error())
}
return vo.NewSuccessObj(string(rsp.GetRetText().GetBuffer()), "")
})
}
// CreatePreTransferService 创建转账
func CreatePreTransferService(queryKey string, req *req.CreatePreTransfer) vo.DTO {
return checkExIdPerformNoCreateConnect(queryKey, func(iwxConnect wxface.IWXConnect, newIWXConnect bool) vo.DTO {
wxAccount := iwxConnect.GetWXAccount()
loginState := wxAccount.GetLoginState()
//判断在线情况
if loginState == baseinfo.MMLoginStateNoLogin {
return vo.NewFail("该账号需要重新登录loginState == MMLoginStateNoLogin ")
} else if !iwxConnect.CheckOnLineStatus() {
return vo.NewFail("账号离线,自动上线失败loginState == " + strconv.Itoa(int(wxAccount.GetLoginState())))
}
reqInvoker := iwxConnect.GetWXReqInvoker()
tenPayResp, err := reqInvoker.SendCreatePreTransferRequest(req)
if err != nil {
return vo.NewFail("CreatePreTransferService err:" + err.Error())
}
return vo.NewSuccessObj(tenPayResp, "")
})
}
// ConfirmPreTransferService 确认转账
func ConfirmPreTransferService(queryKey string, req *req.ConfirmPreTransfer) vo.DTO {
return checkExIdPerformNoCreateConnect(queryKey, func(iwxConnect wxface.IWXConnect, newIWXConnect bool) vo.DTO {
wxAccount := iwxConnect.GetWXAccount()
loginState := wxAccount.GetLoginState()
//判断在线情况
if loginState == baseinfo.MMLoginStateNoLogin {
return vo.NewFail("该账号需要重新登录loginState == MMLoginStateNoLogin ")
} else if !iwxConnect.CheckOnLineStatus() {
return vo.NewFail("账号离线,自动上线失败loginState == " + strconv.Itoa(int(wxAccount.GetLoginState())))
}
reqInvoker := iwxConnect.GetWXReqInvoker()
tenPayResp, err := reqInvoker.SendConfirmPreTransferRequest(req)
if err != nil {
return vo.NewFail("ConfirmPreTransferService err:" + err.Error())
}
return vo.NewSuccessObj(tenPayResp, "")
})
}