收藏
回答

获取二维码返回二进制,服务端后台如何保存?

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug 获取小程序码 接口B 工具 6.6.6 2.0.0

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





最后直接保存成 qr.png




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

回答关注问题邀请回答
收藏

4 个回答

  • 夜
    2018-06-01

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


    2018-06-01
    有用
    回复 2
    • 🇦 🇷 🇴 🇺 🇸 🇪
      🇦 🇷 🇴 🇺 🇸 🇪
      2018-06-11

      是一个图片数据流,在请求获取到流的地方要加上  responseType: 'stream'  明确指定返回类型为流

      2018-06-11
      回复
    • 2018-10-31回复🇦 🇷 🇴 🇺 🇸 🇪

      不行啊,报错为 app.js:473 Error: Converting circular structure to JSON 

      2018-10-31
      回复
  • 🇦 🇷 🇴 🇺 🇸 🇪
    🇦 🇷 🇴 🇺 🇸 🇪
    2018-05-16

    解决了,我就不一一回复了。我使用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);
                });
        });
    }


    2018-05-16
    有用
    回复
  • 阿土圆圆🌞
    阿土圆圆🌞
    2018-05-12

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

    2018-05-12
    有用
    回复
  • wishes
    wishes
    2018-05-02

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

    2018-05-02
    有用
    回复
登录 后发表内容