chore(v2): P3 终审收尾——GetReserved 移 export_test / BuildRegistry 表测试 / 坏签名负路径 / 注释更正

This commit is contained in:
wangjia
2026-07-10 15:32:10 +08:00
parent c933657350
commit c4fc962db2
6 changed files with 167 additions and 13 deletions
+25
View File
@@ -130,6 +130,31 @@ func TestVerifyCallbackRSA_PaidAtFromGmtPayment(t *testing.T) {
}
}
// 攻击者拿一把与装配时加载的支付宝公钥不匹配的私钥伪造回调(冒充支付宝) → 验签
// 必须失败,且绝不能返回 PaidEvent(哪怕金额/状态字段看起来"正常"也不能被当真入账)。
func TestVerifyCallbackRSA_WrongKeyFails(t *testing.T) {
appPriv, _, aliPub := genKeys(t)
p := ali.New(buildClient(t, appPriv, aliPub))
_, wrongAliPriv, _ := genKeys(t) // 另一把毫不相干的"支付宝私钥"
form := url.Values{}
form.Set("out_trade_no", "PAY-EVIL")
form.Set("trade_no", "2021EVIL")
form.Set("trade_status", "TRADE_SUCCESS")
form.Set("total_amount", "999999.00")
form.Set("sign_type", "RSA2")
form.Set("sign", signRSA2(t, wrongAliPriv, form))
ev, err := p.VerifyCallback(context.Background(), provider.CallbackInput{Raw: []byte(form.Encode())})
if err == nil {
t.Fatalf("want 验签失败(签名私钥与装配公钥不匹配), got event = %+v", ev)
}
if ev != nil {
t.Fatalf("验签失败时不应返回 PaidEvent, got %+v", ev)
}
}
// TRADE_CLOSED(超时未付关闭/全额退款后关闭)须归一化为 failed 终态,不能停在 pending
// 让 SyncPendingAttempts 空转到订单永远"待处理"。
func TestVerifyCallbackRSA_ClosedIsFailed(t *testing.T) {