php5.2版本如何成功调用腾讯云短信API,实现短信发送功能

一、简要说明

  我们在生活中经常会遇到一种情况,当你注册某个平台账户时,只要输入你的手机号码,点击获取验证码,随后就会收到发给你的短信验证码。

  一般来说,实现这种功能都是用阿里云或者腾讯云提供的云短信服务。价格也很便宜,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。

猜你喜欢

转载自www.cnblogs.com/Jasonhuangdc/p/9254424.html