短信验证开发的方案分享

王志勇 发表于 2017年11月26日 22:01

最近做的项目中,需要验证用户的手机号码。很多的运营者都是采用106端口向用户发送短信的方式,如果是用第三方的短信服务,那么运营者需要支付0.05元/条,也就是向用户发送1万条验证码,需要支付500元,以此类推。如果是申请一个独立的106端口,对资质、资金的要求都非常高。

也有的运营商是采用用户主动发送验证信息的方式,例如申请QQ、或微信解封的时候需要向1069端口发送一条短信。(在去年,移动、联通手机发送106短信都不收费,电信收费;今年,移动、联通用户发106短信都要收费了,0.1元/条)
这种方式,运营商可以减少很多的短信成本,短信费用均由用户支付。

起初我是这样构思的:运营者可以为项目申请一个固定电话、或手机号转无线固定接入,连接电话录音机。当需要验证用户的手机号码时,用户拨打这个号码,来电显示里就记录了这个号码。然后,再人工通过验证,这样十分繁琐。

现在,终于试验成功了,用户发短信至一个专用的手机号(选择一个较好的号码、靓号,手机卡可以是任意运营商、任意归属地或国家),然后短信会自动连接网站的数据进行验证,无需任何人工操作。方案和步骤如下,已调试成功:

1. 手机卡放在一个安卓4.0以上的手机里,安装AndroPHP,让手机能运行PHP程序。因为后面要用到SQLite3,安卓手机安装SQLite3相当繁琐,并且安卓手机里的Shell命令远不如用PHP程序来控制文件方便得多。所以手机上安装PHP,作用是将短信数据库发送给远程VPS。
2. 这个手机接收的短信,是存放在/data/data/com.android.providers.telephony/databases/mmssms.db 。首先安卓手机必须Root(最好的Root软件,推荐Kingroot、或360 Root),用R.E.管理器,将mmssms.db的权限改为777,否则很可能这个文件无法被PHP访问。
3. 写一段PHP程序,让其检测这个mmssms.db的修改时间,并记录最后的修改时间,让其隔30-60秒检测一次,一旦修改时间发生改变,则执行步骤4。
4. 需要一台VPS,安装FTP。系统建议用Ubuntu12,因为安装SQLite3很顺利。给它安装vsftpd。
然后,在步骤3里,一旦修改时间发生改变,则让PHP执行将这个mmssms.db文件通过FTP上传至VPS(PHP的FTP上传程序可在网上搜索到)。
5. 这个VPS,需要事先安装好SQLite3、Apache、PHP5。
SQLite3的安装方法,只要这个命令就可以,测试通过:
apt-get -y install sqlite sqlite3

6. 为什么不给PHP安装SQLite3?因为时间的关系,没有调试成功(我的电脑无法安装Apache2.4)。
只能暂时让Ubuntu12安装SQLite3,然后PHP程序里通过exec()函数调用Shell命令来执行SQLite3。
7. Ubuntu12下,显示数据库里所有的短信内容的命令是:
sqlite3 mmssms.db
select * from sms;
8. Shell命令传给VPS上的PHP程序就是:
<?exec('sqlite3 mmssms.db && select * from sms;');?>
9. 步骤1里的手机,需要24小时开机。需要将手机电池取下,然后用TP4056从5V转4.1V给手机供电,或者用LM2596S、或MP2307DN将直流转为3.9~4.18V,给手机24小时×365天供电。不可将5V直接给手机电池输入供电,可能会烧坏主板。
10. 这个方案,电脑无需开机。只要手机保持开机、手机一直连接WIFI、AndroPHP保持在手机后台运行。

这样,手机会自动在接到新短信时,将短信的数据库上传给远程的VPS服务器,并被VPS上的PHP程序读取并分析用户的手机号码、短信的内容、验证码是否正确。PHP程序远比Shell命令易调试、功能多得多,所以能用PHP完成,就尽量交给PHP程序。

3条评论:
1   豆子 2017-12-13 14:22
很棒哦,看你的博客跟新的挺勤快的
2   自由勇 2018-09-23 11:30
Trackback来自《为什么写技术

因此,当我尝试去记录这些思路时,并发布在博客,比如近期的几篇“原创干货分享”,短信验证开发的方案分享,等等,这些既是等待有缘人来交流,也是给自己看,当自己再次去看这些文章,发现思路竟是如此清晰,很多自己彻底忘记的内容,能够在这些文章找到。

3   自由勇 2018-11-24 07:56
Trackback来自《Eonval帐号的登录方式和安全思考

从去年开始,我就采购了一些用于手机号验证的硬件设备,比如录音电话、电话交换机、GSM无线接入平台,并在去年完成把手机做成web服务器,可将手机接收到的短信,自动上传到远程的服务器上,以判断用户是否发了上行的短信。并从今年8月开始,大力开发短信验证的程序。

4   自由勇 2019-05-13 07:37
Trackback来自《PHP多种开发环境的区别:Windows+Apache、Linux+Apache、安卓手机的AndroPHP、OPENWRT

我当时安装AndroPHP,是为了让手机定时把收到的短信,上传给远程服务器,让远程的Ubuntu服务器通过PHP+SQLite3读取短信的内容,后来完美完成。方案是编写一段PHP程序,然后定时上传/data/data/com.android.providers.telephony/databases/mmssms.db文件。

发表评论:
名字: (*必填)
博客: (可省)

正文:

  记住信息?

直接发送Trackback到此文章

说明:本评论系统不支持HTML代码。(您的留言需要审核,审核规则请见这里。)

王志勇:1980-09-26 (40周岁)
程序设计,前端设计。

版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。

与此相关的链接
自由勇专栏

Blog存档 Archives

2020年10月
2020年09月(14)
2020年08月(14)
2020年07月(14)
2020年06月(16)
2020年05月(13)
2020年04月(18)
2020年03月(14)
2020年02月(15)
2020年01月(16)
2019年12月(11)
2019年11月(26)
2019年10月(25)
2019年09月(30)
2019年08月(10)
2019年07月(29)
2019年06月(30)
2019年05月(26)
2019年04月(30)
2019年03月(30)
2019年02月(30)
2019年01月(30)
2018年12月(30)
2018年11月(30)
2018年10月(30)
2018年09月(17)
2016年-2017年(9)
2014年06月-09月(10)
2013年 +

2012年 +
2011年 +
2010年 +
2009年 +
2008年 +
2007年 +
2006年 +
2005年09月(4)

Copyright © 2006-2020 auiou.com All rights reserved.
此Blog程序由王志勇编写 已经发布在Arsue