小程序getUnlimitedQRCode接口调用为何返回的是乱码?

小程序getUnlimitedQRCode接口调用为何返回的是乱码?是我哪里写不对码?

img

我打开network里可以正常看到二维码图片了,可是我怎么转成图片让前台显示呢?

img

bb15() {
                console.log('开始提交数据')
                console.log('arr4', this.arr4)
                uni.request({
                    url: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + this.aid +
                        '&secret=' + this.bid,
                    method: 'GET', //接收请求的方式,如果不传默认为POST
                    header: {
                        'content-type': 'application/x-www-form-urlencoded;charset=UTF-8',
                    },
                    success: (res) => {
                        this.access_token = res.data.access_token
                        console.log('token', res)
                    }
                })

                uni.request({
                    url: 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=' + this.access_token,
                    method: 'POST', //接收请求的方式,如果不传默认为POST
                    data: {
                        "page": "pages/index/index",
                        "scene": "a=1",
                        "check_path": true,
                        "env_version": "release"
                    },
                    success: (res) => {
                        this.temptp = res.data
                        console.log('二维码回传信息', res)
                    }
                })
            },

你要看下这个api接口返回的数据类型是什么,可能是二进制的数据,所以你返回后要对二进制数据进行转换为图片。其次你的请求头要设置正确,将返回类型设置为 responseType: 'arraybuffer',因为默认这个返回的类型会是text。再次获取到返回的数据后,要转为base64的图片:wx.arrayBufferToBase64(res.data)

看看服务器是否用的是 utf-8 编码
这显然是中文编码没有处理好

返回的data并不是文字,可能是图片二进制数据,不能打印出来。

两种可能
1使用了错误的字符编码
小程序接口返回的内容有可能使用UTF-8编码,如果你在处理返回内容的过程中使用了错误的字符编码,就会出现乱码的情况。建议在处理返回内容时,使用与接口返回内容相同的编码方式。
2没有正确解析返回的二进制数据
小程序接口有时会返回二进制数据,如果你没有正确解析返回的二进制数据,就会出现乱码的情况。建议在处理返回内容时,对于返回的二进制数据进行正确的解析和处理。

这返回的是二进制流
还有这种操作不应该在小程序端进行,应该在后端进行token的缓存,因为这个接口请求次数是有限制的
在后端将返回的二进制流转化为图片保存到服务器或者云存储就可以了

指定下字符集编码应该就可以

这个是服务端接口,你不能在小程序端直接调用,这样token会泄漏的

img


它返回的是个arraybuffer,你确定一定要这么干,可用降arraybuffer转换为base64,然后赋予image的src

img