小程序推广码获取参数处理Buffer

本文详细介绍了如何在小程序中生成推广二维码,利用用户A的openid推荐用户B注册,并在前端将二进制文件转换为图片进行展示。涉及微信接口调用、二进制文件处理及前端存储。

处理Buffer文件

问题场景:小程序生成推广二维码,用户A推荐用户B注册,将用户A的openid作为参数写进二维码中,
用户B微信扫码跳转到小程序应用中并获取二维码中的参数,生成推荐记录。

微信官方文档 微信生成推广码接口

根据步骤调用接口,返回值是一个二进制文件,需要处理成图片。
(后端调用该接口不考虑)

前端处理方案,将二进制文件转换成base64文件,再存储本地即可。
具体实现如下:

let val = {
      path:'pages/index/index',
      scene:openId,
      width:280
    }
    wx.request({
      // 获取token
      url: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential',
      data: {
       appid: 'wxddd04a919638017b',
       secret: '96cb90a6f3b2e4993d125724d7a64a17'
      },
      success(res) {
       wx.request({
        // 调用接口B
        url: 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=' + res.data.access_token,
        method: 'POST',
        responseType: "arraybuffer",
        data: JSON.stringify(val),
        success(res) {
          console.log(res)
          // let base64 = wx.arrayBufferToBase64(res.data)
          // let bb = "data:image/png;base64,"+base64;
          // console.log(bb)
          let fileManager = wx.getFileSystemManager();//获取文件管理器
          let filePath = wx.env.USER_DATA_PATH + '/inner.jpg';//设置临时路径
          fileManager.writeFile({//获取到的数据写入临时路径
            filePath: filePath,//临时路径
            encoding: 'binary',//编码方式,二进制
            data: res.data,//请求到的数据
            success: function(res) {
              console.log(res)
              // console.log(filePath)//打印路径
              that.setData({imgUrl:filePath})
            },
            fail: function(res) {
              console.log(res)
            },
          });
        }
       })
      }
     })     

能个将二进制文件最终在前端展示,但是前端是不允许这样做的,因为微信官方规定AppSecret不能够写在前端

### 微信小程序云开发生成带参二维 在微信小程序中,通过云开发可以方便地创建带有自定义参数小程序码。这允许同的推广渠道拥有独立的二维,并能追踪到具体的访问来源。 #### 创建云函数用于获取小程序码 为了实现这一目标,首先需要编写一个云函数来调用微信接口以获得指定路径和查询字符串的小程序码: ```javascript // cloudfunctions/getQrcode/index.js const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) exports.main = async (event, context) => { try { const result = await wx.cloud.callFunction({ name: 'getWxacode', data: { path: event.path, query: JSON.stringify(event.query), width: 430 } }) return { code: 200, message: "success", buffer: result.buffer } } catch (err) { console.error(err) throw new Error(`Failed to get qrcode ${JSON.stringify(err)}`) } } ``` 此代片段展示了如何设置并执行异步请求至`callFunction` API 来取得所需的小程序码图像数据[^1]。 #### 调用云函数生成特定于渠道的二维 当有新的合作伙伴加入时,在服务器端可以通过调用上述云函数传入对应的参数(例如机构ID),从而为每个伙伴定制唯一的入口链接。下面是一个简单的例子说明怎样构建这样的请求: ```javascript async function createChannelCode(channelId){ let res = await uniCloud.callFunction({ name:'getQrcode',// 这里填写上面部署成功的云函数名称 data:{ path:"pages/index/index", query:{channel: channelId}// 将 channel ID 添加到查询参数中 } }); if(res.code === 200){ // 成功返回base64编后的图片流或者其他处理逻辑... }else{ console.log("Error:",res.message); } } ``` 这段 JavaScript 函数接受 `channelId` 参数作为输入,并将其嵌入到要传递给云函数的数据对象内。成功响应后会得到一张代表该渠道专属的小程序码图片。 #### 实现免费下载功能 对于来自特定渠道的新用户首次打开应用时提供限时免收费服务,则可以在前端页面加载完成后立即读取启动场景中的query字段判断是否有合法有效的渠道标识符存在;如果有则给予一定时间内的优惠权限。 ```javascript onLoad(options) { if (options && options.scene) { var sceneStr = decodeURIComponent(options.scene); // 解析携带的信息 this.checkChannel(sceneStr).then((valid)=>{ if(valid){ // 开启临时特权模式 } }).catch(console.warn); } }, methods: { checkChannel(sceneString){ return new Promise((resolve,reject)=>{ // 对sceneString解析验证合法性以及对应关系等操作.. resolve(true || false);// 返回true表示有效渠道,false反之 }); } } ``` 以上方法确保只有那些由特殊二维引导而来的访客能够在限定条件下享受特别待遇。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值