共享单车微信小程序
微信小程序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前言 嵌入式以太网开发,可以分为两个部分,一个是以太网收发芯片的使用,一个是嵌入式以太网协议栈的实现.以太网收发芯片的使用要比串口收发芯片的使用复杂的多,市面上流通比较广泛的以太网收发芯片种类还不少 ...
- VS2008 打开 VS2010解决方案及项目(转)
第一步,修改解决方案后缀为sln的文件 Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 201 ...
- JavaScript中textRange对象使用方法总结
TextRange对象是动态HTML(DHTML)的高级特性,使用它可以实现很多和文本有关的任务,例如搜索和选择文本.文本范围让您可以选择性的将字符.单词和句子从文档中挑选出来.TextRange对象 ...
- laravel在中间件内生成的变量如何传到控制器
在中间件内获取到一个变量,如何返回到控制器中并使用这个变量! 做了个demo: // web.php Route::get('/check', 'CheckController@check')-> ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十三)Structured Streaming遇到问题:Set(TopicName-0) are gone. Some data may have been missed
事情经过:之前该topic(M_A)已经存在,而且正常使用structured streaming消费了一段时间,后来删除了topic(M_A),重新创建了topic(M-A),程序使用新创建的top ...
- RAMPS1.4 3d打印控制板接线与测试5
切片软件是生产打印机主控板可以识别的代码(Gcode)的工具,没有这个软件的帮忙,打印机不能识别3d模型文件.这里暂时只介绍Slic3r这个切片软件.简单好用功能强大. 1.打开expert模式 Sl ...
- LynxFly科研小四轴横空出世,开源,F4,WIFI --(转)
首先是一大堆的感谢,太多人的帮助,感谢不完了----首先要说明,这个PCB工程的出现要感谢论坛上的台湾大哥 john800422 开源了自己的飞控板的工程文件,我这样的没啥基础的小弟们才能学会如何制板 ...
- rpcserver不可用
今天用打印机.电脑一直弹出rpcserver不可用.如图: 解决的方法:将例如以下服务启动就可以解决,如图:
- Android中使用Handler以及CountDownTimer实现包括倒计时的闪屏页面
上一篇博文<Android中Handler使用浅析>通过实现倒计时闪屏页面的制作引出了Handler的用法以及实现原理,博文末尾也提到了实现过程中的Bug,有兴趣的朋友能够点击链接回去看看 ...
- 【Python】使用geocoder找出本机IP所在经纬度和城市
代码: import geocoder g = geocoder.ip('me') print(g.latlng) # 经纬度 print(g.city) # 所在城市 输出: C:\Users\ho ...