WordPress插件:后台注册通过短信验证用户手机号
本插件开发于2017年,目前阿里云的短信接口和管理后台已经发生变化,同时几大主流的云服务商对个人开发者申请短信接口并不友好,要么要求一次性够买1万条套餐,要么短信签名需要各类证明,所以博主暂无计划更新本插件的短信接口,亦无法保证本插件是否还可以正常使用。
如果大家有什么对个人开发者友好的短信接口,可以留言推荐一下。
编辑于2022年1月17日
经常上网的你,可能已经注意到,目前国内很多网站注册都需要填写手机号了,并且还要接收验证码以确认你是手机号的实际拥有人。这么做可能会引起很多人的反感,觉得这会泄露隐私,但是在目前国家大力实行手机号实名制以及网络实名制的大背景下,根据相关法律规定,网络运营者必须验证用户真实身份,否则会面临网站被关闭及罚款的处罚。目前国内手机号都已实名,验证手机号实际上就已经完成了监管层要求的验证用户真实身份的要求。
我们不争论验证用户手机号的合理性,作为守法公民,按法律规定行事准没错。在WordPress后台用户注册页面,默认只有用户名和电子邮件两个输入框,想要收集注册用户的手机号并验证真实性,该如何实现呢?经常访问露兜博客的朋友可能会记得我之前写过一个插件:WordPress自定义用户注册页面插件,通过这个插件可以扩展WordPress的注册表单功能。在这个插件的基础上,我利用了点业余时间,重新写了个注册时可以验证用户手机号的插件,暂且命名为:Ludou Phone Register
本插件可以免费使用,代码公开,需要本站提供二次开发、更换短信发送接口、添加/修改功能等才需要收费。
插件截图
插件功能
- 在注册页面,可通过短信验证码验证用户手机号真实性
- 在注册页面,用户可直接设置密码
- 在后台 - 个人资料 - 修改手机号页面,用户可以修改手机号
- 可防CSRF跨站攻击
- 图片验证码自动过期,可防短信轰炸
短信接口
这里用到的短信接口是:阿里云短信服务,为什么选用阿里云短信服务作为本插件的短信服务商呢?主要有几点以下原因:
- 有10元的体验红包,开发测试插件正好可以用到;
- 个人用户也可以使用,很多短信接口只有企业可以用;
- 大厂不解释。
不管在哪,发短信都是要收钱的,天下没有免费的午餐,具体价格表请看:短信价格表。
使用方法
- 为了确保插件能够正常运行,推荐使用PHP 5.6以上的版本,低于这个版本可能导致插件无法使用;
- 阿里云短信服务需要一个阿里云账户,也可以用淘宝账号登陆,没有的可以自己注册一个;
- 登陆阿里云后台:登陆地址;
- 新使用的阿里云短信,阿里云会赠送一个有效期一个月的10元代金券,可以抵扣短信费。代金券使用完后需充值才能继续使用短信服务;
- 在阿里云控制台的 秘钥管理页面,点击 创建Access Key,并且确保处于 启用 状态,获取到 AccessKeyId 与 AccessKeySecret;
- 在阿里云 短信签名页面,添加短信签名,签名类型选择"验证码或短信通知",签名填你的网站名称。
不懂的可以看阿里云的文档:申请短信签名; - 在阿里云 短信模板页面,添加短信模板,模板类型选择"验证码",模版名称自己填,模版内容可自行发挥,将验证码用变量
${code}
代替即可。如你可以设置模板内容为:
${code} 这是您的短信验证码,10分钟内有效。
或验证码 ${code}
不懂的可以看阿里云的文档:申请短信模板 - 短信签名和短信模板待阿里云审核通过后,记住签名名称和模版CODE;
- 点此下载插件,并解压;
- 用文本编辑器(没有就用记事本)打开ludou-phone-register/config.php,按照注释替换成你的AccessKeyId、AccessKeySecret、签名名称和模版CODE,修改后类似:
// 阿里云 Access Key Id $AccessKeyId = '23456783'; // 阿里云 Access Key Secret $AccessKeySecret = 'cmmmmm0abcdefd8h35861a801ac752d5'; // 短信签名 $sign = '阿里云'; // 短信模板CODE,如SMS_123456789 $template = 'SMS_123456789';
- 将文件夹ludou-phone-register上传至你的网站WordPress插件目录下,即/wp-content/plugins/,然后到WordPress后台激活插件Ludou Phone Register即可,你的后台注册表单就已经像上图的一样了。该插件只针对单站点,开启WordPress多站点功能,本插件无效。
注意,本插件和Ludou Custom User Register插件不可同时使用,可能会出现冲突。
插件使用过程中有什么问题,随时可以:给我留言。
更新记录
1.0版 2017年5月2日
* 首个版本
2.0版 2017年9月14日
* 将短信接口由阿里大于换成了阿里云短信
* 修复后台修改手机号的显示错误
3.0版 2021年5月26日
* 因前几个版本使用的验证码无法适用新环境,删除了图片验证码
PS:请大家按照我文章中介绍的操作步骤进行申请接口和安装插件,否则可能用不了本插件。有同学想当然地去阿里云市场申请了个短信接口,结果用不了,过来质问我说,你的两个版本插件都是不能用的,都发不了短信,我自己改了就都能用,你说的什么测试正常都是骗人的。
接口都不是同一个接口,短信能发的出去才是见了鬼了呢!
-- 完 --
本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:露兜即刻 https://www.ludou.org/wordpress-register-check-user-phone-via-sms.html
他这个sdk包太大了,有木有小点的?
@龙笑天 官方包,不需要你可以自己删减,比如test
@露兜 tests文件夹内容到很少,大的是vendor文件夹4M….
@龙笑天 已经精简,重新下载吧
@露兜 非常完美,一下子少了1500+文件及文件夹,近3.5M,非常赞!!!感谢~
直接关闭评论、、
原来是阿里大于的没办法使用,现在阿里大于还没有迁移到阿里云短信
有什么办法可以两个接口同时使用,刚测试了,阿里大于的接口点击发送短信没有任何响应,再次点击会提示操作频繁,实际没有收到任何短信
测试通过,感谢博主。
想基于这个改改,不知道博主是打算以什么协议开源?是否允许二次开发
目前wp短信注册貌似存在问题,<img src="https://ws4.sinaimg.cn/large/006tKfTcgy1fkr7o8u3ipj30ge092wey.jpg" alt="" />,验证码明明是对的,和debug内容一致,但是就是依旧提示错误
<img src="https://ws4.sinaimg.cn/large/006tKfTcgy1fkr7pb42fsj30he0ae74x.jpg" alt="" />
@ivmm 看你的服务器session是否正常
@露兜 验证码的 SessionID 还是是会变更的,但是就是一开始的验证码存在问题
页面是缓存没清理吗,看不到回复。
session 是开了的
@ivmm 那你试试把 index.php 和 captcha/captcha.php中开头的:
session_regenerate_id(TRUE);
删除试试吧
@露兜 很迷,依旧没有用。我把其他插件都都关闭拍错过了
@ivmm 不行你就自己换个验证码吧
没设置成功,因为我网站是用 Ultimate Member 插件 管理用户的额
不好意思,问下,
我下载的2.0,看里面的config.php配置文件是 Access Key Id的,然后我改成了大于的AppKey。
<?php
// 阿里大于 应用 AppKey
$appkey = '';
// 阿里大于 应用 App Secret
$secret = '';
// 验证码短信签名
$sign = '';
// 验证码短信模板ID,如SMS_123456789
$template = '';
然后点击发送验证码,没有任何反应了。
是不是文章中插件的接口还是原来阿里大鱼的?
不是阿里云市场这个?
@alitest 2.0版已经换成阿里云云通信,已不再支持阿里大于,请按照文章中的说明使用。
能否加入网易的短信,阿里的短信签名要ICP备案才让过
网站备案 按照上面填写依然无法发送短信
文章中的插件,里面的config.php并不是新版阿里云短信的,还是老版本的。
新版本有个AppCode参数吧。
如果只是把config.php里面对应参数改成新版阿里云短信的,好像是没用的。
@duanxince 请按照文章中的说明一步一步操作,不要想当然,阿里云有很多短信接口,请注意区分。
本插件使用的短信平台地址:https://www.aliyun.com/product/sms
管理后台地址:https://dysms.console.aliyun.com/dysms.htm
最新API文档:https://help.aliyun.com/document_detail/55451.html
用这个插件之后,是不是新用户注册,就发送不了邮件了?
@dayu 是的
请问按步骤部署完毕,注册界面也正常,但是输入验证码后,点发送按钮,提示验证码发送失败,是什么问题呢?
@0changba 我的ACCESS KEY 使用阿里云的子账户建立的,授权了 阿里云短信接口的全部权限 这个没问题吧?
@0changba 我解决了,我没有充钱。好像没有优惠活动了
请问 开通阿里云短信服务后,是否需要继续开通短信套餐服务,才可使用。
@frank 当然要充值!
套餐就不清楚了,具体问阿里云的客服
您好,我目前用的用户注册/登录表格是ninja forms插件弄的。Ninja forms插件在我网站是一定要用的;因为它与我其他的插件是联系着的。
我想在我的注册/登录表格加上您这个手机验证码的功能但您的手机验证码插件如何与NinjaForms一起使用呢?是在NinjaForms设立一个field,然后把您插件的shortcode输入进去吗?还是您的插件无法和NinjaForms一起使用?
是否能和Ninja Forms插件一起使用?
@celebrian 不能
那请问如果要弄一个能和ninja forms一起使用的插件,行吗?这样的项目,您的收费是多少呢?还有,大概需要多长时间完成呢?
露大,用了您的插件,按照教程很顺利安装,可以正常发送验证码正常注册登录,但是是不是没有密码找回功能?
@四郎 密码找回不支持手机号短信找回。原有的邮件找回密码功能不影响
插件什么时候可以支持多站点呢,或者修改哪些地方可以支持多站点?小弟小白一枚
@古童 插件什么时候可以支持多站点呢, 我觉得这个还是挺方便 很好的, 但刚刚用了一下 多站点就不行 。。
我用的是KLEO主题, 注册页不是原生的页面, 插件不兼容,在注册界面不显示, 这个怎么解决啊?
新用户注册成功后,发邮件,如何开启
您好,请问这款插件有支持WordPress 4.3.16的吗?
因为用这个插件安装在WordPress 4.3.16上报错,但是我在WordPress 4.8上就可以
不知道台湾的电话号码可不可以收到验证码
@jieke 具体咨询阿里云