微信小程序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. 故障申报

将故障信息及地理位置写入数据库,修改单车状态。

共享单车微信小程序的更多相关文章

  1. 摩拜单车微信小程序开发技术总结

    前言 摩拜单车小程序已于微信小程序上线第一天正式发布,刷爆微博媒体朋友圈.本文主要讲讲技术方向的总结,在段时间的开发周期内内如何一步步从学习到进阶. 思维转变 微信小程序没有HTML的常用标签,而是类 ...

  2. 微信小程序踩坑集合

    1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debu ...

  3. 微信小程序 教程及示例

    作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有,转载请联系作者获得授权.微信小程序正式公测, ...

  4. 微信小程序正式发布!这是最全的上手指南

    2017 年 1 月 9 日,是一个值得载入互联网史册的日子. 这一天,零点刚过,张小龙和他的团队,在夜色笼罩下,正式发布了微信小程序. 所以,从这一刻开始,只要有开发者登录小程序后台,并在「开发管理 ...

  5. 近期热门微信小程序demo源码下载汇总

    近期微信小程序demo源码下载汇总,乃小程序学习分析必备素材!点击标题即可下载: 即速应用首发!原创!电商商场Demo 优质微信小程序推荐 -秀人美女图 图片下载.滑动翻页 微信小程序 - 新词 GE ...

  6. 「速成应用」实在可靠的 微信小程序第三方代理加盟平台公司

    小程序,是基于微信平台的一个划时代产品,也就是嵌入到微信里的一个功能丰富.操作简洁的轻应用,不需要下载安装即可使用.不同的小程序,能实现不同的功能.例如,买电影票.餐厅排号.餐馆点菜.查询公交.查询股 ...

  7. 微信小程序个人/企业开放服务类目一览表

    微信小程序个人/企业开放服务类目一览表   微信小程序个人开放服务类目表 服务类目 类目分类一 类目分类二 引导描述 出行与交通 代驾 / / 生活服务 家政.丽人.摄影/扩印.婚庆服务.环保回收/废 ...

  8. 微信小程序开发学习资料

    作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  9. 微信小程序学习指南

    作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

随机推荐

  1. C++/Php/Python 语言执行shell命令

    编程中经常需要在程序中使用shell命令来简化程序,这里记录一下. 1. C++ 执行shell命令 #include <iostream> #include <string> ...

  2. go语言之进阶篇json解析到结构体

    1.json解析到结构体 示例: package main import ( "encoding/json" "fmt" ) type IT struct { ...

  3. DIV+CSS规范命名集合

    我们开发CSS+DIV网页(Xhtml)时候,比较困惑和纠结的事就是CSS命名,特别是新手不知道什么地方该如何命名,怎样命名才是好的方法. 命名规则说明: 1).所有的命名最好都小写 2).属性的值一 ...

  4. distinct 多列详解

    1.distinct单列 select distinct(a) from tableA; 2.distinct多列 select distinct a,b,c from tableA; 注意此时是将a ...

  5. 大数据开发实战:Stream SQL实时开发二

    1.介绍 本节主要利用Stream SQL进行实时开发实战,回顾Beam的API和Hadoop MapReduce的API,会发现Google将实际业务对数据的各种操作进行了抽象,多变的数据需求抽象为 ...

  6. zookeeper基础知识整理

    http://blog.csdn.net/pelick/article/details/7269670 http://zookeeper.apache.org/doc/trunk/javaExampl ...

  7. (转)Unity导出Android在高通骁龙800以上CPU概率性崩溃解决方法研究

    Android上的奇葩问题真的是太多了,开始测试反馈说游戏在某些Android手机上随机crash,后来经过详细的测试发现随机闪退的手机都是搭载了高通骁龙800以上的CPU.然后连上真机当crash的 ...

  8. mybatis 是如何与数据表对应上的 ?

    MyBatis也需要进行表和实体 的关联.我们查询的是表,返回的结果是实体类.这之间有一个对应关系. 如果说实体类的属性和表的列名一一对应,名字一样,那就自动解决了这个问题.但是如果实体类的属性和表的 ...

  9. python连接mysql实例分享_python

    示例一 #coding=UTF-8 import sys import MySQLdb import time reload(sys) sys.setdefaultencoding('utf-8') ...

  10. CentOS7安装 Apache HTTP 服务器

    CentOS7安装 Apache HTTP 服务器 时间:2015-05-02 00:45来源:linux.cn 作者:linux.cn 举报 点击:11457次 不管你因为什么原因使用服务器,大部分 ...