自从上次TP升级后,一直也没有新用户注册,毕竟要验证手机号码,现在大家的隐私保护意识都很强大,也就是身正不怕影子斜,才敢大胆在我这种小站上注册,感谢大家的信任。那天看邮件,发现收到一个评论提醒,是响石潭医生的博客评论回复,才发现我的短信平台啥时候崩掉了,直接影响了大佬的到访。
先去查了下阿里云账户,看看是不是没钱了,用的是后付费的,用一条计费一条的这种。余额还有5块多钱呢,肯定不是这问题。那不是我应用的问题就是接口的问题了。简单调试了下我的应用,手机号,验证码都准确的传递到接口上了,不过接口没反应,既不反馈成功也不反馈失败,就是没拉起来。然后就去阿里云去看了下文档,是不是短信平台升级了,有个意外发现,SDK有新版,功能到是没有发现新增,但是SDK全部规范了。并且打了composer包,这就更好了,上次做的时候还是用的TP自定义扩展extend,这下可以直接用vendor了。
切换到项目根目录,执行composer require alibabacloud/client命令,完成后,TP的vendor目录下就有了一个alibabacloud的扩展。接下来改造应用即可
如果,通过这个链接,进入阿里云OpenAPI Explorer界面,填写相关的短信模板签名,模板code,和模板变量。其中模板变量这里踩了一个坑,等下讲。右侧就自动生成了你需要的代码,拷贝其中的代码到你的控制器,稍加改造。
首先当然是use这个扩展类库。原封不动的拷贝过来即可。
将AlibabaCloud::accessKeyClient的静态方法封装到自己的方法中,我这里就用上一版本的方法名了,给getAcsClient方法两个参数,一个手机号,一个验证码。下面的query请求数组将自动生成的用两个参数替代就好了,前面说我踩了个坑,我用模板里面的变量名称${code}传生成的代码,这里直接用了$num替换,报了一个Object {Message: "JSON参数不合法", RequestId: "EBA7EC8F-8484-45B8-A471-B9DB672C50F2", Code: "isv.INVALID_JSON_PARAM"}这样的错误,再回过头去看API错误码,发现原因,所以这里重新做下拼接就可以了。
然后改造下上一版中的发送短信方法就可以了,将$resp = static::getAcsClient()->getAcsResponse($request);改成$resp = $this->getAcsClient($data['mobiphone'],$num);将上一版中没用的json构造数据部分删除就妥了。
好了,水文结束,要下班了。