一个小程序也能获得 50W 天使投资!图书社交小程序的核心步骤及源码分享 (上)

简介: 2017年共享经济很火,所以很多人在共享这事儿上动脑筋,也包括我。现在事实证明当时大部分的共享经济概念都死了。咱们国内图书价格非常便宜,共享借书连物流成本都负担不起,商业计划中的社交体系短期内也不可能搭建起来。

uniCloud云开发


事先声明,本人没有恰uniCloud的饭,但uniCloud确实好用,阿里云给的免费额度也高。我已经多次使用uniCloud零成本搭了好几个应用了。甚至后端用uniCloud,前端用Flutter的事儿我也干过。


云开发的好处已经不用多讲了吧?FAAS = Functions as a Service


image.png


有了云开发,我们开发者只需要专注于业务逻辑代码的编写,以上那些和业务无关的知识都不需要掌握了。原先开发一个产品的业务流程也发生了很大的变化


传统流程


image.png


基于云开发的流程


image.png


uniCloud提供以下这些服务,但这些基础服务其实是由阿里云腾讯云提供的,使用前你要选择用哪个服务商。


image.png


在这里直接推荐大家使用uniCloud时选择阿里云,因为腾讯真抠啊~那点免费额度还是算了吧,不过选腾讯云的唯一好处是腾讯系生态可以免鉴权


获取微信用户信息


获取openid


uni.login({
    provider:"weixin",
    success:(res)=>{
        uniCloud.callFunction({
            name:"login",
            data:{
                code:res.code
            }
        })
    }
})


通过小程序后台获取到的AppIdAppSecret,在云函数里调用微信服务端APIcode2session


const { code } = event;
const res = await uniCloud.httpclient.request(
        "https://api.weixin.qq.com/sns/jscode2session?appid="+appId+"&secret="+appSecret+"&js_code="+code+"&grant_type=authorization_code",
        {
                dataType:"json"
        }
)
const openid = res.data.openid;


这样我们就拿到了微信用户的openid,已经可以用来建立识别用户,建立用户系统了。后续所有用户产品的数据,都会和这个openid关联起来。


JWT实现用户凭证


在云开发里没有Session这回事,所以就不能使用Session那套机制来实现用户凭证


image.png


不过,有更先进的机制为我们所用。


  • 服务端将用户的id或需要携带的信息加密成Token,加密使用的密钥仅在服务端保存。


  • 通过登录接口返回给前端,前端自己缓存起来。


  • 后续所有请求都携带这个Token作为参数,云函数里获取Token解密,并检查有效性


image.png


安装jsonwebtoken依赖


npm install jsonwebtoken


使用jwt签名,我这里就是为了不直接暴露openid,密钥自己随便写一个字符串就行,这里图省事儿,直接用了小程序的appSecret


const jwt = require('jsonwebtoken'); 
//生成token
//jwt.sign(携带数据,密钥,过期时间等选项);
jwt.sign({openid:openid},appSecret,{expiresIn:60*60*24});


前端封装了网络请求的api,只要发现有缓存的token,后续请求都会自动携带。需要对用户进行校验的接口也通通会校验token的有效性,然后解密取出openid用于用户的数据操作。


jwt.verify(token,appSecret);
//校验成功的话会解密出 {openid:openid}


获取昵称头像


小程序SDK也一直在迭代,今年很多小程序里的用户昵称都变成了微信用户对不对,就是因为这个接口改掉了。


image.png


过去使用的getUserInfo方法,改为使用getUserProfile,我们就能获得微信用户的昵称头像等数据了。只是这个api每次都会有弹窗提示用户


uni.getUserProfile({
    desc: '用于完善会员资料',//必填参数
    success: (res) => {
        res.userInfo;
    }
})


image.png


我个人的做法是先通过login换取openid。然后用户会看到自己没有昵称和头像,通过按钮提示用户同步微信用户信息。点击后调用getUserProfile获取信息显示并更新到用户数据库中。


image.png


//云函数取参
const { userInfo,token } = event;
//获取数据库对象
const db = uniCloud.database();
//校验并解密token
const payload = verifyToken(token);
//更新数据库中指定openid的用户信息
const dbRes = await db.collection("users").where({
        openid:payload.openid
}).update({
        nickName:userInfo.nickName,
        avatarUrl:userInfo.avatarUrl,
        gender:userInfo.gender,
        country:userInfo.country,
        province:userInfo.province,
        city:userInfo.city
});


云数据库操作


有了上面基于jsonwebtoken的用户凭证后,接下来的业务基本就是对其他数据集合的CRUD了,创建书架,上传图书,获取书架列表,获取图书列表,删除书架,删除图书...


书房/书架数据库


const payload = event.token?verifyToken(event.token):null;
const action = event.action;
let dbRes;
if(action=="create"){
        //将书房的名字提交至内容安全审核
        const res = await msgSecCheck(payload.openid,event.name);
        if(res.result.suggest!="pass"){
                return {err:1,msg:"内容不安全"};
        }
        //安全内容则写入数据库,建立书架数据
        dbRes = await db.collection("bookshelfs").add({
                owner:payload.openid,
                name:event.name,
                address:event.address,
                geopoint:new db.Geo.Point(event.longitude, event.latitude),
                totalbook:0
        })
        return dbRes;
}


创建书房时,由于书房名称由用户自定义,并且其他用户可见。这就叫UGC的内容,必须通过内容安全审核...


uniCloud里实现内容安全审查


const res = await uniCloud.httpclient.request("https://api.weixin.qq.com/wxa/msg_sec_check?access_token="+access_token,{
        method:"POST",
        dataType:"json",
        headers:{
                "Content-Type":"application/json"
        },
        data:{
                version:"2",
                openid:"内容产出者的openid",
                scene:2,
                content:"要审查的文本内容"
        }
});


我们的书架需要在地图上显示,所以必须让用户选择并提交一个地理位置。而云数据库还可以非常方便的添加基于地理位置的索引,让我们可以通过地理位置相关的查询方法来罗列书架数据


new db.Geo.Point(经度, 纬度)


image.png



相关文章
|
1月前
|
小程序 数据安全/隐私保护
跑腿小程序系统源码
这是一款跑腿小程序,带有智能派单、系统派单、同城配送、校园跑腿、预约取件、用户端+骑手端 基于FastAdmin+thinkphp和uniapp开发的优创同城跑腿系统,支持帮取、帮送模式,包含用户端、骑手端、运营后台。
77 32
|
27天前
|
存储 小程序 搜索推荐
打造无缝社交体验:多平台适配,开启线上线下陪玩系统小程序社交新时代
通过实施以上策略和行动计划,可以打造出一个无缝社交体验的多平台陪玩社交系统,为用户提供更加便捷、高效、有趣的社交体验,开启线上线下陪玩系统源码社交的新时代。
54 11
|
1月前
|
移动开发 开发框架 小程序
轻松搭建婚恋交友系统源码,H5/小程序/APP自动适配,智能匹配恋爱交友平台快速落地
婚恋交友系统涵盖在线交友、线下活动、专业服务、社交娱乐等,满足用户多样化需求。系统设计简洁易用,提供实名认证、多注册方式及安全保护,确保用户隐私和数据安全。功能丰富,支持图文展示、筛选匹配、聊天互动、虚拟礼物等,提升互动趣味性。平台可分类管理用户、审核信息、智能推荐,优化用户体验。基于TP6+Uni-app框架,实现跨平台同步,支持二次开发,适应不同市场需求。 [了解更多](https://gitee.com/multi-customer-software/jy)
|
1月前
|
小程序 IDE PHP
圈子源码如何打包生成App小程序/开发一个圈子系统软件所需要的费用体现在哪里?
将PHP源码打包成App的过程涉及多个步骤和技术选择。以圈子源码为例,首先明确需求,确定App功能和目标用户群体,并根据需求开发小程序页面,如用户注册、圈子列表等。源码准备阶段确保源码适用于小程序开发,环境配置需安装IDE(如微信开发者工具)及依赖库。最后在IDE中打包小程序并上传至管理平台,通过审核后发布。费用方面,模板开发成本较低,定制开发则更高,具体取决于需求复杂度和第三方服务费用。
74 0
|
2月前
|
开发框架 小程序 前端开发
圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
本文介绍了圈子社交APP的源码获取、分析与定制,PHP实现的圈子框架设计及代码编写,以及圈子小程序的安装搭建。涵盖环境配置、数据库设计、前后端开发与接口对接等内容,确保平台的安全性、性能和功能完整性。通过详细指导,帮助开发者快速搭建稳定可靠的圈子社交平台。
|
30天前
|
移动开发 小程序
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
27 0
|
2月前
|
移动开发 小程序 前端开发
使用php开发圈子系统特点,如何获取圈子系统源码,社交圈子运营以及圈子系统的功能特点,圈子系统,允许二开,免费源码,APP 小程序 H5
开发一个圈子系统(也称为社交网络或社群系统)可以是一个复杂但非常有趣的项目。以下是一些关键特点和步骤,帮助你理解如何开发、获取源码以及运营一个圈子系统。
169 4
|
2月前
|
小程序 安全 网络安全
清晰易懂!陪玩系统源码搭建的核心功能,陪玩小程序、陪玩app的搭建步骤!
陪玩系统源码包含多种约单方式、实时语音互动、直播间与聊天室、大神申请与抢单、动态互动与社交及在线支付与评价等核心功能。搭建步骤包括环境准备、源码上传与解压、数据库配置、域名与SSL证书绑定、伪静态配置及后台管理。注意事项涵盖源码安全性、二次开发、合规性和技术支持。确保平台安全、合规并提供良好用户体验是关键。
|
3月前
|
移动开发 小程序
仿青藤之恋社交交友软件系统源码 即时通讯 聊天 微信小程序 App H5三端通用
仿青藤之恋社交交友软件系统源码 即时通讯 聊天 微信小程序 App H5三端通用
138 3
|
3月前
|
小程序 前端开发 JavaScript
在线课堂+工具组件小程序uniapp移动端源码
在线课堂+工具组件小程序uniapp移动端源码
81 0
在线课堂+工具组件小程序uniapp移动端源码

热门文章

最新文章