获取二维码返回二进制,服务端后台如何保存?
发布于 5 年前 作者 jie26 16947 次浏览 来自 问答

我使用 nodejs 调用的https://developers.weixin.qq.com/miniprogram/dev/api/qrcode.html 获取二维码二进制数据,保存成图片后,图片打不开。

最后直接保存成 qr.png

尝试过将返回的数据流进行utf8,binary 等其他格式编码保存成图片,还是无法查看。官方能不能在这个接口返回的数据流作下详情说明或者给个demo啊。

4 回复

解决了,我就不一一回复了。我使用nodejs写的demo。

const axios = require('axios');
const fs = require('fs');
 
// 1.首先获取 access_token
const APPID = 'your appid';
const APPSECRET = 'your appsecret';
 
getToken()
    .then(res => {
        console.log('获取accessToken', res);
        return getQRCode(res.access_token);
    })
    .then(data => {
        if (data.errcode) {
            return new Error('出错啦,错误信息:' + data.errmsg);

        }

       // 保存图片

        data.pipe(fs.createWriteStream(Date.now() + '.png'));
    });
 
// 获取access_token
function getToken() {
    return new Promise(function(resolve) {
        axios
            .get('https://api.weixin.qq.com/cgi-bin/token', {
                params: {
                    grant_type: 'client_credential',
                    appid: APPID,
                    secret: APPSECRET
                }
            })
            .then(response => response.data)
            .then(function(data) {
                resolve(data);
            });
    });
}
 
// 获取二维码
function getQRCode(access_token) {
    const GET_WXACODE_UNLIMIT = `https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=`;
    let params = {
        scene: 'goodsId=1232412',
        page: 'pages/product/index',
        width: 430,
        auto_color: false,
        line_color: { r: '0', g: '0', b: '0' }
    };
 
    console.log(JSON.stringify(params));
    return new Promise(function(resolve, reject) {
        axios
            .post(GET_WXACODE_UNLIMIT + access_token, params, {
                responseType: 'stream' // 这行很重要
            })
            .then(response => response.data)
            .then(function(data) {
                resolve(data);
            });
    });
}

大佬,最后返回的data也不是二进制流啊 是要他那个buffer吗?

解决了吗,我也遇到这种情况

我也是这样,有解决办法吗

回到顶部