## 问题
小程序调用 `wx.requestVirtualPayment`(mode: short_series_goods)持续返回:
{ "errMsg": "requestVirtualPayment:fail SIGNATURE_INVALID", "errno": -15005, "errCode": -15005 }
paySig 未报 -15006,仅 signature 报 -15005。
## 环境
- 现网 env: 0
- 商品 1yuan 已发布到现网
- 测试设备 iPhone,pf: ios
- 基础库 >= 2.19.2
## 签名逻辑(Node.js)
const sigParams = {
appId: APPID,
attach: signParams.attach,
buyQuantity: String(signParams.buyQuantity),
currencyType: signParams.currencyType,
env: String(signParams.env),
goodsPrice: String(signParams.goodsPrice),
offerId: signParams.offerId,
openid: userOpenid,
outTradeNo: signParams.outTradeNo,
pf: pf,
productId: signParams.productId,
ts: String(ts),
zoneId: '1',
};
const sigStr = Object.keys(sigParams).sort().map(k => `${k}=${sigParams[k]}`).join('&');
const signature = crypto.createHmac('sha256', sessionKey).update(sigStr + '&session_key=' + sessionKey).digest('hex');
const paySig = crypto.createHmac('sha256', APP_KEY).update(sigStr + '&key=' + APP_KEY).digest('hex');
## 已尝试
MD5、HMAC-SHA256、session_key 字符串/Buffer、snake_case/camelCase、包含/去掉 attach/pfkey/org_loc/method、paySig 业务参数分离、signData 包含/去掉 openid 等。
## 请求帮助
确认 signature 的 HMAC-SHA256 密钥、签名字符串格式、参与签名的字段及字段命名规范。
```

你这代码算法啥的都没写对。。。