YuPay 配置说明
YuPay 的主配置位于 plugins/YuPay/config.yml。第一次启动后先不要急着开放给玩家,建议按“基础支付 -> 回调 -> 数据库 -> 奖励 -> 退款 -> 安全审计”的顺序配置。
配置总览
| 区块 | 用途 |
|---|---|
startup-check | 启动自检,检查配置、数据库、依赖和回调地址。 |
pay | 默认支付方式、订单标题、单笔/单日金额限制、待支付订单过期。 |
api | 其他插件调用 YuPayApi 的授权与审计。 |
wechat | 微信支付商户号、AppID、证书、公钥、API v3 密钥和回调。 |
alipay | 支付宝应用、私钥、公钥/证书、回调和性能参数。 |
callback | YuPay 内置回调服务器端口、线程、访问日志和请求限制。 |
database | SQLite / MySQL、连接池、迁移和表名。 |
cross-server | 群组服跨服发奖队列和 shared-secret。 |
economy | Vault / PlayerPoints 奖励类型与赞助兑换比例。 |
reward | 发奖快照,保证补发时按订单创建时的配置执行。 |
commands | 命令别名、支付锁期间允许命令、支付成功奖励命令。 |
refund | 退款开关、取消后到账处理和平台状态同步。 |
logging | 调试日志、敏感信息脱敏和安全审计日志。 |
language | 中文/英文语言文件映射。 |
library | 动态依赖完整性校验。 |
基础支付
yaml
pay:
default-method: "wechat"
order-subject: "赞助-{player}-{amount}元"
min-amount: 0.01
max-amount: -1
max-daily-amount: -1
pending-expire:
enabled: true
minutes: 15
check-interval-seconds: 60
batch-size: 100| 配置 | 建议 |
|---|---|
default-method | 默认支付渠道,必须是已启用且配置正确的 wechat 或 alipay。 |
order-subject | 会显示在支付平台订单标题里,建议包含玩家名和金额。 |
min-amount | 建议保留最小金额,避免误触或无意义订单。 |
max-amount | 高额赞助服建议设置单笔上限,超额走人工确认。 |
max-daily-amount | 需要风控时设置单日累计上限。 |
pending-expire.minutes | 建议保持 15 分钟,和常见支付平台订单窗口一致。 |
微信支付
yaml
wechat:
enabled: false
mchid: "1234567890"
appid: "wx1234567890abcdef"
serial-no: "444F4864EA9B344B..."
private-key-path: "apiclient_key.pem"
public-key-path: "pub_key.pem"
public-key-id: "PUB_KEY_ID_011..."
api-v3-key: "your-api-v3-key-here"
notify-url: "https://pay.example.com/pay/wechat/notify"
refund-notify-url: "https://pay.example.com/pay/wechat/refund/notify"配置要点:
- 新安装默认
enabled: false,替换真实商户信息后再启用。 - 私钥、公钥文件路径相对 YuPay 的证书目录;文件名可以自定义,但配置要一致。
api-v3-key必须是 32 位 API v3 密钥,不是商户平台登录密码。notify-url和refund-notify-url必须公网可访问,且能被微信平台POST。
支付宝
yaml
alipay:
enabled: false
mode: "public_key"
app-id: "your-alipay-app-id"
merchant-private-key: "your-merchant-private-key"
notify-url: "https://pay.example.com/pay/alipay/notify"
return-url: "https://pay.example.com/return"
alipay-public-key: "your-alipay-public-key"
app-cert-path: "appCertPublicKey.crt"
alipay-cert-path: "alipayCertPublicKey_RSA2.crt"
alipay-root-cert-path: "alipayRootCert.crt"mode 可选:
| 模式 | 适合场景 |
|---|---|
public_key | 配置简单,适合先快速验证。 |
cert | 安全性更高,正式服推荐。 |
应用私钥需要去掉 -----BEGIN PRIVATE KEY----- 和 -----END PRIVATE KEY-----。证书模式下,三个证书文件都要放到配置指定的位置。
回调服务器
yaml
callback:
host: "0.0.0.0"
port: 8080
io-threads: 2
worker-threads: 8
read-timeout-ms: 10000
write-timeout-ms: 10000
max-body-size: 65536
allowed-ips: []
access-log: false
ledger:
enabled: true
save-raw-body: false
save-body-hash: true建议:
host: "0.0.0.0"表示监听全部网卡,适合大多数服务器。port要与支付平台回调 URL、反向代理和防火墙一致。allowed-ips留空表示不启用白名单;正式服可按支付平台官方 IP 段配置。ledger.enabled建议开启,用于记录回调流水;save-raw-body默认关闭,避免保存敏感原文。
数据库
yaml
database:
type: "sqlite"
mysql:
host: "localhost"
port: 3306
database: "minecraft"
username: "root"
password: "password"
jdbc-params: "useSSL=false&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true"
connection-pool:
enabled: true
max-pool-size: 10
min-idle: 5| 类型 | 建议 |
|---|---|
| SQLite | 单服、低并发、快速部署。 |
| MySQL | 群组服、跨服发奖、多实例回调、长期运营。 |
表名位于 database.table-names。如果同一个库里部署多个环境,可以配置 prefix 避免冲突。
跨服发奖
yaml
cross-server:
enabled: false
server-id: "lobby-1"
reward-routing:
mode: "PLAYER_ONLINE"
target-server: "lobby-1"
fallback-server: "lobby-1"
player-online-fallback-seconds: 0
queue:
poll-interval-ticks: 40
batch-size: 32
max-attempts: 5
lease-seconds: 60
security:
require-shared-secret: true
shared-secret: "CHANGE_ME_TO_A_LONG_RANDOM_SECRET"跨服启用前必须先切到 MySQL。所有子服的 shared-secret 保持一致,server-id 必须各不相同。
| 路由模式 | 含义 |
|---|---|
LOCAL | 当前服直接发奖。 |
SERVER | 固定交给 target-server 发奖。 |
PLAYER_ONLINE | 玩家在哪个子服在线,就由哪个子服发奖。 |
ANY | 任意在线子服都可领取任务。 |
经济与奖励
yaml
economy:
enabled: true
type: "vault"
rate: 100.0
commands:
enabled: true
on-success:
- "give {player} diamond 1"
on-single-achieved:
- amount: 50
commands:
- "say {player} 单笔赞助达到50元"
on-total-achieved:
- total: 100
commands:
- "lp user {player} parent set vip"
on-refund:
- "say {player} 的订单 {order} 已退款 {amount} 元,请管理员核查"可用变量:
| 变量 | 含义 |
|---|---|
{player} | 玩家名 |
{amount} | 赞助金额,单位元 |
{points} | 按 economy.rate 换算后的奖励数量 |
{order} | 订单号,退款命令中常用 |
奖励建议:
- 高价值权限组不要直接放在
on-success,建议按单笔或累计档位发放。 - 命令奖励需要幂等,避免补发时造成重复不可逆操作。
reward.snapshot.enabled建议保持开启,后续补发会按订单创建时的奖励快照执行。
二维码输出
yaml
qrcode:
default-output-mode: "map"
api-url: "https://api.qrserver.com/v1/create-qr-code/?size=200x200&data="
text-qr-size: 12
text-black-char: "██"| 输出模式 | 说明 |
|---|---|
map | 地图二维码,体验最好,需要 ProtocolLib。 |
link | 发送支付链接或二维码链接,兼容性最好。 |
text | 聊天文本二维码,适合没有地图二维码条件的环境。 |
API 授权
YuPay 默认要求调用方插件显式声明来源,建议只给可信插件开放创建订单、查询订单、退款或重试奖励等能力。
yaml
api:
enabled: true
require-plugin-declaration: true
audit-log: true
default-permissions:
create-order: false
cancel-order: false
query-order: false
refund-order: false
retry-reward: false
no-reward-order: false
expire-orders: false
allowed-plugins:
ExampleShop:
create-order: true
cancel-order: true
query-order: true
refund-order: false
retry-reward: false
no-reward-order: true
expire-orders: false更多接入写法见 插件间 API。
退款
yaml
refund:
enabled: true
auto-refund-cancelled-paid: false
status-sync:
enabled: true
initial-delay-seconds: 60
interval-seconds: 300
batch-size: 30
query-unknown: false建议:
enabled关闭后,API 和管理员命令不会主动发起平台退款。auto-refund-cancelled-paid建议保持关闭,取消后到账先进入异常订单人工审核。status-sync建议开启,让平台退款状态定时刷新到本地。
日志与安全审计
yaml
logging:
debug: false
mask-sensitive: true
mask-ip: true
max-message-length: 1000
save-callback-body: false
mask-callback-body-before-save: true
security-audit:
enabled: true
file: "logs/security-audit.log"
echo-console: false生产服建议:
debug保持关闭。mask-sensitive、mask-ip保持开启。- 不保存回调请求体原文,只保存 hash 与长度即可满足追溯。
- 需要排查 API 拒绝、回调异常或退款问题时,查看
logs/security-audit.log。
费率说明
YuPay 不参与代收,不抽取中间商费用。实际支付通道费率由微信支付、支付宝官方商户通道决定,通常为 0.2%-0.6%;如需永久 0.2% 费率,请联系作者。