- 优化API参考文档的段落排版和表格对齐 - 补充签名机制和支付接口的详细说明- 完善错误码与解决方案的描述 - 统一文档中的代码引用和示例格式 docs(beego):优化Beego框架集成文档结构 - 改进Beego框架文档的换行和段落布局 - 完善控制器继承和中间件集成的说明 - 优化ORM模型注册和路由机制的描述- 统一文档中的技术术语表达方式 docs(docker): 改进Docker部署指南文档格式 - 优化Dockerfile多阶段构建的描述 - 完善docker-compose配置文件说明 - 改进本地部署步骤和故障排除指南- 统一文档中的命令行示例格式feat(supplier): 新增LianIns卡发送任务类型- 在枚举中添加SendCardTaskTypeEnumLianIns类型 - 更新GetAllSendCardTaskType函数返回值 - 实现LianIns任务类型的工厂方法 chore(deps): 更新项目依赖版本 - 升级github.com/bytedance/sonic至v1.14.2 - 升级github.com/duke-git/lancet/v2至v2.3.8 - 升级github.com/bytedance/sonic/loader至v0.4.0 - 移除natefinch/lumberjack和yaml.v2依赖- 清理间接依赖中的toml库引用
203 lines
8.3 KiB
Go
203 lines
8.3 KiB
Go
package third_party
|
||
|
||
import (
|
||
"context"
|
||
"fmt"
|
||
"gateway/internal/config"
|
||
"gateway/internal/models/merchant"
|
||
"gateway/internal/models/order"
|
||
"gateway/internal/models/road"
|
||
"gateway/internal/service"
|
||
"gateway/internal/service/supplier"
|
||
"slices"
|
||
|
||
"github.com/duke-git/lancet/v2/maputil"
|
||
|
||
"github.com/beego/beego/v2/core/logs"
|
||
)
|
||
|
||
// 添加新的上游通道时,需要添加这里
|
||
var supplierCode2Name = map[string]string{
|
||
"JD": "京东充值卡",
|
||
"MF178": "178卡密",
|
||
"APPLE": "苹果itunes充值",
|
||
"TMALLGAME_CONFIRM": "天猫游戏充值(确认收货)",
|
||
"TMALLGAME_EVALUATION": "天猫游戏充值(好评)",
|
||
"WalMart": "沃尔玛充值",
|
||
"WalMartSelf": "沃尔玛充值(自有)",
|
||
"APPLESHARK": "苹果itunes充值(苹果鲨鱼)",
|
||
"FAT_SIX": "胖小六",
|
||
"SELF_THIRD": "自有上游",
|
||
"STAR_SILENCE": "星寂",
|
||
"SCREAM": "尖叫核销平台",
|
||
"QIXI": "星空核销平台",
|
||
"CTripSelf": "携程(自有)",
|
||
"AiBo": "爱博核销平台",
|
||
"Ninja": "忍者API",
|
||
"Heepay": "俊卡官方接口",
|
||
"EGGPLANT": "茄子核销平台",
|
||
"FAVORABLE_CLOUDS": "爱彼核销平台",
|
||
"BATCH_SIX": "666核销充值",
|
||
"CARELESS": "无心核销平台",
|
||
"YUHV": "祥云核销平台",
|
||
"JX": "柠檬核销平台",
|
||
"MIDDLE_OPEN": "中盛吧",
|
||
"SHANFU": "闪付",
|
||
"TRADE_CAT": "贸易猫",
|
||
"LUBAN": "鲁班",
|
||
"MYSELF": "自有三方",
|
||
"WOWSPAY": "沃支付核销平台",
|
||
"FLYFISH": "飞鱼核销平台",
|
||
"FLY_FISH_V2": "飞鱼核销平台(V2)",
|
||
"PHP": "自有核销平台",
|
||
"JINKE": "金科核销平台",
|
||
"SHENGTIAN": "盛天核销平台",
|
||
"SESAME": "芝麻核销平台",
|
||
"MAGIC_FISH": "魔鱼核销平台",
|
||
"WANXIN": "万新核销平台",
|
||
"WTR": "哆咪核销平台",
|
||
"UP": "UP核销平台",
|
||
"NUCLEAR": "玖隆核销平台",
|
||
"SDPAY": "闪电核销平台",
|
||
"ORIGIN": "山禾",
|
||
"LIANINS": "燕子核销平台",
|
||
}
|
||
|
||
var registerSupplier = make(map[string]supplier.PayInterface)
|
||
|
||
// 注册各种上游的支付接口
|
||
func init() {
|
||
registerSupplier["JD"] = new(JDCardImpl)
|
||
logs.Notice(CheckSupplierByCode("JD"))
|
||
registerSupplier["APPLE"] = new(AppleCardImpl)
|
||
logs.Notice(CheckSupplierByCode("APPLE"))
|
||
registerSupplier["MF178"] = new(MFCardV2Impl)
|
||
logs.Notice(CheckSupplierByCode("MF178"))
|
||
registerSupplier["TMALLGAME_CONFIRM"] = new(TMAllGameImpl)
|
||
logs.Notice(CheckSupplierByCode("TMALLGAME_CONFIRM"))
|
||
registerSupplier["TMALLGAME_EVALUATION"] = new(TMAllGameImpl)
|
||
logs.Notice(CheckSupplierByCode("TMALLGAME_EVALUATION"))
|
||
registerSupplier["WalMart"] = new(WalMartImpl)
|
||
logs.Notice(CheckSupplierByCode("WalMart"))
|
||
registerSupplier["WalMartSelf"] = new(WalmartSelfImpl)
|
||
logs.Notice(CheckSupplierByCode("WalMartSelf"))
|
||
registerSupplier["APPLESHARK"] = new(AppleCardSharkImpl)
|
||
logs.Notice(CheckSupplierByCode("APPLESHARK"))
|
||
registerSupplier["FAT_SIX"] = new(FatSixImpl)
|
||
logs.Notice(CheckSupplierByCode("FAT_SIX"))
|
||
registerSupplier["SELF_THIRD"] = new(SelfThirdImpl)
|
||
logs.Notice(CheckSupplierByCode("SELF_THIRD"))
|
||
registerSupplier["STAR_SILENCE"] = new(StarSilenceImpl)
|
||
logs.Notice(CheckSupplierByCode("STAR_SILENCE"))
|
||
registerSupplier["SCREAM"] = new(ScreamImpl)
|
||
logs.Notice(CheckSupplierByCode("SCREAM"))
|
||
registerSupplier["QIXI"] = new(QiXiCardImpl)
|
||
logs.Notice(CheckSupplierByCode("QIXI"))
|
||
registerSupplier["CTripSelf"] = new(CTripSelfImpl)
|
||
logs.Notice(CheckSupplierByCode("CTripSelf"))
|
||
registerSupplier["AiBo"] = new(AiboCardImpl)
|
||
logs.Notice(CheckSupplierByCode("AiBo"))
|
||
registerSupplier["Ninja"] = new(NinjaCardImpl)
|
||
logs.Notice(CheckSupplierByCode("Ninja"))
|
||
registerSupplier["Heepay"] = new(HeepayImpl)
|
||
logs.Notice(CheckSupplierByCode("Heepay"))
|
||
registerSupplier["EGGPLANT"] = new(EggplantImpl)
|
||
logs.Notice(CheckSupplierByCode("EGGPLANT"))
|
||
registerSupplier["FAVORABLE_CLOUDS"] = new(FavorableCloudsCardImpl)
|
||
logs.Notice(CheckSupplierByCode("FAVORABLE_CLOUDS"))
|
||
registerSupplier["BATCH_SIX"] = new(BatchSixImpl)
|
||
logs.Notice(CheckSupplierByCode("BATCH_SIX"))
|
||
registerSupplier["CARELESS"] = new(CarelessImpl)
|
||
logs.Notice(CheckSupplierByCode("CARELESS"))
|
||
registerSupplier["YUHV"] = new(YuhvCardImpl)
|
||
logs.Notice(CheckSupplierByCode("YUHV"))
|
||
registerSupplier["JX"] = new(JXImpl)
|
||
logs.Notice(CheckSupplierByCode("JX"))
|
||
registerSupplier["MIDDLE_OPEN"] = new(MiddleOpenImpl)
|
||
logs.Notice(CheckSupplierByCode("MIDDLE_OPEN"))
|
||
registerSupplier["SHANFU"] = new(ShanFuImpl)
|
||
logs.Notice(CheckSupplierByCode("SHANFU"))
|
||
registerSupplier["TRADE_CAT"] = new(TradeCatCardImpl)
|
||
logs.Notice(CheckSupplierByCode("TRADE_CAT"))
|
||
registerSupplier["LUBAN"] = new(LubanImpl)
|
||
logs.Notice(CheckSupplierByCode("LUBAN"))
|
||
registerSupplier["MYSELF"] = new(MyselfCardImpl)
|
||
logs.Notice(CheckSupplierByCode("MYSELF"))
|
||
registerSupplier["WOWSPAY"] = new(WowsPayImpl)
|
||
logs.Notice(CheckSupplierByCode("WOWSPAY"))
|
||
registerSupplier["FLYFISH"] = new(FlyFishImpl)
|
||
logs.Notice(CheckSupplierByCode("FLYFISH"))
|
||
registerSupplier["FLY_FISH_V2"] = new(FlyFishV2Impl)
|
||
logs.Notice(CheckSupplierByCode("FlyFishV2"))
|
||
registerSupplier["PHP"] = new(PhpCardImpl)
|
||
logs.Notice(CheckSupplierByCode("PHP"))
|
||
registerSupplier["JINKE"] = new(JinkeImpl)
|
||
logs.Notice(CheckSupplierByCode("JINKE"))
|
||
registerSupplier["SHENGTIAN"] = new(ShengtianImpl)
|
||
logs.Notice(CheckSupplierByCode("SHENGTIAN"))
|
||
registerSupplier["SESAME"] = new(SesameImpl)
|
||
logs.Notice(CheckSupplierByCode("SESAME"))
|
||
registerSupplier["SDPAY"] = new(SdPayImpl)
|
||
logs.Notice(CheckSupplierByCode("SDPAY"))
|
||
registerSupplier["MAGIC_FISH"] = new(MagicFishImpl)
|
||
logs.Notice(CheckSupplierByCode("MAGIC_FISH"))
|
||
registerSupplier["WANXIN"] = new(WanXinImpl)
|
||
logs.Notice(CheckSupplierByCode("WANXIN"))
|
||
registerSupplier["WTR"] = new(WtrImpl)
|
||
logs.Notice(CheckSupplierByCode("WTR"))
|
||
registerSupplier["UP"] = new(UpImpl)
|
||
logs.Notice(CheckSupplierByCode("NUCLEAR"))
|
||
registerSupplier["NUCLEAR"] = new(NuclearImpl)
|
||
logs.Notice(CheckSupplierByCode("UP"))
|
||
registerSupplier["ORIGIN"] = new(OriginImpl)
|
||
logs.Notice(CheckSupplierByCode("ORIGIN"))
|
||
registerSupplier["LIANINS"] = new(LianInsImpl)
|
||
logs.Notice(CheckSupplierByCode("LIANINS"))
|
||
}
|
||
|
||
func GetPaySupplierByCode(code string) supplier.PayInterface {
|
||
return registerSupplier[code]
|
||
}
|
||
|
||
func GetThirdSupplierKeys() []string {
|
||
keys := maputil.Keys(supplierCode2Name)
|
||
return slices.DeleteFunc(keys, func(item string) bool {
|
||
return slices.Contains([]string{"JD", "APPLE", "TMALLGAME_CONFIRM", "TMALLGAME_EVALUATION",
|
||
"WalMartSelf", "SELF_THIRD", "CTripSelf"}, item)
|
||
})
|
||
}
|
||
|
||
func CheckSupplierByCode(code string) string {
|
||
for k, v := range supplierCode2Name {
|
||
if k == code {
|
||
return v + ",注册完毕"
|
||
}
|
||
}
|
||
return "未找到上游名称,注册有问题。"
|
||
}
|
||
|
||
// SolvePaySuccessByAmountDifferent 处理金额异议
|
||
func SolvePaySuccessByAmountDifferent(ctx context.Context, bankOrderId string, factAmount float64, trxNo string, cardReturnData string) bool {
|
||
orderInfo := order.GetOrderByBankOrderId(ctx, bankOrderId)
|
||
roadInfo := road.GetRoadInfoByRoadUid(ctx, orderInfo.RoadUid)
|
||
|
||
if roadInfo.IsAllowDifferentResend == 0 {
|
||
return service.SolvePayFail(ctx, bankOrderId, trxNo, fmt.Sprintf("金额不一致 卡面金额:%.2f 实际金额:%.2f", orderInfo.OrderAmount, factAmount))
|
||
}
|
||
if orderInfo.SendCount >= 3 {
|
||
return service.SolvePayFail(ctx, bankOrderId, trxNo, fmt.Sprintf("金额不一致 卡面金额:%.2f 实际金额:%.2f", orderInfo.OrderAmount, factAmount))
|
||
}
|
||
|
||
order.UpdateSendCount(ctx, bankOrderId)
|
||
order.UpdateOrderAmount(ctx, bankOrderId, factAmount)
|
||
order.UpdateSendRecord(ctx, bankOrderId, orderInfo.SendRecord+"\n现在的订单金额:"+fmt.Sprintf("%.2f", orderInfo.FactAmount)+"\n"+cardReturnData)
|
||
_ = order.UpdateOrderStatus(ctx, bankOrderId, config.WAIT, "金额异议")
|
||
supplierByCode := GetPaySupplierByCode(roadInfo.ProductUid)
|
||
if supplierByCode == nil {
|
||
return false
|
||
}
|
||
merchantInfo := merchant.GetMerchantByUid(ctx, orderInfo.MerchantUid)
|
||
supplierByCode.Scan(ctx, orderInfo, roadInfo, merchantInfo)
|
||
return true
|
||
}
|