闲来无事,想做一个小网站,方便查询车辆违章信息,后来一想直接写个程序,每天定时查询违章信息,有了违章则发短信和邮件提醒用户,还可以自定义限行策略,在限号那天提醒用户,美哉,嘿嘿♪(^∇^*)。
程序整体设计思路
初步打算用Java写这个程序,基于Servlet,后期开放用户注册,会加上数据库。或许后面会用SSM写,先挖个坑,Σ( ° △ °|||)︴
车辆限号提醒:用户须在本网站注册,然后填写车牌号。【车牌号前端实现正则表达式检测,根据首字和首字母,及尾号实现自动识别城市及限号提醒,一个用户最多支持3个车牌号提醒】。在用户的车辆被限制通行的当天早7:00发短信和邮件通知用户【用户自定义提醒时间和通知类型】。同时,用户登陆网站首页后,提示当天是否限行,以及违章信息。
车辆违章查询:购买数据接口,解析json结果,程序判断是否有违章信息并通知用户。
一 限号提醒功能的设计与实现
由于各地车辆限行政策的多变性和不确定性,其限行逻辑实现由人工维护。初级阶段仅仅通过用户的车牌号实现限号当天提醒(基本上就是单双号限行和两号限行)。
二 寻找短信接口运营商
这个短信API直接百度搜索就行,我也没有特别推荐的运营商,目前我们需要的是便宜的数据接口,最好注册就免费送一定数量的,便于我们前期调试程序,综合下来下面这两家还行(但也都适合企业用,个人数据接口很少厂商做):
聚合数据:https://www.juhe.cn
极速数据:https://www.jisuapi.com (之前做微信公众号就用的这家)
任选一家注册账号即可,短信接口我选的是聚合数据,这家注册送10条免费短信,足够我们测试用了,后期还可以1.5元买50条:
三 解析短息API文档
短信接口文档链接:https://www.juhe.cn/docs/api/id/54
短信这方面国家管控比较严格,所以使用短信接口发送的短息内容必须用运营商提供的模板,如果想要自定义带变量的模板必须实名认证才行,并且这个聚合数据想购买产品必须实名认证,否则自定义内容只能写死,且由运营商后台人工审核通过才可以使用。
如果发送验证码之类的可以使用运营商提供的模板,我们现在需要先自定义模板,然后提交审核,注意:模板内容不能有违法内容和网址等等。
提交模板后等待审核即可,一般一个小时左右:
诸如此类规则各个运营商都大同小异,我们下面详细分析如何使用短信接口。
注意,向每个用户发送短信频率要控制好,如果做验证码之类的,前端一定要做好限制措施,1分钟只能发一条。
使用数据接口实质上就是:发送一个请求给接口,接口会解析你的请求并做出相应操作,然后返回给你操作结果。我们需要做的就是发送请求,解析结果。
示例请求链接:
http://v.juhe.cn/sms/send?mobile=用户手机号码&tpl_id=短信模板ID&tpl_value=%23code%23%3D654654&key=自己的账户key
实际上网站的文档已经给的很详细了,只需要复制下来就能运行,非常简单的,我们这里用的Java写的,我只贴出重要代码:
public static void mobileQuery(){
String result =null;
String url ="http://v.juhe.cn/sms/send";//请求接口地址
Map params = new HashMap();//请求参数
params.put("mobile","13429667914");//接受短信的用户手机号码
params.put("tpl_id","111");//您申请的短信模板ID,根据实际情况修改
params.put("tpl_value","#code#=1235231");//您设置的模板变量,根据实际情况修改
params.put("key","您申请的ApiKey");//应用APPKEY(应用详细页查询)
try {
result = net(url, params, "GET");
JSONObject object = JSONObject.fromObject(result);
if(object.getInt("error_code")==0){
System.out.println(object.get("result"));
}else{
System.out.println(object.get("error_code")+":"+object.get("reason"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
没有什么技术难度,我直接贴源码地址:https://www.juhe.cn/docs/api/id/54
注意这里,分析返回结果:
/****失败示例**/
{
"reason": "错误的短信模板ID,请通过后台确认!!!",
"result": [],
"error_code": 205402
}
/****成功示例**/
{
"reason": "短信发送成功",
"result": {
"count": 1, /*发送数量*/
"fee": 1, /*扣除条数*/
"sid": "23d6bc4913614919a823271d820662af" /*短信ID*/
},
"error_code": 0 /*发送成功*/
}
其中返回的json结果中的error_code是返回码,为0则代表发送成功,其他值为发送失败,详情查看API:
短信接口的使用方式大致如此,有疑问的小伙伴可以在公众号后台留言。稍后我会将源码地址贴出,下一章我们讲如何用Java发邮件。