daxpay
|
5b8e152e04
|
feat(artemis): 支持 embedded/native 双模式切换,环境变量注入凭证
- common-artemis 引入 artemis-jms-server,使 spring.artemis.mode=embedded 可用
- dev 默认 embedded(无需独立 broker 容器),prod 默认 native(连独立容器)
- 凭证/地址全部环境变量化(ARTEMIS_MODE/BROKER_URL/USER/PASSWORD/DATA_DIR)
- prod 凭证改空串兜底,embedded 模式不传也不报错;native 由 installer 注入
- embedded 持久化开启(journal 落盘,支付超时/通知消息重启不丢)
- .gitignore 忽略 Artemis 运行时数据目录 data/
|
2026-08-11 08:52:41 +08:00 |
|
daxpay
|
0d747ee782
|
feat(cache): 二级缓存支持开关,总开关全关 + L1 可单独关闭
- Cache.enabled 总开关:默认 true,关则 L1+L2 一并 NoOp(穿透到方法)
- Cache.L1.enabled 单独开关:默认 true,总开关开时可关 L1 留 L2(纯 Redis 模式)
- MultiLevelCache 按 cacheEnabled/l1Enabled 分发读写删;L1 关闭时广播仍发,兼容集群混合配置
- CachingConfiguration 启动日志输出当前缓存模式,便于排查
|
2026-08-11 08:49:08 +08:00 |
|
daxpay
|
e394c45afa
|
refactor(risk): 省市地区拦截合并为地区拦截开关并新增 IPv6 地区匹配
- provinceBlacklistEnabled/cityBlacklistEnabled 合并为 regionBlacklistEnabled,旧字段 @Deprecated 兼容迁移(jsonb 读取时自动合并清理)
- 新增 ipv6MatchEnabled 开关,IPv6 地域检查默认关闭(NetUtil.isInnerIP 仅支持 IPv4 需分支隔离)
- 省级名单命中后不再执行市级检查,一次 ip2region 解析同时完成省市两级匹配
- 重写 DefaultPayRiskChecker 单测(41 个),验证合并迁移与 IPv6 分支
|
2026-08-10 20:49:00 +08:00 |
|
daxpay
|
6d5395758e
|
feat(alloc): 新增分账功能,支持三通道分账、开放API与分账订单管理菜单
- 支付宝/微信/抖音三通道分账对接(发起/同步/回调/状态机/延迟同步MQ)
- 支付下单透传分账标记(allocation),分账订单资金冻结
- 新增 /admin/alloc、/mch/alloc、/unipay alloc-order|alloc 查询与同步接口
- 新增分账订单/明细/接收方类型枚举 i18n(10 语种)与分账错误码/校验消息
- 分账订单菜单种子(admin=608 / merchant=91127)与分账表升级脚本
|
2026-08-10 20:46:16 +08:00 |
|
daxpay
|
751f4cedfc
|
feat(ip-region): ip2region 支持 IPv6 双栈查询与商业版数据版本兼容
- IpToRegionService 双栈分发: v4/v6 各自独立 Searcher 与缓存, 按 IP 格式路由
- 新增 Ip2regionDataVersion 枚举(开源/基础/高级/专业版), v4/v6 可独立配置数据版本
- IpRegion.init 按下标映射表解析, 商业三档统一 country=1 province=2 city=3 isp=5 国家码取末段
- yml 新增 data-version / ipv6-data-version 配置, 默认 open_source 向后兼容
- IpRegionTest 新增 6 个商业版下标映射用例(基础/高级/专业/国外/直辖市/重载一致性)
|
2026-08-10 13:53:12 +08:00 |
|
daxpay
|
1d8fd4c4a2
|
chore(release): 升级至 4.0.0-beta3
|
2026-08-09 08:46:37 +08:00 |
|
daxpay
|
b712a91d9e
|
feat(transfer): 转账收款人敏感字段加密存储(AES-256-GCM) + 展示脱敏 + 重试强制重填
- 三通道转账单(支付宝/抖音/微信)收款人账号/姓名接入 DataEncryptTypeHandler 加密存储
- 新增 PayeeDesensitizeUtil: 姓名首尾脱敏, 手机号/邮箱按收款类型脱敏, openid等伪匿名标识原样返回
- TransferAdminService/MchTransferService 查询出口(page+findById)统一脱敏
- SecureAesGcmEncryptor.decrypt 容错增强: 非密文格式(历史明文)原样透传, 新增加密字段零风险上线
- 迁移检查脚本 update-transfer-sensitive-encrypt.sql(历史明文渐进迁移用)
|
2026-08-08 11:10:25 +08:00 |
|
daxpay
|
43ee8db4a1
|
feat(i18n): 转账收款类型/渠道校验/发起失败错误词条(10语)
|
2026-08-07 22:18:30 +08:00 |
|
daxpay
|
1b1470fa6c
|
feat(channel-alipay): 支付宝转账申请配套(转账应用/场景配置/资金流水号回写/时间解析) + 错误码与校验词条(10语)
|
2026-08-07 16:39:50 +08:00 |
|
daxpay
|
824b3f1fa6
|
feat(channel-wechat): 微信转账申请配套(报备兜底/确认收款查询/标题与报备校验) + 错误码词条(10语)
|
2026-08-07 16:39:12 +08:00 |
|
daxpay
|
80810851c3
|
feat(transfer): 抖音转账场景主数据枚举(1001-1007) + 转账发起应用绑定(仅网站应用), 策略按转账配置解析发起应用(10语)
|
2026-08-07 15:23:17 +08:00 |
|
daxpay
|
0d10d18ea3
|
feat(transfer): 微信转账配置独立表(转账场景+发起应用), 转账策略按配置解析发起应用(10语)
|
2026-08-07 13:50:35 +08:00 |
|
daxpay
|
d71d0adc4f
|
feat(transfer): 微信/支付宝/抖音转账异步回调落地, README 补充转账与风控体系说明
|
2026-08-06 17:49:57 +08:00 |
|
daxpay
|
170eb951fa
|
feat(risk): 黑名单支持省市两级地区名单(行政区划编码), 新增区域编码解析器, API安全/风控配置迁移至支付安全目录
|
2026-08-06 16:12:55 +08:00 |
|
daxpay
|
7a928c00f1
|
feat(risk): 商户风控配置独立表与地理围栏三级策略改造, 新增交界城市预览演示
|
2026-08-06 14:49:38 +08:00 |
|
daxpay
|
df997d0a28
|
refactor(ip-region): 移除 ip2region 旧版区域字段兼容, 统一 v4.xdb 五段格式并补单测
|
2026-08-06 14:35:05 +08:00 |
|
daxpay
|
853530e490
|
refactor(region): base_city_adjacent 改用 MyBatis-Plus 管理并清空升级脚本
CityAdjacent 实体补 @TableName/@TableId(id bigserial DB 自增),
Mapper 继承 MPJBaseMapper, 新增 CityAdjacentManager(BaseManager),
删除裸 @Select SQL; 同步清空 update-tables.sql 升级脚本。
|
2026-08-06 13:45:49 +08:00 |
|
daxpay
|
ad07f6b225
|
chore(release): 升级至 4.0.0-beta2, 全量同步表结构与种子数据
- 全部模块 pom.xml + capability-wechat/README.md + application-dev.yml 版本号 beta1 -> beta2
- _config/sql/table.sql 全量表结构(含转账订单/直连商户新表新字段)
- _config/sql/data.sql 全量种子数据(经 redact-data.mjs 脱敏)
|
2026-08-05 14:25:06 +08:00 |
|
daxpay
|
f7291708b7
|
chore(auth): SecurityUtil 未登录告警日志降级为 debug, 减少无谓噪音
|
2026-08-05 14:24:33 +08:00 |
|
daxpay
|
4d1687e8c5
|
feat(channel-transfer): alipay/douyin/wechat 通道转账适配与错误码词条
- 各通道 ChannelClient 新增 transfer/transferSync 端点声明
- 新增 TransferReq/Resp 请求响应模型
- 新增 service/payment/transfer 转账服务与 strategy 转账策略
- i18n(10语): error/channel/{alipay,douyin,wechat} 补转账错误码
|
2026-08-05 14:24:01 +08:00 |
|
daxpay
|
5adae83938
|
feat(trade): 转账基础枚举/工具/权限码与多语种词条
- TradeTypeEnum/TradeFlowTypeEnum/NoticeEventEnum 新增 transfer 项
- TradeNoGenerateUtil 支持转账单号生成
- PermCodes 新增转账权限码
- i18n(10语): notice_event/trade_type/transfer_payee_type 新增, pay/error 补 transfer 错误码
|
2026-08-05 14:23:28 +08:00 |
|
daxpay
|
549a6c8c6b
|
refactor(adapay): 重构直连密钥配置, ada_pay 产品名回退为 Adapay
- 直连密钥配置实体/参数/结果/服务/Manager/Controller/Strategy/Assembler 全链路调整
- AdapaySdkCredential 同步更新
- enum/product.json(10语种) ada_pay: 汇付天下 -> Adapay
|
2026-08-05 14:22:16 +08:00 |
|
daxpay
|
0072fb050d
|
fix(route): 环境不匹配改抛 channelMchEnvMismatch 带参, 替代 noMatch 提升可诊断性
|
2026-08-04 20:42:25 +08:00 |
|
daxpay
|
2e465315b4
|
refactor(adapay): 删除服务商密钥配置(isv), 开源版无进件不适用
|
2026-08-04 19:08:52 +08:00 |
|
daxpay
|
d4c0b03dd0
|
feat(adapay): 新增服务商密钥配置与微信应用绑定支持, 微信应用绑定能力收窄下沉产品策略声明
|
2026-08-04 16:25:08 +08:00 |
|
daxpay
|
0902cff09a
|
fix(i18n): 乐刷补 isvKeyNotConfigured/merchantDuplicate 2 key(10语种)
代码中 LeshuaIsvKeyConfigService/LeshuaIsvChannelMerchantService 引用了这两个 key
但 i18n 文件中缺失, 会导致非默认语种控制台 Fall back 警告。
文案照 dougong.json 同 key 替换品牌名(斗拱→乐刷/樂刷/Leshua)。
|
2026-08-04 12:02:53 +08:00 |
|
daxpay
|
8b5269c9a0
|
feat(stripe): 接入 Stripe 国际卡组通道(Visa/MasterCard)
主应用薄客户端 + 子应用 channel-three(stripe-java SDK) 架构, AES-GCM 加密 HTTP 对接。
- 新增 daxpay-channel-stripe 模块: client/entity/dao/service/strategy/controller 全层
- 支付双模式: Visa PaymentIntent(Stripe.js Elements) / MasterCard Checkout Session(跳转)
- 退款/退款同步/订单同步/关单/回调(HMAC-SHA256 验签) 完整链路
- 通道商户(accountId) + 密钥(secret/publishable/webhook 三钥落库加密) 管理
- 枚举注册: ChannelEnum/ProductEnum/PayBodyTypeEnum; CurrencyEnum 加 minorUnit
- 参数加 currency(NormalPayParam/GatewayPrePayParam); 路由白名单加 VISA/MASTERCARD
- masterdata 通道/产品介绍改由 i18n(*_desc) 提供, I18nUtil 新增 exists 兜底
- 配置: daxpay-start 依赖挂载 + 子应用 three 连接(dev/prod yml 启用)
- SQL: stripe 去 direct 重命名(update-tables) + 产品排序/文案(update-datas)
- i18n: 10 语 enum(channel/product/pay_body_type)/validation + error/channel/stripe.json
|
2026-08-04 10:34:41 +08:00 |
|
daxpay
|
e79dfbaef7
|
feat(refund): 退款手动关闭/并发冲突纠正, 网关授权回跳校验, 通道传输异常分类
- 退款: 手动关闭(创建满7天)、重复退款校验、CAS 结算冲突自动回滚、通道查单失败保护、已成功纠正
- 退款多交易时按 tradeNo 精确定位; CallbackStatusEnum 新增 CLOSE 与 FAIL 区分
- 网关授权: 回跳地址禁止外链, 授权回调场景校验
- 通道传输异常分类: ChannelTransportEncryptInterceptor 区分「结果未知」(超时/中断→保持处理中交同步纠正) 与「不可用」(连接拒绝/不可达→确定未受理)
- 新增 ChannelResultUnknownException / ChannelUnavailableException
- 删除调试用 DebugGatewayController / DebugPrePayParam
- i18n pay/error.json 全语种同步
|
2026-08-03 19:51:01 +08:00 |
|
daxpay
|
01a5eb89b6
|
refactor(notice): 通知系统重构, protocol 拆分为 transport/format/payload
- 删除 notice/protocol 与 NoticeProtocolEnum, 拆为 transport(HTTP/MQ 发送通道) 与 format(报文格式) 两维度
- 新增 notice/payload(信封与载荷构造) 与 notice/job(NoticeRetryJob 重试调度)
- NoticeDispatcher/SendEngine/RetryPolicy 适配新枚举, MchNoticeTask 补 transport/format 字段
- NoticeEventEnum 扩展 pay.timeout/pay.cancel/refund.fail/risk.hit, notice_event i18n 全语种同步
- EasyPay 插件通知由 NoticeSender 改为 PayloadBuilder
- i18n: 删除 notice_protocol.json, 新增 notice_format/notice_transport.json(10 语种)
- MchAppNotifyConfigService 补充 NoticeDispatcher 读取说明
|
2026-08-03 19:49:44 +08:00 |
|
daxpay
|
e54bf5e734
|
refactor(risk): 风险命中记录移除运营处置流程, 删除 handle 接口/枚举/参数与处理字段
|
2026-08-03 12:01:51 +08:00 |
|
daxpay
|
ac3234efc1
|
i18n: 支付产品枚举 union_pay 显示名统一为银联支付(zh/繁/ja)
|
2026-08-02 20:00:48 +08:00 |
|
daxpay
|
e30c896608
|
i18n: union_pay 通道/渠道/支付厂商枚举显示名统一为银联支付(zh/繁/ja)
|
2026-08-02 19:55:22 +08:00 |
|
daxpay
|
349306f833
|
refactor(union): 云闪付三产品合并为单一 union_pay 产品, 策略类按生命周期统一
- ProductEnum: UNION_QRCODE/H5/BARCODE 三产品 -> UNION_PAY(含主扫/H5/被扫三种支付方式)
- daxpay-channel-union: 删除按支付方式拆分的策略类, 改为按生命周期统一
(Pay/Close/Refund/SyncRefund/Sync/Product 六个策略), 由 Product 策略内部映射 method->capability
- i18n product.json: 10 语种同步合并
|
2026-08-02 18:43:15 +08:00 |
|
daxpay
|
c9924f8f04
|
fix(json): 注册 OffsetDateTime query/form 参数 Converter 修复时间范围查询绑定失败; 抽取 OffsetDateTimeParseUtil 工具类(@UtilityClass)
|
2026-08-02 17:44:33 +08:00 |
|
daxpay
|
380c7d8e2e
|
refactor(platform): 商户名称翻译 SPI(MerchantNameResolver), platform 模块跨租户翻译商户名
- 新增 MerchantNameResolver SPI(platform-core), 由 payment 模块实现, 无 payment 时自动跳过
- MerchantNameResolverImpl(payment-core) 跨租户批量解析 mchNo->mchName
- MerchantInfoManager 增 findAllByMchNosNotTenant(忽略租户)
- UnipayApiLogService / SystemSensitiveWordHitService 分页/详情批量回填 mchName
- UnipayApiLogResult 增 mchName 字段, SystemSensitiveWordHitResult 注释更新为 SPI 翻译
|
2026-08-02 10:44:53 +08:00 |
|
daxpay
|
647565e7e2
|
feat(payment): 交易订单定时同步任务(分层窗口扫描+ShedLock分布式锁)
- TradeSyncJob 分层窗口扫描: 支付PROCESSING(4窗口)/CLOSE纠正/退款PROGRESS(4窗口), 越新查越勤, 超7天淘汰
- TradeSyncService 跨租户引导读(runAs装载mchNo)后委托租户内同步, 共享 payment:trade:{id} 锁与关单互斥
- PayTradeManager.findSyncTrades / RefundOrderManager.findProgressRefunds+findByRefundNoNotTenant 跨租户扫描(单次上限500)
- PaySyncService 增 syncByContainer 容器视角同步入口(admin/merchant复用)
- 引入 ShedLock(6.3.1) + ShedLockConfiguration(Redis), @SchedulerLock 防多节点重复执行
- application-prod.yml 增 trade-sync-enabled 开关(默认true)
|
2026-08-02 10:44:39 +08:00 |
|
daxpay
|
f68d475561
|
feat(union): 补全云闪付错误文案i18n(3key×10语种), 追加支付主数据种子(pay_md_* 7表20行, update-datas.sql)
|
2026-08-02 10:31:04 +08:00 |
|
daxpay
|
fe6f988b19
|
feat(channel): 新增云闪付(直连银联ACP)通道适配模块, 支持C扫B/H5/B扫C三产品, RSA2证书签名+回调验签, 10语种i18n
|
2026-08-01 23:56:46 +08:00 |
|
daxpay
|
42e0d69f9a
|
refactor(payment): 商户前缀分域统一 /merchant/+/mch/归一为/mch/(商户端)+/admin/merchant/(运营端), 小程序/app-merchant/改/app-mch/, 清理冗余子路径, MchUserAdminController双路径, 废弃/mini/mch/**, SensitiveWord补充来源识别
|
2026-08-01 14:23:00 +08:00 |
|
daxpay
|
ec0e6e01bc
|
refactor(payment): Controller @RequestParam散参数治理, Dashboard查询对象化(TradeRangeQuery)合并Service双套重载, POST多参数改@RequestBody, EasyPay删除useCancel, 清理15处裸注解
|
2026-08-01 13:11:55 +08:00 |
|
daxpay
|
e7080567fe
|
config 调整部分参数默认值
|
2026-08-01 10:13:51 +08:00 |
|
daxpay
|
4b39d3ed95
|
chore(config): PlatformConfigProperties 补全 tradeSyncEnabled 字段, 提供配置项 IDE 自动提示
|
2026-08-01 10:12:51 +08:00 |
|
daxpay
|
523289e6d0
|
feat(risk): 接入海外IP地域拦截风控维度, 复用ip2region判定境外IP, 新增overseas_ip命中类型, 受风控总开关门控
|
2026-07-31 20:58:14 +08:00 |
|
daxpay
|
7ffadb18d6
|
feat(gateway): 预下单结果回传实际类型并校验类型不可中途变更, 落地页改H5/小程序双链接, 下线linkForm维度
|
2026-07-31 15:52:18 +08:00 |
|
daxpay
|
94fda74c58
|
refactor: 合并码牌/聚合配置为统一网关支付配置, 新增聚合小程序 linkForm 维度(/am/), 聚合接口加 openId 校验
|
2026-07-30 21:00:27 +08:00 |
|
daxpay
|
339bd59586
|
fix(payment): 抖音直连应用解析隔离平台档,兜底改商户档推导;平台档多个改报错
|
2026-07-30 13:25:23 +08:00 |
|
daxpay
|
4ced54dfab
|
refactor(payment): 通道应用类型解析改为多兼容类型遍历
- 微信/抖音/支付宝应用类型映射由单值改为有序兼容列表, 多个同类型应用时跳过并尝试下一个兼容类型
- 抖音 H5 验签 web_app 报错参数改用本地化名称(网站应用), 不再显示裸编码
- 补齐 wx_app_type 东盟四语(id-ID/vi-VN/th-TH/ms-MY)
- 抖音直连应用体系(douyin_direct_app*)下线, 迁移至 dy_mch_app/dy_channel_app_capability 统一模式
- 删除已废弃的抖音应用管理菜单, 清理通道子应用配置注释
|
2026-07-30 12:32:41 +08:00 |
|
daxpay
|
9f985e9ed0
|
fix(channel): 传输加密拦截器区分明文错误响应并对齐 dev 通道密钥
- 拦截器 decryptResponse 按状态码分流: 2xx 无加密头视为协议违规(保留安全约束); 非2xx 明文错误响应解析 body 透传真实错误详情, 避免子应用入站解密失败等错误被「响应未携带加密头」掩盖
- 新增 i18n key channel.error.transportEncrypt.plainErrorResponse (10 语种同步)
- 新增 ChannelTransportEncryptInterceptorTest 覆盖 6 场景
- dev 环境 channel.one/two 传输密钥对齐对应子应用(原复用数据加密密钥且与子应用不匹配, 导致调用 Go/Java 子应用均报错)
|
2026-07-30 12:22:51 +08:00 |
|
daxpay
|
54b2fa4850
|
refactor(wx): 移除微信服务商通道商户冗余的认证应用类型字段
该字段(authAppType)不被任何业务逻辑消费, 实际 sp/sub openId 路由由通道能力绑定(WxChannelAppCapability)决定, 两者脱节存在配置与行为不一致隐患。同步清理实体/Param/Result/Service/Controller、WechatAuthAppTypeEnum 与 WechatIsvAuthAppTypeUpdateParam、10 语言 i18n(validation/wechat/enum)、table.sql 列定义, 并在 update-tables.sql 追加 DROP COLUMN 迁移。
|
2026-07-30 10:36:24 +08:00 |
|
daxpay
|
6b8b402a6d
|
feat(payment): 码牌小程序认证 + 网关沙箱调试接口 + 敏感字段脱敏边界修复
码牌: 新增小程序认证(mini-auth)链路与 CodePayMiniAuthParam
网关: 新增沙箱调试预下单接口 DebugGatewayController, 受 sandbox-enabled 开关控制, 生产环境不注册
脱敏: SensitiveInfoSerialize 修复保留位数之和超长时的明文暴露(统一全量脱敏), 各通道/平台 result 类统一脱敏注解
路由/菜单SQL/用户控制器等配套调整
|
2026-07-30 09:15:59 +08:00 |
|