fix: vpay mode 改为 short_series_coin + signData 按字母序 + offerId 字符串化

This commit is contained in:
2026-09-14 11:04:57 +08:00
parent 281cd4877a
commit 3777f67af6
+15 -12
View File
@@ -34,25 +34,28 @@ function hmacSha256Hex(key, data) {
* signature = hmac_sha256(sessionKey, signData) * signature = hmac_sha256(sessionKey, signData)
*/ */
function buildPayParams(user, pack, outTradeNo) { function buildPayParams(user, pack, outTradeNo) {
const signData = JSON.stringify({ // signData 字段按字母序排列(微信 Midas 验签对字段顺序敏感,不可乱序)
mode: 'coin', const sd = {
offerId: OFFER_ID,
buyQuantity: pack.coins,
outTradeNo,
custom: '',
attach: JSON.stringify({ uid: String(user._id), pack: pack.id }), attach: JSON.stringify({ uid: String(user._id), pack: pack.id }),
ts: Math.floor(Date.now() / 1000), buyQuantity: pack.coins,
})
return {
mode: 'coin',
env: ENV, env: ENV,
offerId: OFFER_ID, mode: 'short_series_coin',
offerId: String(OFFER_ID),
outTradeNo,
platform: 'android',
ts: Math.floor(Date.now() / 1000),
}
const signData = JSON.stringify(sd)
return {
mode: 'short_series_coin',
env: ENV,
offerId: String(OFFER_ID),
buyQuantity: pack.coins, buyQuantity: pack.coins,
outTradeNo, outTradeNo,
currencyType: 'CNY', currencyType: 'CNY',
platform: 'android', platform: 'android',
signData, signData,
paySig: hmacSha256Hex(APPKEY, `requestVirtualPayment&${signData}`), paySig: hmacSha256Hex(APPKEY, 'requestVirtualPayment&' + signData),
signature: hmacSha256Hex(user.sessionKey || '', signData), signature: hmacSha256Hex(user.sessionKey || '', signData),
} }
} }