一、简要说明
我们在生活中经常会遇到一种情况,当你注册某个平台账户时,只要输入你的手机号码,点击获取验证码,随后就会收到发给你的短信验证码。
一般来说,实现这种功能都是用阿里云或者腾讯云提供的云短信服务。价格也很便宜,1000条起订,每条0.005元。因为公司的业务需求,最近需要实现这个功能,经过了解后决定使用腾讯云的云短信服务。(其实两个平台价格差不多,但是腾讯云首次开启会免费赠送100条短信,非常适合前期测试,所以理所当然选择了腾讯云。)
在官方的文档中提供了C#,node.js,Java,Php等各种语言的SDK以及demo,根据实际情况下载了php的demo,按照demo编写我们自己的代码,成功实现了功能。
但是当将代码上传到服务器后,却一直报错。经过反复的查找,最终发现原来是因为服务器的php版本仅仅是php5.2,而腾讯官方的demo中调用的sdk却用了很多5.3或5.4以上才支持的语法。最坑爹的是我们的空间服务商php版本也无法升级,所以逼不得已只能从腾讯的sdk想办法了。
二、解决办法
知道了报错的原因,解决的方法也就很容易想到了。既然是因为php版本较低,那我们的解决思路就是看腾讯云的sdk中用了哪些php5.2不支持的语法,我们想办法找出来然后全部改成php5.2支持的写法。
1. 魔法变量_DIR_不可用
app.php
1 require __DIR__ . "/../../src/index.php";
index.php
1 require_once __DIR__ . "/SmsSenderUtil.php"; 2 require_once __DIR__ . "/SmsSingleSender.php"; 3 require_once __DIR__ . "/SmsMultiSender.php"; 4 require_once __DIR__ . "/SmsStatusPuller.php"; 5 require_once __DIR__ . "/SmsMobileStatusPuller.php"; 6 require_once __DIR__ . "/SmsVoicePromptSender.php"; 7 require_once __DIR__ . "/SmsVoiceVerifyCodeSender.php"; 8 require_once __DIR__ . "/VoiceFileUploader.php"; 9 require_once __DIR__ . "/FileVoiceSender.php"; 10 require_once __DIR__ . "/TtsVoiceSender.php";
查看demo中的文件可以发现,app.php以及index.php文件都使用了_DIR_这一魔法变量,可以获取到文件的绝对路径。
但是该魔法变量只有在php5.4以上才支持,我们将所有相关代码修改成如下写法:
通过dirname(_FILE_)达到相同的效果
require_once dirname(__FILE__) . "/SmsSingleSender.php";
2.命名空间不可用
例:SmsMultiSender.php
1 namespace Qcloud\Sms; 2 3 use Qcloud\Sms\SmsSenderUtil; 4 5 /** 6 * 群发短信类 7 * 8 */ 9 class SmsMultiSender 10 { 11 private $url; 12 private $appid; 13 private $appkey; 14 private $util;
命名空间namespace在php5.2中也是不可以使用的,use这个关键词不用说肯定也是不能使用的,所以程序中类似上图第1行和第3行的代码统统需要删除掉。
3.构造空函数时的区别
$data = new \stdClass();
在php5.2中,构造空函数直接用 new stdClass(),不用加反斜杠,把代码中构造空函数的反斜杠全部删除掉。
三、检查成果
经过上面对腾讯云官方sdk代码的全面修改,现在把你的代码上传到服务器上。好了,你已经可以在php5.2版本的服务器上成功调用腾讯云短信API。
原文地址:https://www.cnblogs.com/Jasonhuangdc/p/9254424.html