

使用PHP调用阿里API发短信总结
错误1: 引的的库没有成功,主要路径autoload.php的路径不对
( ! ) Fatal error: Uncaught Error: Class 'Darabonba\OpenApi\Models\Config' not found in C:\wamp64\www\SendSms\s.php on line 31
( ! ) Error: Class 'Darabonba\OpenApi\Models\Config' not found in C:\wamp64\www\SendSms\s.php on line 31
解决:
$path = __DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php'; //去掉这行中的. \DIRECTORY_SEPARATOR . '..',可以echo $path查看结果
错误2:证书错误,主要是因为没有用https去访问
C:\wamp64\www\SendSms\s.php:68:string 'cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://dysmsapi.aliyuncs.com/?PhoneNumbers=15994362677&SignName=gxnn&TemplateCode=SMS_465646201&TemplateParam=%7B%22code%22%3A%221234%22%7D' (length=280)
解决:
$config->endpoint = "dysmsapi.aliyuncs.com";
$config->protocol = "HTTP"; //加上这句,将协议设置为http
主要步骤
到阿里后台去申请访问id和访问key,这步同阿里的域名。开通短信服务,付费,实名认证,再认证签名,认证模板,然后安装composer,安装阿里的sdk库,在代码中引用库,
获取AccessKey ID与AccessKey Secret的方法
登录阿里去后台,鼠标移到右上角的主账号头像上,--AccessKey管理,这里可以创建AccessKey ID和AccessKey Secret
注意:阿里云那个AccessKey ID和访问AccessKey Secret,AccessKey ID可以随时查看,但是那个AccessKey Secret只有创建可以查看,后面就查看不了,你只有重新创建一个新的AccessKey ID时候才会有
开通短信服务,认证签名与模板,主要有开短信服务,付费,实名认证,再认证签名,认证模板
1. 登录后台,点左上角,在弹出窗口右边搜索框里输入 短信服务,点击打开
2. 点左边的国内消息--资质管理,个人就是需要身份证正反面,手持身份证照片,在签名管理里,添加短信签名,就是收到短信时显示谁发来的。模板管理,添加短信模板要审核,就是短信的内容了
注:这几项添加后都要审批后才可以用,短信内容也不是想发啥就发啥!
***注:如您需要实现给任意用户发送短信,需要您在申请签名的时候,签名来源不要选择:测试或学习,同时,签名关联的模板信息,也需要同时再申请个新的使用。
安装相应的库并在在代码里调用
1. 在短信服务里,点击左边的快速学习和测试,在右边选择好审核的签名和模板,再点底部的调用API发送短信,再弹出的新窗口里点发起调用,再点SDK调用示例,下载完整工程代码
2. 如果没有安装composer,就点SDK文档,按照步骤在电脑先下载安装composer,再用它安装sdk库
然后再cmd下切换PHP目录,安装sdk库,也可以在vscode中右击目录--open in terminal
composer require alibabacloud/dysmsapi-20170525 2.0.24
其它安装配置参考
来自:https://blog.csdn.net/qq_37682202/article/details/127458013
a、安装依赖
composer require alibabacloud/darabonba-openapi
b、切换阿里云镜像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
c、安装最新版的sdk
composer require alibabacloud/dysmsapi-20170525 2.0.24
其它短信平台
可以使用阿里云的,也可以使用互亿无线的,支持的平台比较多,包括delphi
推荐使用互亿无线的,都用起来更方便一些
关于费用
阿里的有10元200条,3个月内有效,其它50元及以上,都是两年内有效,互亿无线好像是不限时间的,但最底500元起
他那个调用也比较麻烦,需要先下载他一个软件装他的SDK,要求的php版本必须在5.6以上,配置复杂,那个调用方法虽然说有demo,首页断断续续的搞了一周才解决
关于互亿无线
互亿无线必须买1500以上的那个包服务包才能修改,短信签名,注册它会送十条短信,也可以十块钱买200条用,但只能在刚注册时买,且不能改签名和模板,只能用它提供的,API调用简单API文档也比较丰富,登录后,点击右上角的API文档,在打开代码示例可以下载到各种代码的调用示例,包括戴尔菲和PHP等,感觉比阿里云的还要丰富,调用的时候主要代入一个API ID和API Key就行了,相当于用户名和密码,登录后台,验证码通知短信下面的产品总览,你可以找到这两项。
其德尔菲吊用也很简单,在第一个框里输入API ID,在第二个框里输入API Key
最早有十元200条的,现在网上看到的至少1500起步,三万条,找客服好像可以买500块钱的,
============================================================================================================================
以下为成功的代码示例,这里只需要改访问id与Key,还有短信签名,模板名,模板参数,手机号
<?php
namespace AlibabaCloud\SDK\Sample;
use AlibabaCloud\SDK\Dysmsapi\V20170525\Dysmsapi;
use \Exception;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\Tea\Utils\Utils;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Dysmsapi\V20170525\Models\SendSmsRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
class Sample {
/**
* 使用AK&SK初始化账号Client
* @return Dysmsapi Client
*/
public static function createClient(){
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
// 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/311677.html。
$config = new Config([
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
// "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
"accessKeyId" => "LTAI5tCvonYjJgdbv2SfJnU8", //这里是访问ID
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
// "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
"accessKeySecret" => "0gbVgBXAq49oACc3nR3RDcytuJhqPu" //这里是访问key
]);
// Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
$config->endpoint = "dysmsapi.aliyuncs.com";
$config->protocol = "HTTP";
return new Dysmsapi($config);
}
/**
* @param string[] $args
* @return void
*/
public static function main(){
$client = self::createClient();
$sendSmsRequest = new SendSmsRequest([
"signName" => "gxnn", //这里是审核认证的签名
"templateCode" => "SMS_465646201", //这里是审核认证的模板编号
"templateParam" => "{\"code\":\"1234\"}", //这里是审核认证的模板内容中的验证码变量
"phoneNumbers" => "15994362677" //这里是要发送的手机号码
]);
$runtime = new RuntimeOptions([]);
try {
// 复制代码运行请自行打印 API 的返回值
$client->sendSmsWithOptions($sendSmsRequest, $runtime);
}
catch (Exception $error) {
if (!($error instanceof TeaError)) {
$error = new TeaError([], $error->getMessage(), $error->getCode(), $error);
}
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
// 错误 message
var_dump($error->message);
// 诊断地址
var_dump($error->data["Recommend"]);
Utils::assertAsString($error->message);
}
}
}
$path = __DIR__ . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php';
// $path = __DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php';
// echo $path;
if (file_exists($path)) {
require_once $path;
}
Sample::main();
?>