在PHP进行开发期间,要去集成短信验证码功能,最为关键至关重要的一点在于,得选对服务商,还得写好代码,不然的话,一旦上线之后,短信就没法发出去,用户也注册不了,会直接致使项目遭遇失败的情况。
选择短信服务商获取API凭证
选择短信服务提供商时,不能单单去看价格,而是要着重关注API文档是不是清晰,技术支撑是不是及时。当下国内占据主导地位的有阿里云,还有腾讯云,以及容联云等,它们都给予免费测试额度。
注册账号后,得完成企业或者个人实名认证,不然没办法申请短信签名,签名要提交营业执照或者APP应用商店截图,通常审核需1至2个工作日。
短信模板审核,一般而言是需要去供给使用场景详细阐述的,就好比验证码模板,得把变量code的运用方式清晰写明。提议在同一时段去申请许多个模板作为备用,借此避免一旦有一个被驳回进而对开发进度造成影响。
首先,在进行获取API凭证这件事儿的时候,要做到仔细留意区分测试环境以及生产环境,这一点相当重要。然后呢,对于阿里云而言,必须要做好记录,这个记录所涉及的内容是AccessKey ID以及AccessKey Secret。并且呀,对于容联云来说,需要去做的是复制ACCOUNT SID和AUTH TOKEN。
使用CURL方式调用短信API
PHP当中所谓的CURL扩展,其在默认情形之下是处于开启状态的,然而呢,最好是先借助phpinfo()这个函数来进行一番确认才好。许许多多的虚拟主机,它们在默认状况的时候是将CURL给禁用掉的,如此一来,就会致使接口调用出现失败的情况啦。
编写用来请求的代码之际,要格外留意签名算法,不同的平台有着不一样的要求,阿里云得拼接规范的字符串而且计算HMAC - SHA1,腾讯云却是运用TC3 - HMAC - SHA256算法。
在进行CURL选项设置之际,超时的时间方面建议设定为5至8秒这样一个区间,要是设置得太短的话就极易出现失败情况,而要是设置得太长的话则会使得页面响应速度被拖慢。唯有开启CURLOPT_RETURNTRANSFER这个选项,才能够获取到返回的结果。
发送成功之后,不要仅仅去查看HTTP状态码,一定要对接口返回的JSON数据进行解析。比如说,阿里云成功返回时Code等于OK,腾讯云成功返回时SendStatusSet不为空。
封装短信发送类便于复用
在进行封装类操作的时候,提议运用命名空间,以此来避免和别的第三方库产生冲突,对于私有属性而言,应当将其设置成protected,以便于子类能够进行扩展,千万不要直接以public的方式去暴露密钥。
在构造函数当中传入配置参数,而不是将其硬编码于类的内部。如此这般,同一个类能够对接多个服务商,仅仅需要传入不同的AppID以及AppKey就行。
发送方法理应返回具备统一格式状态的数组,该数组涵盖了是否成功这一情况、错误信息以及请求ID等内容。如此这般,调用方不论使用哪一家服务商,其处理逻辑均是相同的。
对于异常处理,要对网络错误以及业务错误加以区分,网络错误这一情况,是需要具备重试机制的,而业务错误,像是模板不存在这种状况,就需要及时去提醒管理员对配置进行修正。
使用加载第三方SDK简化对接
已被官方封装的SDK,有着复杂的签名逻辑,然而版本兼容性务必留意。其中阿里云旧版的SDK,使用的是PHP 5.5,而新版则要求PHP 7.2以上,在进行升级之前,务必要检查服务器环境。
要是借助Composer来进行安装,那么建议你锁定版本号,而不要直接去安装最新版本哟。就好比腾讯云短信SDK,它是写死了“qcloud/cos-sms:^3.0”这样的形式,这样做是为了避免出现因为大版本更新而破坏兼容性的情况呢。
当利用SDK去配置客户端之际,区域参数极易被填错,其中华北、华东以及香港分别对应着不一样的endpoint,于生产环境之中,最佳的配置方式是将其置于配置文件内,而非直接写死在代码该处。
在致电发送办法之后,SDK所回馈呈现的是对象并非数组。得认真去瞅文档里取得状态码的途径,有的借助getCode(),有的径直借由statusCode属性。
测试与调试短信发送功能
进行测试之际,要准备几个归属于不同运营商的手机号码,移是动的、联是通的、电是信的都得去测。有时对于其中移动的号码能够收到相关信息,然而联通的号码却收不到,这种情况有可能是因为模板所含内容触发了联通专门设置的关键字拦截机制。
核对服务商文档来进行错误码排查,相同的InvalidSign,有可能是不支持退订回复,也有可能是签名未审核。2020年,腾讯云出现过将未审核提示误报成签名错误的bug。
查瞧服务商后端的发送日志,去核实每一条短信的送达状况。倘使送达率比95%要低,那就得思考替换服务商或者查验短信内容是不是被手机安全软件拦截了。
进行压力测试之际,运用脚本依次持续发送100条,留意是不是存在频率限制报错情况。对于阿里云企业认证用户而言,其默认频率乃是100条/日,测试完毕之后要记得将其调整回归到正常数值。
在短信接口突然出现大面积超时此种状况时,你于开发期间遭遇过吗?那时究竟是怎样去排查并予以解决的呢?欢迎在评论区域分享得出的经验,若认为本文具备用处请进行点赞收藏,从而让更多PHP开发者能够少踩到坑。


还没有评论,来说两句吧...