使用axios访问接口,设置responseType: 'arraybuffer'
/**
* 获取小程序qrcode(不能设置 encoding: null,输出图片不能打开)
* 设置responseType: 'arraybuffer'后成功输出图片
* @param {String} page
* @param {String} scene
* @returns
* @memberof GetQrCodeObj
*/
getQrCode(page,scene,){
return new Promise((resolve,reject)=>{
axios.post('https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='+this.access_token,{
scene:scene,
page,
is_hyaline:true
},{
responseType: 'arraybuffer' // 关键在于设置responseType为'arraybuffer'
}).then(res=>{
let data = res.data
if(data.errcode){
reject(new Error('生成二维码失败'))
return
}
dataFn.writeFileData(path.join(__dirname,'./dist/'+scene+'.png'),data).then(res=>{
resolve(res)
}).catch(err=>{
reject(err)
})
}).catch(err=>{
reject(err)
})
})
}
复制代码
dataFn.writeFileData来源于我自己Promise封装的fs模块,在给表弟编写账本软件account-book中封装的方法 找到dataFn.js,dataFn.js还用到了dirExists.js
我在网上还找到了用request模块的方法,关键在于设置encoding: null,
/**
* 获取小程序qrcode
*
* @param {String} page
* @param {String} scene
* @returns
* @memberof GetQrCodeObj
*/
getQrCode2(page,pack,name,){
return new Promise((resolve,reject)=>{
const params = {
url: 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=' + this.access_token,
method: "POST",
json: true,
encoding: null, // 关键
headers: {
"content-type": "application/json",
},
body: {
scene: scene,
page,
is_hyaline:true
}
}
request(params, function(error, res, body) {
if (!error && res.statusCode == 200) {
dataFn.writeFileData(path.join(__dirname,'./dist/'+scene+'.png'),body).then(res=>{
resolve(res)
}).catch(err=>{
reject(err)
})
} else {
reject(error, body)
}
})
})
}
复制代码