Files
wechat_ipad_pro/api/service/payService.go
2026-02-17 13:06:23 +08:00

227 lines
9.3 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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, "")
})
}