// 商户号,支持「普通商户/特约商户」或「服务商商户」
const MCH_ID = process.env.MCH_ID;
// 「商户API证书」的「证书序列号」
const CERT_SERIAL_NO = process.env.CERT_SERIAL_NO;
// 从本地文件中加载「商户API私钥」,用于生成请求的签名
const privateKey = fs.readFileSync(path.join(__dirname, './wxpay/apiclient_key.pem'), 'utf8');
// 从本地文件中加载「微信支付平台公钥」,用来验证微信支付应答的签名
const publicKey = fs.readFileSync(path.join(__dirname, './wxpay/publickey.pem'), 'utf8');
// 「微信支付平台公钥」的「平台公钥ID」
// 需要在 商户平台 -> 账户中心 -> API安全 查询
const PUBLIC_KEY = process.env.PUBLIC_KEY;
// 构造一个 APIv3 客户端实例(微信支付公钥模式)
const wxpay = new Wechatpay({
mchid: MCH_ID,
serial: CERT_SERIAL_NO,
privateKey: Rsa.from(privateKey, Rsa.KEY_TYPE_PRIVATE),
certs: {
[PUBLIC_KEY]: Rsa.from(publicKey, Rsa.KEY_TYPE_PUBLIC),
}
});
// 商户注册上传文件
exports.main = async (event, context) => {
try {
// 获取文件Content
const fileContent = await getFileContent(event.fileId);
// 构建请求体
const media = new Multipart()
.append('meta', JSON.stringify({
filename: event.fileName,
sha256: crypto.createHash("sha256").update(fileContent).digest("hex"),
}))
.append('file', fileContent);
// 上传文件
const response = await wxpay.v3.merchant.media.upload.post(media);
return success(response.data?.media_id);
} catch (error) {
console.error(error)
return fail(error.message);
}
}环境变量目前本地调试都能读取到,但是这个商户图片上传接口一直报错
少了第二参数声明请求头上的`Content-type`字段,参考: https://wechatpay.js.org/openapi/v3/merchant/media/upload (已更新)
wxpay.v3.merchant.media.upload.post(media, { headers: media.getHeaders() })
有没有大佬解答一下