1.搭建uniapp项目(条件编译)
在微信开发者工具中将端口打开(设置--安全设置)
2.登录流程
先使用 uni.login(),从小程序服务器中得到一个用户临时登录凭证。(有效时间5分钟) provider即 uni.getProvider
再通过 uni.request()发送code给自己的项目服务器中去。
后端得到用户的临时登录凭证code后,会将appid+appsecret+code发送给微信接口服务。(https://api.weixin.qq.com/sns/jscode2session 接口)
微信接口服务就会去校验code是否失效,appid,appsecret是否是你的应用。校验通过后,会返回一个session_key(相当于是个密钥),openid(微信用户身份的唯一标识)到后端
后端就可以通过openid来查询该用户在自己的系统里的信息(比如等级,昵称什么的)。后端会返回给前端一个登录状态(成功或失败,比如成功时就会返回一个token+用户内容。失败时,表示该用户并未在我们的小程序中进行注册--注册用户--uni.getUserProfile,得到用户信息--传递给后端进行注册)
成功时,前端(小程序)会将token存到storage里面。下一次前端再次发起request请求会携带上token。 eg:可以判断用户是否绑定了手机号,若为空则去绑定手机号,若不为空,则表示登录系统成功。
3.支付
uniapp编写的app
-
-
-
- 支付宝支付
-
-
支付宝支付不需要知道是谁支付,只要支付就行
step1:创建订单信息,获取支付信息
请求后端接口,传递订单信息,比如订单总金额。后端返回orderInfo信息
step2:发起支付
uni.requestPayment({
provider:’alipay’,
orderInfo (是一串字符串)
})
-
-
-
- 微信支付
-
-
step1:登录
step2:获取openid
step3:创建订单获取支付信息
step4:发起支付
uniapp编写的小程序支付
先去请求后端接口,让其生成前端之后uni.requestPayment(obj)的obj参数信息
4.自动定位
uni.getLocation(OBJECT) 可以获取当前位置的经纬度
type:’wgs84’|’gcj02’ success(res){可以得到经纬度}
uni.openLocation(obj) 根据经纬度获取位置
latitude,longitude(需要是gcj02获得的) success(res)
5.分享
小程序:不支持API调用,只能用户主动点击触发分享。可使用自定义按钮方式 <button open-type="share"> 或监听系统右上角的分享按钮 onShareAppMessage 进行自定义分享内容
小程序中用户点击分享后,在 js 中定义 onShareAppMessage 处理函数(分享给朋友)(和 onLoad 等生命周期函数同级),设置该页面的分享信息
- 用户点击分享按钮的时候会调用。这个分享按钮可能是小程序右上角原生菜单自带的分享按钮,也可能是开发者在页面中放置的分享按钮(
<button open-type="share">
); - 此事件需要 return 一个Object,用于自定义分享内容。
6.持久化
在uniapp中,使用pinia或vuex插件。默认使用 localStorage
实现持久化,
小程序端不兼容,需要替换持久化 API。
uniapp的分包
在page.json中配置subPackages
subPackages 节点接收一个数组,数组每一项都是应用的子包,其属性值root(子包的根目录)和pages(子包由哪些页面组成,参数同pages)
小程序传参问题
在微信小程序中,不能使用vuerouter,
<navaigator url=”/xxx”></navigator> open-type默认值是”navigate”
或wx.navigatorTo({url:’/xxx’})
不能跳到tabbar页面,只能往非tabbar页面跳转
传参:可以直接以查询字符串形式进行拼接
<navaigator url=”/xxx” open-type=”switchTab”></navigator>
或wx.switchTab()
不支持查询字符串的拼接
传参:借助本地存储。wx.setstorageSync() wx.getstorageSync()
借助全局globalData完成
在跳转到的页面,onLoad:function(query){}