帮忙看下云函数是不是写错了,我申请的是商户APIV2密钥,总是提示获取prepay_id失败,这个是签名错误了,应该怎么写呢?我的签名参数与微信官网的一样吗?
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
exports.main = async (event, context) => {
// 参数校验
if (!event.orderId || !event.openid || event.amount === undefined) {
throw new Error('缺少必要参数: orderId/openid/amount')
}
// 检查金额是否为有效数字
if (isNaN(event.amount) || event.amount <= 0) {
throw new Error('金额无效')
}
// 支付配置
const payConfig = {
appId: 'wxb5ec8e6472355555', // 你的小程序AppID
mchId: '1715555555', // 你的商户号
key: 'KJLFJOW8378324jdfiweu84385955555' // API密钥
}
// 获取用户 IP 地址
const wxContext = cloud.getWXContext()
const clientIP = wxContext.CLIENTIP || '127.0.0.1' // 如果获取不到,使用默认值
// 构造支付参数
const paymentParams = {
body: String(event.productName || '商品支付').substr(0, 128),
out_trade_no: String(event.orderId),
total_fee: parseInt(Number(event.amount) * 100), // 金额单位为分
spbill_create_ip: clientIP, // 使用获取到的用户 IP
trade_type: 'JSAPI',
openid: String(event.openid),
appid: payConfig.appId,
mch_id: payConfig.mchId,
nonce_str: Math.random().toString(36).substr(2, 32)
}
console.log('支付参数:', paymentParams) // 打印验证
// 生成签名
const sign = cloud.cloudPay.sign(paymentParams, payConfig.key)
paymentParams.sign = sign // 将签名添加到支付参数中
try {
// 调用支付接口
const result = await cloud.cloudPay.unifiedOrder({
envId: cloud.DYNAMIC_CURRENT_ENV, // 确保传入正确的环境ID
...paymentParams
})
console.log('微信支付接口返回:', result)
if (!result || !result.prepay_id) {
throw new Error(result.err_code_des || '获取prepay_id失败')
}
// 生成前端参数
const timestamp = Math.floor(Date.now() / 1000).toString()
const paySign = cloud.cloudPay.sign({
appId: payConfig.appId,
timeStamp: timestamp,
nonceStr: result.nonce_str,
package: `prepay_id=${result.prepay_id}`,
signType: 'MD5'
}, payConfig.key)
return {
code: 200,
data: {
timeStamp: timestamp,
nonceStr: result.nonce_str,
package: `prepay_id=${result.prepay_id}`,
signType: 'MD5',
paySign: paySign
}
}
} catch (err) {
console.error('支付失败:', err)
return {
code: 500,
message: '支付失败',
error: err.message
}
}
}
cloudPay是免签的吧,什么时候需要用到API密钥了?
你看的是哪个文档?链接发一下。
https://developers.weixin.qq.com/community/develop/doc/0006c24616c2b0981323accac6c000
云调用报错什么?
这个新帖
https://developers.weixin.qq.com/community/develop/doc/0006c24616c2b0981323accac6c000