弃续
弃续
  • 发布:2023-04-23 14:35
  • 更新:2024-12-12 17:12
  • 阅读:340

【报Bug】云函数使用微信的getwxacodeunlimit获取小程序码返回的buffer转成base64变成了uni-id-pages登录的token

分类:uniCloud

产品分类: uniCloud/App

示例代码:

exports.main = async (event, context) => {  
 // 获取access_token  
 const newToken = await uniCloud.httpclient.request('https://api.weixin.qq.com/cgi-bin/token', {  
   data: {  
    grant_type: 'client_credential',  
    appid: '小程序appid',  
    secret: '小程序密钥'  
   },  
   method: 'GET',  
   contentType: 'json',  
   dataType: 'json'  
  })  
 var AccessToken=newToken.data.access_token;  
 //使用access_token获取小程序码  
 var apiUrl = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + AccessToken;  
 var res = await uniCloud.httpclient.request(apiUrl,{  
  method: 'POST',  
  contentType: 'json',  
  data:{  
   scene: 'uid=UID',  
   page: 'pages/index/index'  
  }  
 })  
 //把获取到的小程序码buffer转换为base64  
 let buffer = Buffer.from(res.data);  
 let base64 = buffer.toString('base64');  
 console.log("拿到的base64----",base64)  
 return base64  
};```

操作步骤:

新建云函数,复制上述示例的代码,把小程序appid和密钥改成自己小程序的,直接本地运行就可以看到

预期结果:

把返回的buffer转成base64后应该可以显示

实际结果:

把返回的buffer转换出的base64貌似是截取了一部分uni-id-pages的token

bug描述:

在云函数中使用微信小程序的https://api.weixin.qq.com/wxa/getwxacodeunlimit接口获取小程序码,把该接口返回的buffer转换成base64后变成了使用uni-id-pages登录后的token

2023-04-23 14:35 负责人:无 分享
已邀请:
1***@qq.com

1***@qq.com - 912750

怎么处理了?

Azikou

Azikou

我拿到的buffer转成base64 还是没法渲染出来。。好难啊

9***@qq.com

9***@qq.com

一样,都拿到base64了,放到image的标签中还是不展示图片

  • Azikou

    我那会搞好了

    但是我忘记 具体问题出在哪了。我记得好像是我url拼的不对。

    你稍等 我去码云看看,我记得我上传 了的

    2024-05-24 09:20

  • Azikou

    'use strict';

    let uobc = require('uni-open-bridge-common')

    const buffer = require('buffer');

    exports.main = async (event, context) => {

    //event为客户端上传的参数

    //返回数据给客户端


    // 应用级凭据  
    const key = {
    dcloudAppid: '__UNI__xxxxxxx', // DCloud Appid
    platform: 'weixin-mp' // 指定凭据所属平台,解释见上
    }
    const access_token=uobc.getAccessToken(key);
    let {id,username,payment}=event;
    let page='uni_modules/huodong/pages/huodong/detail?id=' + id + '&username='+username+'&payment=' +payment
    //由此id生成分享码
    const codeUrl=`https://api.weixin.qq.com/wxa/createwxaqrcode?access_token=${access_token}`
    const codeOptions={
    method:'POST',
    data: {
    "page":page,
    "width":500,
    // "env_version":'release'//trial:体验版
    },
    }
    const res3 = await uniCloud.httpclient.request(codeUrl,codeOptions)
    const buffer=res3.data
    // console.log("---响应--",buffer)
    // const buf = new Buffer (buffer)
    // console.log("buffer转化",buffer.toString('base64'))
    const result='data:image/png;base64,'+buffer.toString('base64')
    return res3.data

    };

    2024-05-24 09:24

  • 9***@qq.com

    回复 Azikou: 感谢老哥,搞了两天硬是没弄出来,我参考下你的试试

    2024-05-24 14:33

  • 9***@qq.com

    老哥你这是换了另外一个api吗?之前 用getwxacodeunlimit这个接口最后还是不行对吧?

    2024-05-24 14:35

  • Azikou

    回复 9***@qq.com: 效果一样的,都是生成带参数的page页的二维码,然后getwxacodeunlimit当时好像是没调通,然后我因为使用量不会很大,所以改成了createwxaqrcode,,按理说他们应该一样的

    2024-05-24 14:43

  • Azikou

    回复 9***@qq.com: https://blog.csdn.net/BeastCool/article/details/131707094,你可以参考下这个,然后把我的接口改下 应该能调通,去年12月的事情了。做过忘记了

    2024-05-24 14:44

  • 9***@qq.com

    回复 Azikou: 收到,十分感激

    2024-05-24 14:58

x***@aliyun.com

x***@aliyun.com

我也是遇到这种问题, 最好是你先打印一下 res.data的数据,一般出现这种情况是 返回的json数据,是你请求的存在错误。

lazybone2021

lazybone2021 - 80后宅

data中加上参数check_path: false就可以了 ,估计是你小程序没有发布造成的
check_path:默认是true,检查page 是否存在,为 true 时 page 必须是已经发布的小程序存在的页面(否则报错)

要回复问题请先登录注册