首页
免费后端云服务
关于
Search
1
小程序后端入门系列视频教程【一-微信开发工具介绍】
9,812 阅读
2
微信小程序三级联动之多列选择器
9,710 阅读
3
小程序开发免费后端之神秘利器分享
9,632 阅读
4
Golang-开发企业级资源权限管理【第一步表设计】-1
9,174 阅读
5
学会微信服务端开发第一步
9,049 阅读
日常记录
日常
随笔
Bmob后端云
从零开始学物联网
Serverless实战驾校小程序
心邮
Serverless
向量数据库
登录
Search
Typecho
累计撰写
124
篇文章
累计收到
22
条评论
首页
栏目
日常记录
日常
随笔
Bmob后端云
从零开始学物联网
Serverless实战驾校小程序
心邮
Serverless
向量数据库
页面
免费后端云服务
关于
搜索到
2
篇与
的结果
2020-07-19
学会微信服务端开发第一步
什么是微信开发第一步?微信公众平台开发第一步详解如果有人问你,微信体系下,开放平台、公众号、小程序开发第一步是做什么?我的回答是获取微信access_token。access_token是公众号的全局唯一接口调用凭据, 没有凭据后面的其他接口,都没法调用。公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。官方文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183接口地址https请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET参数说明参数是否必须说明grant_type是获取access_token填写client_credentialappid是第三方用户唯一凭证secret是第三方用户唯一凭证密钥,即appsecret返回说明正常情况下,微信会返回下述JSON数据包给公众号:{"access_token":"ACCESS_TOKEN","expires_in":7200}调试工具微信官方为了大家开发公众号时,提供大家的开发效率,特地给开发者上线了一套调试工具https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=基础支持&form=获取access_token接口%20/token功能实现这个功能,只需要调用这个接口,然后返回access_token,我们就不搭建Liunx,PHP,node等环境,直接用当今流行的Serverless 相关平台的Faas(云函数)功能。 这里使用的是Bmob后端云,当然你用阿里、腾讯、华为等等厂商支持Faas(云函数) 功能的都可以,只是语法稍微有点不同,这些开发小程序、公众号都可以。 比自己搭建服务器要快很多。前期准备第一步:准备配置信息登陆微信平台https://mp.weixin.qq.com/进入开发-》基本配置拿到开发者ID(AppID)与开发者密码(AppSecret),开发请求时需要用到。第二步:编写云函数首先你有个Bmob后端应用,点击进入云函数。选择模板创建,当然你也可以自己变。自己编写代码,我们有一点javascript基础,或者java基础都可以。这里介绍下Nodejs文档地址:http://doc.bmob.cn/cloud_function/web/develop_doc/#http_1HTTP请求对象 oHttp对象可以模拟实现get、post、put、delete等各种HTTP请求信息,让你在云端实现诸如数据采集、OAuth授权登录等功能。Bmob的HTTP请求模块采用Nodejs提供的request模块,这里提供简单的Get和Post的操作实例。更多的功能详细参考:https://npmjs.org/package/request /** *发起Get请求 */ //获取Http模块 var http = modules.oHttp; //发起Get请求 http('https://www.bmob.cn', function (error, res, body) { response.send(body); }); - /** *发起Post请求 */ //获取Http模块 var http = modules.oHttp; var options = { "url": 'https://api.bmob.cn/1/classes/GameScore', "headers": { 'X-Bmob-Application-Id': 'Your Application ID', 'X-Bmob-REST-API-Key': 'Your REST API Key', 'Content-Type': 'application/json' }, "body":JSON.stringify({"score":1337,"playerName":"Sean Plott"}) }; http.post(options, function(error, res, body) { response.send(body); }); 微信access_token,这里只需要发起一个get请求,地址是这样。https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=基础支持&form=获取access_token接口%20/token/** *发起Get请求 */ //获取Http模块 var http = modules.oHttp; var url ="https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=基础支持&form=获取access_token接口%20/token"; //发起Get请求 http(url, function (error, res, body) { response.send(body); });不到10行代码,我们就可以拿到微信开发必备的access_token,access_token微信是有次数限制的,当然不能这么每次获取使用, 这样只要请求次数多,每月必定超出微信给的次数。 微信官方说:access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效, 那我们就给这个函数的结果保存到数据库,做个定时任务2小时执行一次。然后需要时读取数据库,这样就不会担心超了。第三步:access_token保存数据库我们在控制台建一个WeiXin_access_token表,增加access_token字段,里面随便增加一条记录,拿到id,用来更新这条记录。当然你也可以把每次获取的access_token插入到这个表,需要的时候获取到最新的一条。云函数数据表操作文档:http://doc.bmob.cn/cloud_function/web/develop_doc/#_9function onRequest (request, response, modules) { //获取数据库对象 var db = modules.oData; //这里放到表里的ID var objectId = 'NJEi333B'; //http请求方式: GET var appid = 'wxd1b8c236059cd569'; var secret = 'xxxxxxxxx'; var url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + appid + '&secret=' + secret; //获取Http模块 var http = modules.oHttp; //发起Get请求 http(url, function (error, res, body) { if (!error && res.statusCode == 200) { //写入数据库 var resultObject = JSON.parse(body); //如果返回错误则打印 if (resultObject.errcode) { response.send(resultObject); } //更新到数据表 db.update({ "table": "WeiXin_access_token", "objectId": objectId, "data": { "access_token": resultObject.access_token } }, function (err, data) { response.send("success" + data); }); } }); //获取微信access_token END }第四步:读取access_token暴露给其他平台调用新建个空白云函数,里面编写一下代码function onRequest(request, response, modules) { //数据库对象 var db = modules.oData; //查询一条数据 db.findOne({ "table":"WeiXin_access_token", "objectId":"NJEi333B" },function(err,data){ //JSON打印给客户端 response.send(data); }); } 这里是代码的执行结果,需要预览,可以打开一下链接。http://cloud.bmob.cn/3fbee3a417249ddf/token一样不到10行代码,即可暴露access_token给其他平台调用。总计不到20行代码,不需要10分钟,就可以实现微信整个access_token的维护,与暴露给其他平台使用。最后还有一个关键问题, 2小时自动刷新access_token。第四步:自动刷新access_tokenBmob平台云函数支持liunx下面的crontab语法定时任务,当然国内其他公司的云函数也是支持定时任务的,具体看开发文档。http://doc.bmob.cn/cloud_function/web/timing_tasks/总结:我们可以看到Serverless的Faas 开发微应用,开发效率比传统自己购买云主机,云数据库。高出很多倍。以至于国内这2年,阿里、腾讯、华为等云厂商都推出了自己的Faas 服务。大家都可以去体验一下,你只需要关系业务代码,不再需要去了解框架、运维、底层相关技术。
2020年07月19日
9,049 阅读
39 评论
49 点赞
2020-07-03
Serverless实战驾校小程序【语音读题】六
语音读题功能为了更方便查看题目,我们加入读题功能。语音读题主要应用在智能客服机器人、电子有声读物、智慧教育等领域,了解到目前市场语音合成技术,主要有讯飞语音、百度语音、腾讯语音这几家大厂。 都支持男女生声,讯飞价格比较贵,这里发现腾讯语音合成暂时不收费,腾讯云的语言合成介绍https://cloud.tencent.com/product/tts#scenarios语音合成(Text To Speech)满足已知文本生成语音的需求,打通人机交互闭环。多种音色选择,支持自定义音量、语速,为企业客户提供定制自有领域词库和个性化发音人服务,让发音更自然、更专业、更符合场景需求。语音合成广泛应用于语音导航、有声读物、标准发音领读、自动新闻播报等场景。本以为这些API厂商,直接提供了API接口,小程序里请求就好了,现实不是的,做法跟做微信支付有点类似。必须自己实现一套服务端API,服务端实现接口加密等操作。这几家都需要这样做,这里首先把需要的资料准备好。开发语言 这里选Golang,官方有服务端SDK腾讯云API密匙,自己在控制台查看并记录开发文档地址:https://cloud.tencent.com/document/api/441/18086选一台服务器,备案好域名,配置好https编写代码1.路由 beego.Router("/1/textToVoice", &controllers.CloudController{}, "post:TextToVoice") 2.控制器func (cloud *CloudController) TextToVoice() { body := cloud.Ctx.Input.CopyBody(beego.BConfig.MaxMemory) js, err := simplejson.NewJson(body) if err != nil { cloud.responseError(err) } //获取文本信息 text := js.Get("text").MustString() //判断不能为空 if strings.TrimSpace(text) == "" { cloud.responseError(fmt.Errorf("text param不能为空")) } //这里初始化大家传入自己腾讯云的key信息 client, _ := aai.NewClientWithSecretId( "id", "key", regions.Guangzhou) request := aai.NewTextToVoiceRequest() request.Text = common.StringPtr(text) request.SessionId = common.StringPtr(uuid.GetRandomString(16)) request.ModelType = common.Int64Ptr(-1) request.ModelType = common.Int64Ptr(-1) request.Speed = common.Float64Ptr(0.8) response, err := client.TextToVoice(request) // 处理异常 if _, ok := err.(*errors.TencentCloudSDKError); ok { cloud.responseError(fmt.Errorf("An API error has returned: %s", err)) } // 非SDK异常,直接失败。实际代码中可以加入其他的处理。 if err != nil { cloud.responseError(err) } // 打印返回的json字符串 var base64Str *string = response.Response.Audio fileByte, err := models.Base64Decode([]byte(*base64Str)) if err != nil { cloud.responseError(err) } fileName := uuid.GetRandomString(16) + "_" + fmt.Sprintf("%d", time.Now().Unix()) + ".wav" filePath := "/data/dyfsuda/app/restful/files/" + fileName url := "https://api.xxxx.com/files/" + fileName //把文件写入目录 if err = ioutil.WriteFile(filePath, fileByte, os.ModeAppend); err != nil { cloud.responseError(err) } if err = os.Chmod(filePath, 0777); err != nil { cloud.responseError(err) } //返回文件路径给客户端 cloud.Data["json"] = map[string]string{"url": url} cloud.ServeJSON() }这里每次的题目可能都不一样,所以就不更新到数据库了,需要的时候,调用一次接口,如果接口收费,这里就把语音文件路径保存到数据表里,每次判断数据表是否存在语音就可以了。目前开发这读题还是需要自己有服务器,如果现成的API调用就好了。这项目目前已经上线,大家可以体验下读题效果。
2020年07月03日
6,171 阅读
0 评论
35 点赞