class PaySignatureService {
static calcPaySig(appkey: string, message: string): string {
const hmac = crypto.createHmac('sha256', appkey);
hmac.update(message);
return hmac.digest('hex');
}
static calcSignature(signData: string, sessionKey: string): string {
const hmac = crypto.createHmac('sha256', sessionKey);
hmac.update(signData);
return hmac.digest('hex');
}
}
export const virtualPayment = async (
req: Request,
res: Response
) => {
const { productId, goodsPrice } = req.body;
try {
const uri = '/xpay/requestVirtualPayment'; // /xpay/query_user_balance
const appkey = 'HvkwbwYj4Y0o29MkAObPn1u2vkNr4jTP';
const outTradeNo = uuidv4().replace(/-/g, '');
const sessionKey = userAtuth.session_key;
const signData = JSON.stringify({
offerId: '123000',
buyQuantity: 1,
env: 0,
currencyType: 'CNY',
productId: String(productId),
goodsPrice: Number(goodsPrice),
outTradeNo: String(outTradeNo),
attach: 'testdata',
});
const paySig = PaySignatureService.calcPaySig(appkey,uri + '&' + signData);
const signature = PaySignatureService.calcSignature(signData, sessionKey);

uri 用requestVirtualPayment
就是支付签名错了,可以参考一下,这里面有nodejs版本签名代码
https://developers.weixin.qq.com/community/develop/article/doc/0000ae4f1b4f80f4d8c4c7ca266013