全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
消息服务

发布短信消息示例代码

更新时间:2017-06-30 14:31:57

本示例介绍了:如何发布短信消息。

1. 准备

  • 下载最新版php sdk
  • 配置AccessKeyID、AccessKeySecret和Endpoint;

2. 创建主题和订阅

发布短信有两种模式的主题可使用(二者选其一即可):

  • 短信专用主题(推荐)
  • 普通主题

2.1 短信专用主题(推荐,简单)

进入控制台短信概览页,获取主题名称(专用主题和订阅会自动进行创建):

duanxin-gailan

注:图中 sms.topic-cn-hangzhou 即杭州区域的短信专用主题,不同区域对应的主题名不一样(使用时需要注意主题名与选择的Endpoint的一致性)。

2.2 普通主题及订阅(若使用短信专用主题则跳过)

使用普通的主题的话,需要分别创建主题和对应的订阅。

(1)创建主题

注:目前仅华东1、华东2、华北1、华北2、华南1支持短信推送,创建主题必须选择这些区域。

进入控制台主题标签页

create-topic-1

create-topic-2

(2)创建短信推送订阅

create-sub-1

create-sub-2

create-sub-3

3. 发布短信消息

示例需要传入的参数包括:

  • $YourAccessId,阿里云AccessId,可在“步骤一”获取(登陆阿里云 AccessKey 管理页面创建、查看)
  • $YourAccessKey,阿里云AccessKey,可在“步骤一”获取(登陆阿里云 AccessKey 管理页面创建、查看)
  • $YourMNSEndpoint,访问MNS服务的接入地址,可在“步骤一”获取(登陆MNS控制台,单击右上角“获取Endpoint”查看,选择公网地址)
  • $YourTopic,发送短信使用的主题,可在“步骤二”获取,建议使用短信专用主题(进入控制台短信概览页,获取主题名称)
  • $YourSignName,发送短信使用的签名,可在here获取
  • $YourSMSTemplateCode,发送短信使用的模板Code,可在here获取
  • $YourSMSTemplateParamKey1,所指定短信模板中定义的参数名(“{}”中的内容),没有可不指定;可在here查看模板中的变量,注:key 和 value 都必须是字符串形式duanmo-1duanmo-2
  • $YourReceiverPhoneNumber1,接收短信的手机号码

示例代码如下:

  1. <?php
  2. require_once(dirname(dirname(dirname(__FILE__))).'/mns-autoloader.php');
  3. use AliyunMNS\Client;
  4. use AliyunMNS\Topic;
  5. use AliyunMNS\Constants;
  6. use AliyunMNS\Model\MailAttributes;
  7. use AliyunMNS\Model\SmsAttributes;
  8. use AliyunMNS\Model\BatchSmsAttributes;
  9. use AliyunMNS\Model\MessageAttributes;
  10. use AliyunMNS\Exception\MnsException;
  11. use AliyunMNS\Requests\PublishMessageRequest;
  12. class PublishBatchSMSMessageDemo
  13. {
  14. public function run()
  15. {
  16. /**
  17. * Step 1. 初始化Client
  18. */
  19. $this->endPoint = "YourMNSEndpoint"; // eg. http://1234567890123456.mns.cn-shenzhen.aliyuncs.com
  20. $this->accessId = "YourAccessId";
  21. $this->accessKey = "YourAccessKey";
  22. $this->client = new Client($this->endPoint, $this->accessId, $this->accessKey);
  23. /**
  24. * Step 2. 获取主题引用
  25. */
  26. $topicName = "YourTopicName";
  27. $topic = $this->client->getTopicRef($topicName);
  28. /**
  29. * Step 3. 生成SMS消息属性
  30. */
  31. // 3.1 设置发送短信的签名(SMSSignName)和模板(SMSTemplateCode)
  32. $batchSmsAttributes = new BatchSmsAttributes("YourSMSSignName", "YourSMSTemplateCode");
  33. // 3.2 (如果在短信模板中定义了参数)指定短信模板中对应参数的值
  34. $batchSmsAttributes->addReceiver("YourReceiverPhoneNumber1", array("YourSMSTemplateParamKey1" => "value1"));
  35. $batchSmsAttributes->addReceiver("YourReceiverPhoneNumber2", array("YourSMSTemplateParamKey1" => "value1"));
  36. $messageAttributes = new MessageAttributes(array($batchSmsAttributes));
  37. /**
  38. * Step 4. 设置SMS消息体(必须)
  39. *
  40. * 注:目前暂时不支持消息内容为空,需要指定消息内容,不为空即可。
  41. */
  42. $messageBody = "smsmessage";
  43. /**
  44. * Step 5. 发布SMS消息
  45. */
  46. $request = new PublishMessageRequest($messageBody, $messageAttributes);
  47. try
  48. {
  49. $res = $topic->publishMessage($request);
  50. echo $res->isSucceed();
  51. echo "\n";
  52. echo $res->getMessageId();
  53. echo "\n";
  54. }
  55. catch (MnsException $e)
  56. {
  57. echo $e;
  58. echo "\n";
  59. }
  60. }
  61. }
  62. $instance = new PublishBatchSMSMessageDemo();
  63. $instance->run();
  64. ?>

4. 查看短信推送状态

查看短信推送状态的结果消息请参考:here

5. 如没有接收到短信怎么办

1)代码请用UTF8 格式,以避免中文字符出现问题。

2)每天发送短信条数是有限制的。参考流控文档

3)如果您提交接口请求后,未能收到短信,您可以通过事件通知来查看结果,包括请求接口错误和发送状态返回结果。

事件通知 接口报错信息 运营商返回报错信息

4)如还无法解决您的问题,您可以提交工单,并将messageid提供给我们。

本文导读目录