php thinkphp 阿里云(国际版)短信发送 中国大陆和国外

1,939 阅读2分钟

阿里云(国际版)官方文档www.alibabacloud.com/help/zh/doc…

注意:阿里云账号分(国内版、国际版),不同账号发送短信sdk不一样的

下载sdk速度较慢,一定要耐心等待

坑点一:国际版下载sdk是通过composer命令下载的(也有其他方式,本人未试),如果你使用的是TP框架,通过composer命令下载,可能会与你框架的【composer.json、composer.lock这个两个文件的原因导致你下载失败】

坑点一【解决方式】:单独找一个空文件夹通过composer命令下载下来,放入你框架的第三方文件下面或者vendor文件夹下面即可引入使用

composer下载sdk命令:

composer require alibabacloud/client

sdk下载下来会出现下面2个文件一个文件夹

接下来我们创建一个demo.php文件,里面代码可以去官方文档里面复制

www.alibabacloud.com/help/zh/doc…

下面是demo.php文件代码:

特别注意**:一定要通过 “require_once”引入你下载的sdk里面的** vendor 文件夹下面的 autoload.php,否则你会找不到你实例化不了下面使用的类

require_once dirname(__DIR__) . '/aliyun_sdk_guojiban/vendor/autoload.php';

<?php

require_once dirname(__DIR__) . '/aliyun_sdk_guojiban/vendor/autoload.php';
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
class Aliyungj
{
    /*国际--不需要模板code和签名,短信模板自己定义*/
    public function sendSms($phone,$code){
        AlibabaCloud::accessKeyClient($accessKeyId,$accessKeySecret)
            ->regionId('ap-southeast-1')
            ->asGlobalClient();
        $code = '驗證碼: '.$code.', 十分鐘內輸入, 請勿泄露給其他人';//此处是短信模板,国外模板是自己定义的,所以不需要模板code和签名
        try {
            $result = AlibabaCloud::rpcRequest()
                ->product('Dysmsapi')
                ->host('dysmsapi.ap-southeast-1.aliyuncs.com')
                ->version('2018-05-01')
                ->action('SendMessageToGlobe')//请求api接口名称
                ->method('POST')
                ->options([
                    'query' => [
                        "To" => "$phone",//接收手机号
                        "Message" => $code,//接收的验证码
                    ],
                ])
                ->request();
            return \GuzzleHttp\json_decode($result);
        } catch (ClientException $e) {
            echo $e->getErrorMessage() . PHP_EOL;
        } catch (ServerException $e) {
            echo $e->getErrorMessage() . PHP_EOL;
        }
    }
    /*国内--需要模板code和签名*/
    public function gn_sendSms($phone,$code){
        AlibabaCloud::accessKeyClient('$accessKeyId', '$accessKeySecret')
            ->regionId('ap-southeast-1')
            ->asGlobalClient();
        try {
            $result = AlibabaCloud::rpcRequest()
                ->product('Dysmsapi')
                ->host('dysmsapi.ap-southeast-1.aliyuncs.com')
                ->version('2018-05-01')
                ->action('SendMessageWithTemplate')//请求api接口名称
                ->method('POST')
                ->options([
                    'query' => [
                        "From" => "",//签名
                        "TemplateCode" => "",//模板code
                        "To" => "$phone",//接收手机号
                        "TemplateParam" => '{"code":"'.$code.'"}',//验证码
                    ],
                ])
                ->request();
            return \GuzzleHttp\json_decode($result);
        } catch (ClientException $e) {
            echo $e->getErrorMessage() . PHP_EOL;
        } catch (ServerException $e) {
            echo $e->getErrorMessage() . PHP_EOL;
        }
    }
}
$Aliyungj = new Aliyungj;
$phone = '';//记得加上某国家区号【此方式仅支持国外手机号发送验证码】
$code = '1111';
//$res = $Aliyungj->sendSms($phone,$code);
$res = $Aliyungj->gn_sendSms($phone,$code);
var_dump($res);

下面是官方api调用的其他接口,根据不同api接口请求参数,修改上面demo请求参数和请求接口名称

www.alibabacloud.com/help/zh/doc…