有朋友让我帮他为他新开的网站做几个小功能,如下:
输入快递公司和快递单号,查询快递所有动态(从哪里开始,到哪里) 注册,登录等场景下的手机验证码(需要一定的防刷策略) 通过输入公司名称的关键字,查看公司是否已注册,法人信息,名称相似的公司等,可用的接口和文件提供给我。其中,需求1和2是通过聚合数据网站提供的接口实现的;需求3通过云聚合数据实现。
因为我朋友的网站是用ThinkPHP写的,为了以后保持代码兼容性,这三个函数也是用ThinkPHP写的。
项目所有文件都放在GitHub上,部分敏感数据已经隐藏,需要自行更换,地址如下:
GitHub地址:使用聚合数据API查询快递数据-短信验证码-企业验证名
因为这三个功能不是官方产品,以后需要嵌入到网站的各个功能模块中,所以为了方便查看,三个功能的代码写在一个文件里,大家只需要重点关注关于以下几个文件:
/Home/Conf/http://www.zhucesz.com/ 参数配置文件/Home/Controller/http://www.zhucesz.com/ 后端代码、API请求及处理 /Home/View/http://www .http://www.zhucesz.com/ 前端html
去上面两个网站分别找到“快递”、“短信”和“核名”的文档地址。注意,将KEY、URL等信息放到配置文件Home/Conf/http://www.zhucesz.com/中,方便以后重复使用。
常用快递API文档
短信API 文档
核心名称-文档
注意短信的API服务,必须先在网站后台添加一个“短信模板”,以便管理员审核后才能正常调用
最后,Home/Conf/http://www.zhucesz.com/配置文件的内容如下:
为了防止恶意用户利用暴露的短信界面作弊,需要记录每个手机号码的行为。例如:
短信验证码发送到手机号码后,60秒内无法再次发送。短信验证码必须在1小时内填写,否则会过期,防止ajax请求地址被机器人程序使用。必须在表格中使用。图片验证码只能提交数据。对于“表单验证码”,我们稍后会解释代码。这里,我们首先创建如下表结构,用于记录短信发送记录:
mobile为手机号tpl_id为网站后台添加并通过审核的短信template code为发送的验证码(一般为4位或6位)time为要发送的时间戳直接下载sql用于恢复:sql文件也可以直接在本项目的GitHub地址的/Pubic目录下找到,可以直接把它恢复到你的MySQL上。
最终效果如下:
因为这三个功能都需要表单验证码,所以先实现。
打开/Home/View/http://www.zhucesz.com/,注意里面的图片验证码img标签,以及对应的javascript
对应的后端代码在/Home/Controller/http://www.zhucesz.com/
因为这三个函数实际上是通过网络请求第三方网站的API接口地址,所以可以统一成一个通用的方法。代码如下,可以传入三个变量,分别是:url、参数数组、请求方法(是无论是post,默认为0),返回一个json格式的数据。
以后我们可以调用这个通用的方法来获取快递数据,发送短信,查询公司名称。
最终效果如下:
打开/首页/查看/http://www.zhucesz.com/
对应的后端代码如下,特别注意this->juhecurl(C(“EXPRESS_QUERY_URL”), params, 1);去掉这部分的注释(因为我在开发的时候查询余额不足,所以我用了一个硬编码的数组来让程序正常运行)
短信验证码的发送和检查
废话不多说,前端html直接上代码。这里其实有两个动作,一个是“发送验证码到我的手机号码xxxxx”,另一个是“我收到并填写,请查看我填写的验证码是否正确”。
也因为有两个action,后端会稍微复杂一些
因为这个接口本来每个查询只提供一个关键词,而朋友的网站要求每个查询用“,”隔开,有多个关键词,所以需要对提交的数据进行处理,返回到前端(循环遍历多个列表)。
前端代码比较简单
后端代码
目前这三个功能已经完成,但是我们可以在防止恶意用户利用界面做坏事的策略上走得更远。例如
您必须是注册用户才能发送手机号码请求。每天只能发送有限数量的验证码(因为即使每分钟发送一次,也将是相当一天。)手机号码注册后,当您再次请求发送验证码时,可以只能发送到“现有”手机号数据表中的手机号,不能发送“恢复密码”给尚未注册的人。
如需了解更多公司核名、企业注册核名、商标核名、网上核名、关注了解更多公司核名等资讯。