分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

PHP开发实用-阿里短信服务(Short Message Service)

发布时间:2023-09-06 01:53责任编辑:胡小海关键词:PHP

步骤 1 使用阿里云短信服务正常发短信需要

  • 短信签名
  • 短信模板
  1. 1申请短信签名
    ??根据用户属性来创建符合自身属性的签名信息。企业用户需要上传相关企业资质证明,个人用户需要上传证明个人身份的证明。
    ??短信签名需要审核通过后才可以使用。

    1.2 申请短信模板
    ??短信模板,即具体发送的短信内容。短信模板可以支持验证码、短信通知、推广短信、国际/港澳台消息四种模式。验证码和短信通知,通过变量替换实现个性短信定制。推广短信不支持在模板中添加变量。
    ??短信模板需要审核通过后才可以使用。

步骤 2 获取阿里云访问密钥

调用短信API还需要两个参数:

  • Access Key ID
  • Access Key Secret

??可以通过阿里云控制台的 秘钥管理页面 创建、管理所有的访问秘钥对,且保证它处于“启用”状态。由于访问秘钥是阿里云对 API 请求进行安全验证的关键因子,请妥善保管你的访问秘钥。如果某些秘钥对出现泄漏风险,建议及时删除该秘钥对并生成新的替代秘钥对。

步骤 3 将阿里云短信整合进Laravel进行开发


??下载阿里云提供的SDK开发并将api_sdk/lib/Core和api_sdk/lib/Api复制一份放到项目app/Tools/dysms下,没有的话需要自己创建。

打开项目根目录下的composer.json文件,在classmap,加上图示代码

打开命令行工具在项目根目录输入:

composer dumpautoload ?

执行成功如下图

接下来就是正式的开发了,直接使用sdk里面导入包的方式进行引入:

第一次postman测试运行报错如下:

这是因为EndpointerProvider里面,没有setEndpoints就直接使用了getEndpointers,所以返回为空信息,setEndpoints操作是在EndpointConf中调用的,加载xml中的endpoints,在调用代码中加入

// 手动加载endpointEndpointConfig::load();

再次运行代码发现报如下错误:

这是因为代理的原因,注释一下代码就可以了:

开发完整代码,github源码地址:

<?phpnamespace App\Http\Controllers\Admin;use Illuminate\Http\Request;use App\Http\Controllers\Controller;use Illuminate\Support\Facades\Input;use Aliyun\Core\Profile\DefaultProfile;use Aliyun\Core\DefaultAcsClient;use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;use Aliyun\Core\Regions\EndpointConfig;class Dysms extends Controller{ ???static $acsClient = null; ???//阿里短信 ???public function Dysms() ???{ ???????// 初始化SendSmsRequest实例用于设置发送短信的参数 ???????$request = new SendSmsRequest(); ???????//可选-启用https协议 ???????//$request->setProtocol("https"); ???????// 必填,设置短信接收号码 ???????$request->setPhoneNumbers(Input::get(‘phone‘)); ???????// 必填,设置签名名称,应严格按"签名名称"填写,请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/sign ???????$request->setSignName("签名"); ???????// 必填,设置模板CODE,应严格按"模板CODE"填写, 请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/template ???????$request->setTemplateCode("模版CODE"); ???????// 可选,设置模板参数, 假如模板中存在变量需要替换则为必填项 ???????$request->setTemplateParam(json_encode(array( ???????????// 短信模板中字段的值 ???????????"code" => rand(000000, 999999), ???????????"product" => "dsd" ???????), JSON_UNESCAPED_UNICODE)); ???????// 可选,设置流水号 ???????$request->setOutId("1234567"); ???????// 选填,上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)// ???????$request->setSmsUpExtendCode("1234567"); ???????// 发起访问请求 ???????$acsResponse = static::getAcsClient()->getAcsResponse($request);//打印执行结果 ???????dd($acsResponse);// 执行成功后的返回状态// ???????{#1538// ???????????+"Message": "OK"// ???????????+"RequestId": "0CE56BFE-5E9A-4F3F-8AEC-5C524720CE83"// ???????????+"BizId": "480519725607521112^0"// ???????????+"Code": "OK"// ???????} ???} ???/** ????* 取得AcsClient ????* ????* @return DefaultAcsClient ????*/ ???public static function getAcsClient() ???{ ???????//产品名称:云通信流量服务API产品,开发者无需替换 ???????$product = "Dysmsapi"; ???????//产品域名,开发者无需替换 ???????$domain = "dysmsapi.aliyuncs.com"; ???????// TODO 此处需要替换成开发者自己的AK (https://ak-console.aliyun.com/) ???????// AccessKeyId ???????$accessKeyId = "AccessKeyId"; ???????// AccessKeySecret ???????$accessKeySecret = "AccessKeySecret"; ???????// 暂时不支持多Region ???????$region = "cn-hangzhou"; ???????// 服务结点 ???????$endPointName = "cn-hangzhou"; ???????if (static::$acsClient == null) { ???????????//初始化acsClient,暂不支持region化 ???????????$profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret); ???????????// 手动加载endpoint ???????????EndpointConfig::load(); ???????????// 增加服务结点 ???????????DefaultProfile::addEndpoint($endPointName, $region, $product, $domain); ???????????// 初始化AcsClient用于发起请求 ???????????static::$acsClient = new DefaultAcsClient($profile); ???????} ???????return static::$acsClient; ???}}

PS:最后不得不吐槽下,阿里用OSS和阿里短信好多坑啊,这么大的一个公司。

PHP开发实用-阿里短信服务(Short Message Service)

原文地址:https://www.cnblogs.com/caiji/p/9007375.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved