安装签名插件 wechatpay-node-v3
使用
const crypto =require('crypto');
const request = require('superagent');
const WxPay = require('wechatpay-node-v3');
const pay = new WxPay({
appid: '直连商户申请的公众号或移动应用appid',
mchid: '商户号',
serial_no: '证书序列号',
publicKey: fs.readFileSync('./apiclient_cert.pem'), // 公钥
privateKey: fs.readFileSync('./apiclient_key.pem'), // 秘钥
});
const pic_buffer = fs.readFileSync('72fe0092be0cf9dd8420579cc954fb4e.jpg');
//meta信息
const fileinfo = {
filename: '',
sha256: '',
};
const sign = crypto.createHash('sha256');
sign.update(pic_buffer);
fileinfo.filename = '72fe0092be0cf9dd8420579cc954fb4e.jpg';
fileinfo.sha256 = sign.digest('hex');
const nonce_str = '593BEC0C930BF1AFEB40B4A08C8FB242',
timestamp = parseInt(+new Date() / 1000 + '').toString(),
url = '/v3/merchant/media/upload';
const signature = pay.getSignature('POST', nonce_str, timestamp, url, fileinfo);
const authorization = pay.getAuthorization(nonce_str, timestamp, signature);
try {
const result = await request
.post('https://api.mch.weixin.qq.com/v3/merchant/media/upload')
.set({
Accept: 'application/json',
'Content-Type': 'multipart/form-data;boundary=boundary',
'User-Agent': '127.0.0.1',
Authorization: authorization,
Charsert: 'UTF-8',
})
.attach('file', pic_buffer, {
filename: '72fe0092be0cf9dd8420579cc954fb4e.jpg',
contentType: 'image/jpg',
})
.field('meta', JSON.stringify(fileinfo));
console.log(result);
} catch (error) {
console.log('error=======>', error);
}