122
社区成员
发帖
与我相关
我的任务
分享| 这个作业属于哪个课程 | 2302软件工程 |
|---|---|
| 这个作业要求在哪里 | 软件工程实践总结&个人技术博客 |
| 这个作业的目标 | 完成对软件工程实践课程的总结、个人技术的总结 |
| 其他参考文献 | 《构建之法》,微信官方文档 ,CSDN |
学习路线: 尽管这一学期课程很紧,而且任务繁多,我还是抽空写了些Unity游戏,参加了一个大学生游戏比赛,已经入围初赛。
团队开发角色: 项目经理,前端,后端,测试…… ,在团队项目中,我做了以下事项:
本篇博客,我将主要讲解微信原生云开发获取HTTPAPI实现小程序外访问云开发资源的技术
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 }
调用格式如下:
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
格式如下:
POST https://api.weixin.qq.com/tcb/invokecloudfunction?access_token=ACCESS_TOKEN&env=ENV&name=FUNCTION_NAME
测试截图如下:
对于微信原生的云开发,云函数是在工具内直接上传代码的,如下:
而不论是使用还是调用测试,都只能在开发者工具内进行。
从网上找了许多资料,基本上都是讲如何在小程序云函数里实现http调用,和我的需求相反了。
兜兜转转半天,最后在官方文档中找到了相关的页面。
所以官方文档才是解决这种小众问题的第一选择。
这是因为
invokeCloudFunction这个API只能用Post请求而不能是Get,这也算一个细节吧,
可以看到,参数中明确属性定义成了POSTBODY。
解决了这个问题,过了一段时间,再次显示了访问失败。
这是因为接口凭证是有时效的,超时了要再次获取,
这是一个非常奇怪的问题,为什么浏览器可以访问,软件却不行呢?
刚开始我以为是微信那边的问题,在官方文档里找了很久,是否有相关的文字说明。
最后在网上寻找资料,发现有可能和电脑设置的host有关,将host文件加入这行127.0.0.1 localhost
重启软件,成功!