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)
*/
function buildPayParams(user, pack, outTradeNo) {
const signData = JSON.stringify({
mode: 'coin',
offerId: OFFER_ID,
buyQuantity: pack.coins,
outTradeNo,
custom: '',
// signData 字段按字母序排列(微信 Midas 验签对字段顺序敏感,不可乱序)
const sd = {
attach: JSON.stringify({ uid: String(user._id), pack: pack.id }),
ts: Math.floor(Date.now() / 1000),
})
return {
mode: 'coin',
buyQuantity: pack.coins,
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,
outTradeNo,
currencyType: 'CNY',
platform: 'android',
signData,
paySig: hmacSha256Hex(APPKEY, `requestVirtualPayment&${signData}`),
paySig: hmacSha256Hex(APPKEY, 'requestVirtualPayment&' + signData),
signature: hmacSha256Hex(user.sessionKey || '', signData),
}
}