zoukankan      html  css  js  c++  java
  • nodejs + 小程序云函数 生成小程序码

    前言:这个东西坑死我了 业务需求要生成小程序码 然后我找了两天的资料 运行 生成一堆的乱码 死活就是不能生成 最后看了一遍博客 套用了一下 自己又简单的改了一下  nodejs 我是刚刚接触  有很多都是不明白 request-promise  开始我用这个框架获得“access_token

    ” 然后我就想 这个可以发送请求  那生成小程序码是不是也可以用这个  答案是错误的  里面少了一个设置responseType: 'arraybuffer'  也许里面有 但是我不知道  最后 我请求access_token 的时候用的是request-promise 这个框架  但是生成小程序码的时候用的axios这个  行了不说了  直接上代码
    第一步先导入框架  如果自己没有用到可以不用
    npm install --save request  // request框架
    npm install --save request-promise   // request框架promise风格
    npm install --save axios   // 数据请求框架,可将返回的数据类型设置为流`stream`
    # 备注:install 可以简写为 i ;save 作用是将这个库添加到package.json里
    然后就是生成小程序码了   下面的代码 直接可以复制粘贴 直接可以用
    const cloud = require('wx-server-sdk')
    const axios = require('axios')
    var rp = require('request-promise');
    const fs = require('fs');
    var stream = require('stream');
    cloud.init()
    
    // 云函数入口函数
    exports.main = async (event, context) => {
      console.log(event)
      try {
        const resultValue = await rp('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + event.userInfo.appId + '&secret=' + event.appSectet)
        const token = JSON.parse(resultValue).access_token;
        console.log('------ TOKEN:', token);
    
        //const response = await axios({
        return await axios({
          method: 'post',
          url: 'https://api.weixin.qq.com/wxa/getwxacode',
          //responseType: 'stream',
          responseType: 'arraybuffer',
          params: {
            access_token: token,
          },
          data: {
            //access_token: token,
            path: "pages/index/index",
             300,
            //scene: "id=12"
          },
        }).then(function (response){
          return response.data;
        })
      } catch (err) {
        console.log('>>>>>> ERROR:', err)
      }
    }

    再生成完小程序码数据后  

    在调用函数里需要转base64格式 然后图片就生成了

    wx.cloud.callFunction({ 
          name: 'getImage',
          data: {
            appSectet: app.globalData.appSectet
          }
        }).then(res => {
         
          var imgUrl = wx.arrayBufferToBase64(res.result); //res.result 
          imgUrl = ("data:image/png;base64," + imgUrl);
          console.log(imgUrl)
          thisData.setData({
            captchaImage1: imgUrl
          }) 
          
          
        })

    如果你不想转base64 的话  可以直接上传到七牛  然后拿到路径

    那就直接在云函数里 加代码就可以  上传的到七牛 用流的形式上传到七牛  

    **********注意 是在云函数加代码呀    在上面的云函数代码里  就不能直接返回了  把.then后面的东西注释掉  把这个response 变量打开   然后要引入七牛的框架 

    
    
    const qiniu = require('qiniu')  //引入的七牛
     
     
    var options = {
          scope: "你的空间",
        };
        var accessKey = "你的accessKey ";
        var secretKey = "你的secretKey ";
        var mac = new qiniu.auth.digest.Mac(accessKey, secretKey);
        var options = {
          scope: "bwt-portrait",
        };
        var putPolicy = new qiniu.rs.PutPolicy(options);
        var uploadToken = putPolicy.uploadToken(mac);
        console.log(uploadToken, "--------------")
        var config = new qiniu.conf.Config();
        // 空间对应的机房
        config.zone = qiniu.zone.Zone_z0
    
        var key = 'image10.png';
        return await new Promise(res => {
          var formUploader = new qiniu.form_up.FormUploader(config);
          var putExtra = new qiniu.form_up.PutExtra();
          var readableStream = response.data;
          formUploader.put(uploadToken, key, readableStream, putExtra, function (respErr,
            respBody, respInfo) {
            console.log("代码走了");
            if (respErr) {
              throw respErr;
            }
            if (respInfo.statusCode == 200) {
              console.log(respBody);
              res(respBody)
            } else {
              console.log(respInfo.statusCode);
              console.log(respBody);
              res(respInfo.statusCode)
            }
          });
        })

    大体就是这样 业务需求的不同 实现的也是不同的  可以自行更改 

    最后我把我看的博客地址连上   

    https://blog.csdn.net/feng2qing/article/details/82914505?utm_source=blogxgwz5

  • 相关阅读:
    Hadoop 3.1.1
    java乐观锁和悲观锁
    git push时提示The authenticity of host 'github.com (52.74.223.119)' can't be established.
    github 提交使用git commit,报错Please tell me who you are
    Mac adb 提示 command not found. 解决办法
    Mac系统下安卓使用uiautomator配置SDK及真机环境配置
    python随笔:启动django报错
    ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/Django-1.11.23.dist-info' Consider using the `--user` option or check the
    Python中安装bs4后,pycharm依然报错ModuleNotFoundError: No module named 'bs4'
    Python中__init__和self的意义和作用
  • 原文地址:https://www.cnblogs.com/pqy521/p/9984248.html
Copyright © 2011-2022 走看看