Files
kami_gateway/internal/service/supplier/third_party/init.go
danial ea089b7be8 docs(wiki): 更新API参考文档格式与内容
- 优化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库引用
2025-11-04 16:04:08 +08:00

203 lines
8.3 KiB
Go
Raw 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 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
}