共享单车微信小程序
微信小程序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来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
随机推荐
- C++/Php/Python 语言执行shell命令
编程中经常需要在程序中使用shell命令来简化程序,这里记录一下. 1. C++ 执行shell命令 #include <iostream> #include <string> ...
- go语言之进阶篇json解析到结构体
1.json解析到结构体 示例: package main import ( "encoding/json" "fmt" ) type IT struct { ...
- DIV+CSS规范命名集合
我们开发CSS+DIV网页(Xhtml)时候,比较困惑和纠结的事就是CSS命名,特别是新手不知道什么地方该如何命名,怎样命名才是好的方法. 命名规则说明: 1).所有的命名最好都小写 2).属性的值一 ...
- distinct 多列详解
1.distinct单列 select distinct(a) from tableA; 2.distinct多列 select distinct a,b,c from tableA; 注意此时是将a ...
- 大数据开发实战:Stream SQL实时开发二
1.介绍 本节主要利用Stream SQL进行实时开发实战,回顾Beam的API和Hadoop MapReduce的API,会发现Google将实际业务对数据的各种操作进行了抽象,多变的数据需求抽象为 ...
- zookeeper基础知识整理
http://blog.csdn.net/pelick/article/details/7269670 http://zookeeper.apache.org/doc/trunk/javaExampl ...
- (转)Unity导出Android在高通骁龙800以上CPU概率性崩溃解决方法研究
Android上的奇葩问题真的是太多了,开始测试反馈说游戏在某些Android手机上随机crash,后来经过详细的测试发现随机闪退的手机都是搭载了高通骁龙800以上的CPU.然后连上真机当crash的 ...
- mybatis 是如何与数据表对应上的 ?
MyBatis也需要进行表和实体 的关联.我们查询的是表,返回的结果是实体类.这之间有一个对应关系. 如果说实体类的属性和表的列名一一对应,名字一样,那就自动解决了这个问题.但是如果实体类的属性和表的 ...
- python连接mysql实例分享_python
示例一 #coding=UTF-8 import sys import MySQLdb import time reload(sys) sys.setdefaultencoding('utf-8') ...
- CentOS7安装 Apache HTTP 服务器
CentOS7安装 Apache HTTP 服务器 时间:2015-05-02 00:45来源:linux.cn 作者:linux.cn 举报 点击:11457次 不管你因为什么原因使用服务器,大部分 ...