共享单车微信小程序
微信小程序bike单车,前台使用小程序地图控件+weui+小程序相关组件和API,后台使用SpringBoot+JPA,用户及单车信息保存进mongodb,短信平台的配置信息和临时生成的验证码存放进redis用于校验。实现定位,单车增加及搜索,用户注册,短信接口调用,支付押金等功能。

1. 地图定位及显示周围单车数量

页面通过<map>标签来引入微信地图
<map id='myMap' longitude='{{longitude}}' latitude='{{latitude}}' controls='{{controls}}' markers='{{markers}}' show-location='true'
bindcontroltap='controltap' scale='17' style='width: 100%; height: 100%'>
</map>
定位通过监听页面加载的生命周期函数onLoad获取经纬度来实现,同时获取周围的单车信息
onLoad: function() {
var that = this;
wx.getLocation({
success: function(res) {
var longitude = res.longitude;
var latitude = res.latitude;
that.setData({
longitude: longitude,
latitude: latitude
})
// 查找单车信息
findBikes(longitude, latitude, that);
},
});
/*其他加载项*/
}
查找周围单车
function findBikes(longitude, latitude, that) {
wx.request({
url: 'http://localhost:8080/bike/findNear',
method: 'GET',
data: {
longitude: longitude,
latitude: latitude
},
success: function(res) {
var bikes = res.data.map((geoResult) => {
return {
longitude: geoResult.content.location[0],
latitude: geoResult.content.location[1],
iconPath: '/images/bike.png',
width: 35,
height: 40,
id: geoResult.content.id
}
})
// 将bike数组set到当前页面的marker
that.setData({
markers: bikes
})
}
})
}
service层中获取周围单车信息
/**
* 根据当前经纬度查找附近的bikes
* @param longitude
* @param latitude
* @return
*/
@Override
public List<GeoResult<Bike>> findNear(double longitude, double latitude) {
// 2千米范围内,状态为的0的bike, 数量限制20
NearQuery nearQuery = NearQuery
.near(longitude, latitude)
.maxDistance(2, Metrics.KILOMETERS)
.query(new Query(Criteria.where("status").is(0)).limit(20)); GeoResults<Bike> geoResults = mongoTemplate.geoNear(nearQuery, Bike.class);
return geoResults.getContent(); }
2. 调用短信接口发送验证码

前台方法省略,电话号码填写完毕后获取短信验证码及校验【注意:短信签名需要在腾讯云申请并获得通过】
/**
* 调用腾讯云短信API发送短信,并将手机号及验证码存入redis
* @param countryCode
* @param phoneNum
* @return
*/
@Override
public boolean sendMsg(String countryCode, String phoneNum) {
Jedis jedis = pool.getResource(); // 从redis中获取之前存储的appid与appkey
int appid = Integer.parseInt(jedis.get("appid"));
String appkey = jedis.get("appkey"); boolean flag = true;
try {
// 生成短信验证码(4位)
int code = (int)((Math.random() * 9 + 1) * 1000);
SmsSingleSender ssender = new SmsSingleSender(appid, appkey);
// 向对应手机号的用户发送短信
SmsSingleSenderResult result = ssender.send(0, countryCode, phoneNum, "【bike单车】你的验证码为:" + code + "。如非本人操作,请忽略本短信。" , "", "");
// 将发送的手机号作为key,验证码作为value保存到redis中(有效时长300s)
jedis.setex(phoneNum, 300, code + "");
} catch (Exception e) {
flag = false;
logger.error("调用短信接口异常" + e.getMessage());
} finally {
jedis.close();
}
return flag;
} /**
* 从redis中获取并校验验证码是否匹配
* @param phoneNum
* @param verifyCode
* @return
*/
@Override
public boolean verify(String phoneNum, String verifyCode) {
Jedis jedis = pool.getResource();
String code = jedis.get(phoneNum);
jedis.close();
return code != null && code.equals(verifyCode);
}

3. 押金充值

需要企业认证,方法参考API,需要注意的是充值成功后更新用户押金及状态
success: function (res) {
// 关闭充值中的加载对话框
wx.hideLoading();
// 交过押金后,将用户status更新为2
var globalData = getApp().globalData;
globalData.status = 2;
wx.setStorageSync("status", 2);
wx.navigateTo({
url: '../identify/identify',
})
}
4. 实名认证

formSubmit: function(e) {
// 获取全局变量的数据
var globalData = getApp().globalData;
// 获取手机号
var phoneNum = myUtil.get('phoneNum');
// 获取姓名和身份证号
var name = e.detail.value.name;
var idNum = e.detail.value.idNum;
wx.request({
url: 'http://localhost:8080/user/identify',
header: {'content-type': 'application/x-www-form-urlencoded' },
data: {
phoneNum: phoneNum,
name: name,
idNum: idNum,
status: 3
},
method: 'POST',
success: function(res) {
globalData.status = 3;
wx.setStorageSync('status', 3);
// 完成所有注册流程,跳转到首页
wx.navigateTo({
url: '../index/index',
});
}
})
}
完成这一步,将用户信息存进mongodb,并且跳转到用车界面

5. 故障申报

将故障信息及地理位置写入数据库,修改单车状态。
共享单车微信小程序的更多相关文章
- 摩拜单车微信小程序开发技术总结
前言 摩拜单车小程序已于微信小程序上线第一天正式发布,刷爆微博媒体朋友圈.本文主要讲讲技术方向的总结,在段时间的开发周期内内如何一步步从学习到进阶. 思维转变 微信小程序没有HTML的常用标签,而是类 ...
- 微信小程序踩坑集合
1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debu ...
- 微信小程序 教程及示例
作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有,转载请联系作者获得授权.微信小程序正式公测, ...
- 微信小程序正式发布!这是最全的上手指南
2017 年 1 月 9 日,是一个值得载入互联网史册的日子. 这一天,零点刚过,张小龙和他的团队,在夜色笼罩下,正式发布了微信小程序. 所以,从这一刻开始,只要有开发者登录小程序后台,并在「开发管理 ...
- 近期热门微信小程序demo源码下载汇总
近期微信小程序demo源码下载汇总,乃小程序学习分析必备素材!点击标题即可下载: 即速应用首发!原创!电商商场Demo 优质微信小程序推荐 -秀人美女图 图片下载.滑动翻页 微信小程序 - 新词 GE ...
- 「速成应用」实在可靠的 微信小程序第三方代理加盟平台公司
小程序,是基于微信平台的一个划时代产品,也就是嵌入到微信里的一个功能丰富.操作简洁的轻应用,不需要下载安装即可使用.不同的小程序,能实现不同的功能.例如,买电影票.餐厅排号.餐馆点菜.查询公交.查询股 ...
- 微信小程序个人/企业开放服务类目一览表
微信小程序个人/企业开放服务类目一览表 微信小程序个人开放服务类目表 服务类目 类目分类一 类目分类二 引导描述 出行与交通 代驾 / / 生活服务 家政.丽人.摄影/扩印.婚庆服务.环保回收/废 ...
- 微信小程序开发学习资料
作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- 微信小程序学习指南
作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
随机推荐
- ENC28J60学习笔记——第1部分
1前言 嵌入式以太网开发,可以分为两个部分,一个是以太网收发芯片的使用,一个是嵌入式以太网协议栈的实现.以太网收发芯片的使用要比串口收发芯片的使用复杂的多,市面上流通比较广泛的以太网收发芯片种类还不少 ...
- scrapy框架系列 (3) Item Pipline
item pipeline 当Item在Spider中被收集之后,它将会被传递到Item Pipeline,这些Item Pipeline组件按定义的顺序处理Item. 每个Item Pipeline ...
- Poly2Tri介绍[转]
https://blog.csdn.net/xys206006/article/details/83002326 这是Poly2Tri介绍的翻译博文.原文链接:http://sites-final.u ...
- [leetcode]Partition List @ Python
原题地址:https://oj.leetcode.com/problems/partition-list/ 题意: Given a linked list and a value x, partiti ...
- Spring系列:Scheduled注解学习笔记
一.试验代码 //@Scheduled(fixedRate = 5000) //@Scheduled(fixedDelay = 5000) @Scheduled(cron ="*/5 * * ...
- Valid Number leetcode java
题目: Validate if a given string is numeric. Some examples: "0" => true " 0.1 " ...
- Centos7 搭建lnmp环境 (centos7+nginx+MySQL5.7.9+PHP7)
阿里云一台服务器出现问题! 我估计是一键安装包环境的原因,所以打算重新搭建下环境! 首先,当然是先做好快照!安全第一! 对系统盘做更换系统操作,装上纯净版的centos. 装好后,进入系统 一.挂载数 ...
- css控制input标签
逛到发现这个 个人感觉非常赞 下面是CSS样式 Js代码 input { border:1px solid #B3D6EF; background: ...
- git学习一二三一
svn用的多,但是我是一个geek,git这个美丽的scm,我怎能错过了?于是最近在全方位的窥视它的酮体,把我的一点心得分享给大家把. 先说一说给git的历史, Git是一个开源的分布式版本控制系统, ...
- VMware中创建Ubuntu16.0.4虚拟桥连方式无法上网
一.问题描述 在本地VMvare中已经安装了两台虚拟机,网络方式都是桥连,上网都可以自动获取IP地址 和HOST主机是一个号段的 ,同为192.168.1.X KingServer1(原始安装) 桥 ...