fix: validate wxpay payments against order snapshots
This commit is contained in:
@@ -264,3 +264,46 @@ func TestExpectedNotificationProviderKeyForOrderUsesSnapshotProviderKey(t *testi
|
||||
expectedNotificationProviderKeyForOrder(registry, order, ""),
|
||||
)
|
||||
}
|
||||
|
||||
func TestValidateProviderNotificationMetadataRejectsWxpaySnapshotMismatch(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
order := &dbent.PaymentOrder{
|
||||
PaymentType: payment.TypeWxpay,
|
||||
ProviderSnapshot: map[string]any{
|
||||
"schema_version": 1,
|
||||
"merchant_app_id": "wx-app-expected",
|
||||
"merchant_id": "mch-expected",
|
||||
"currency": "CNY",
|
||||
},
|
||||
}
|
||||
|
||||
err := validateProviderNotificationMetadata(order, payment.TypeWxpay, map[string]string{
|
||||
"appid": "wx-app-other",
|
||||
"mchid": "mch-expected",
|
||||
"currency": "CNY",
|
||||
"trade_state": "SUCCESS",
|
||||
})
|
||||
assert.ErrorContains(t, err, "wxpay appid mismatch")
|
||||
}
|
||||
|
||||
func TestValidateProviderNotificationMetadataAllowsLegacyOrdersWithoutSnapshotFields(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
order := &dbent.PaymentOrder{
|
||||
PaymentType: payment.TypeWxpay,
|
||||
ProviderSnapshot: map[string]any{
|
||||
"schema_version": 1,
|
||||
"provider_instance_id": "9",
|
||||
"provider_key": payment.TypeWxpay,
|
||||
},
|
||||
}
|
||||
|
||||
err := validateProviderNotificationMetadata(order, payment.TypeWxpay, map[string]string{
|
||||
"appid": "wx-app-runtime",
|
||||
"mchid": "mch-runtime",
|
||||
"currency": "CNY",
|
||||
"trade_state": "SUCCESS",
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user