共享单车微信小程序
微信小程序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来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
随机推荐
- go语言之进阶篇通过结构体生成json
1.通过结构体生成json 示例: package main import ( "encoding/json" "fmt" ) //成员变量名首字母必须大写 t ...
- JavaScript学习笔记——错误处理
说明:参见<JavaScript高级程序设计>第14章. 一. 错误分类 1. 语法错误 也称为解析错误,发生在传统编程语言的编译时,在JavaScript中发生在 ...
- Spring(十八):Spring AOP(二):通知(前置、后置、返回、异常、环绕)
AspectJ支持5种类型的通知注解: @Before:前置通知,在方法执行之前执行: @After:后置通知,在方法执行之后执行: @AfterRunning:返回通知,在方法返回结果之后执行(因此 ...
- 如何拷贝一个wchar_t类型的字符串
Do this, wchar_t clone[260]; wcscpy(clone,szPath); Or, if you want to allocate memory yourself, wcha ...
- 刷完OpenWrt在浏览器无法访问的解决办法
其实问题很明显. 是因为刷了trunk版固件. 并没有集成luci. 那接下来就是装luci.但是装luci需要联网(不过其实不联网其实也是可以安装的.) 我说的联网是让路有联网.而不是网线接路由,路 ...
- C#.NET常见问题(FAQ)-如何改变字符串编码
使用Encoding.Convert方法即可实现转换 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetaohai123 我的在线论坛: ...
- ios Url Encode
//ios Url Encode //有时候在请求的参数里里特殊符号比如“+”等.而如果没有encode的话那么传过去的还是” ”,面实际上是%2B. -(NSString*)UrlValueEnco ...
- common.js 2017
String.IsNullOrEmpty = function (v) { return !(typeof (v) === "string" && v.length ...
- LintCode: Combination Sum
一个数可以使用多次 图: 节点:x(当前的和,当前要考虑的数a[i]) 边:x-> y1(当前的和,下一个要考虑的数a[i+1]) y2(当前的和+a[i],下一个要考虑的数a[i+1]) BF ...
- linux加入windows域
http://www.redhat.com/rhecm/rest-rhecm/jcr/repository/collaboration/jcr:system/jcr:versionStorage/36 ...