个人技术总结——微信原生云开发获取HTTPAPI实现小程序外访问云开发资源

222100326郑锦程 2024-06-06 21:40:44
这个作业属于哪个课程2302软件工程
这个作业要求在哪里软件工程实践总结&个人技术博客
这个作业的目标完成对软件工程实践课程的总结、个人技术的总结
其他参考文献《构建之法》,微信官方文档 ,CSDN

目录

  • 1 前言
  • 2 技术概述
  • 3 技术详述
  • 4 技术使用中遇到的困难和解决过程
  • 4.1 困难一:开始时无从入手
  • 4.2 困难二:显示HTTP访问拒绝
  • 4.3 困难三:使用ApiPost软件外部访问小程序云资源时失败,而网页版ApiPost却成功
  • 5 总结
  • 6 参考文献

1 前言

  • 学习路线: 尽管这一学期课程很紧,而且任务繁多,我还是抽空写了些Unity游戏,参加了一个大学生游戏比赛,已经入围初赛。

  • 团队开发角色: 项目经理,前端,后端,测试…… ,在团队项目中,我做了以下事项:

    • 需求分析
    • 前后端接口设计
    • 前端页面js编写
    • 后端云函数代码实现
    • 压力测试
  • 新收获的技术:
    • Vue3前端框架
    • nlohmann解析json文件
    • 微信小程序原生开发与云开发
    • 项目部署服务器

本篇博客,我将主要讲解微信原生云开发获取HTTPAPI实现小程序外访问云开发资源的技术

2 技术概述

  • 这个技术是做什么的: 主要是为了获取微信原生云开发的云函数的HTTPAPI,以实现小程序外访问云资源,就可以借助第三方压测工具进行压力测试等。
  • 学习技术的原因: 原生的云开发功能,里面的云函数不是采用传统的http调用的形式,而是使用wx.cloud.callFunction这个函数来调用云函数,虽然这对编写小程序带来了方便,但如果需要从外部访问云函数或者云资源,比如用压测工具ApiPost压测云函数需要用到http形式的接口,就需要想办法获取云函数的HTTPAPI。
  • 技术的难点: 网上相关资料很少,只有在官方文档里有提及HTTPAPI,而且步骤较为繁琐。

3 技术详述

  • 步骤一:获取AppID(小程序ID)和AppSecret(小程序密钥)

    AppID在开发工具的详情中,当然还有很多地方可以找到AppID

    在这里插入图片描述


    AppSecret在微信公众平台中获取

    在这里插入图片描述

  • 步骤二:获取小程序的接口调用凭据,可以使用网页在线调试

    调用格式如下:

    GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
    返回结构为:
    { "access_token":"ACCESS_TOKEN", "expires_in":7200 }

    在这里插入图片描述

  • 步骤三:调用官方给的触发云函数的HTTPAPI的接口

    调用格式如下:

    POST https://api.weixin.qq.com/tcb/invokecloudfunction?access_token=ACCESS_TOKEN&env=ENV&name=FUNCTION_NAME
    返回结构为:
    { "errcode": 0, "errmsg": "ok", "resp_data": "{\"event\":{\"userInfo\":{\"appId\":\"SAMPLE_APPID\"}},\"appid\":\"SAMPLE_APPID\"}" }

    在这里插入图片描述


    如userLogin云函数:

    // 云函数入口文件
    const cloud = require('wx-server-sdk')
    
    cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
    
    const db = cloud.database();
    
    // 云函数入口函数
    exports.main = async (event, context) => {
      const { number, password } = event;
      try {
        // 查询用户名是否存在
        const result = await db.collection('user').where({
          number: number,
          password: password // 注意:实际开发中密码不应明文存储
        }).get();
    
        if (result.data.length > 0) {
          // 登录成功
          return {
            success: true,
            data: result.data[0]
          };
        } else {
          // 登录失败
          return {
            success: false,
            message: '用户名或密码错误'
          };
        }
      } catch (e) {
        // 异常处理
        return {
          success: false,
          message: e.message
        };
      }
    };
    

    调用如下:
    POST https://api.weixin.qq.com/tcb/invokecloudfunction?access_token=80_XCg46zU3nJ6uD_ufguB62Im-i_pxACSMAAj909az6C-FxGIXS2NgCAPYGYcPraJEzzr9TBdhmZJ3poFFAoV7ET5wrYY-nVU9xeOz3aj8tCyP2uAKlRNQj4siPwgSWYcADAHLN&env=fuzzenv-7gbm8j2ud77d75fc&name=userLogin

  • 步骤四:尝试从外部访问云资源,这里采用测试工具ApiPost来访问

    格式如下:
    POST https://api.weixin.qq.com/tcb/invokecloudfunction?access_token=ACCESS_TOKEN&env=ENV&name=FUNCTION_NAME
    测试截图如下:

    在这里插入图片描述

4 技术使用中遇到的困难和解决过程

4.1 困难一:开始时无从入手

对于微信原生的云开发,云函数是在工具内直接上传代码的,如下:

在这里插入图片描述


而不论是使用还是调用测试,都只能在开发者工具内进行。
从网上找了许多资料,基本上都是讲如何在小程序云函数里实现http调用,和我的需求相反了。
兜兜转转半天,最后在官方文档中找到了相关的页面。
所以官方文档才是解决这种小众问题的第一选择。

4.2 困难二:显示HTTP访问拒绝

这是因为invokeCloudFunction这个API只能用Post请求而不能是Get,这也算一个细节吧,

在这里插入图片描述


可以看到,参数中明确属性定义成了POSTBODY
解决了这个问题,过了一段时间,再次显示了访问失败。
这是因为接口凭证是有时效的,超时了要再次获取,

在这里插入图片描述

4.3 困难三:使用ApiPost软件外部访问小程序云资源时失败,而网页版ApiPost却成功

这是一个非常奇怪的问题,为什么浏览器可以访问,软件却不行呢?
刚开始我以为是微信那边的问题,在官方文档里找了很久,是否有相关的文字说明。
最后在网上寻找资料,发现有可能和电脑设置的host有关,将host文件加入这行
127.0.0.1 localhost
重启软件,成功!

5 总结

  • 官方文档非常好用,遇到问题请先查阅官方文档。
  • 尽管微信的云开发功能十分方便,但是局限性很大,只能在微信官方的规则下进行开发,如果云函数就是不提供外部的http访问呢?所以如果做的项目的复杂度比较高的话,还是要斟酌一下是否要采用微信原生开发了。
  • 对于云函数的编写的话,尽量做到调用逻辑简单而高效,不仅是为了提高性能,减少接口的反应时间,还是为了节省服务器资源,很贵的好吧。

6 参考文献

微信官方文档:云开发 HTTP API 文档
CSDN:apipost注意事项

...全文
40 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

122

社区成员

发帖
与我相关
我的任务
社区描述
FZU-SE
软件工程 高校
社区管理员
  • LinQF39
  • 助教-吴可仪
  • 一杯时间
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧