需要依赖OpenAPI PHP Client包和OpenAPI PHP SDK包。

请求参数

名称 类型 是否必选 示例值 描述
MessageType String SmsReport 有一种消息类型:SmsReport。
QueueName String Alicom-Queue-xxxxxx-SmsReport 阿里巴巴提供的消息队列名称,在短信控制台--系统设置可以查看到。

返回数据

名称 类型 示例值 描述
MessageId String 100803***03003 短信的发送ID。
To String 45***0121 短信的发送号码。
Status Number 3 短信的发送状态: 1 (Submitted), 2 (Failed), and 3 (Delivered)。
ErrorCode String success 短信发送返回的错误码。
ErrorDescription String success 短信发送返回的错误码详细描述。
SendDate String Mon, 24 Dec 2018 16:58:22 +0800 短信转发给运营商的时间。
ReceiveDate String Mon, 24 Dec 2018 16:58:22 +0800 短信收到运营商回执的时间。
NumberDetail String 号码的详细属性。
Country String Hongkong, China 号码所属国家。
Region String HongKong 编号区域。
Carrier String CMI 号码所属的运营商网络。

引入阿里云核心包

SDK下载:点击查看下载链接

调用示例

调用接口时,请注意:

注意事项如下:

  • regionId必须为ap-southeast-1,请勿修改。
  • product必须为Dysmsapi,请勿修改。
  • version必须为2018-05-01,请勿修改。
  • host必须为dysmsapi.ap-southeast-1.aliyuncs.com,请勿修改。
  • mnsClient初始化时,第一个参数必须为http://1493622401794734.mns.ap-southeast-1.aliyuncs.com, 请勿修改。
<?php
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
use AlibabaCloud\Dybaseapi\MNS\Requests\BatchReceiveMessage;
use AlibabaCloud\Dybaseapi\MNS\Requests\BatchDeleteMessage;

AlibabaCloud::accessKeyClient('<AccessKeyId>', '<AccessSecret>')
    ->regionId('ap-southeast-1')
    ->asGlobalClient();

// Message Quenue Name, you can get it from SMS console, like:Alicom-Queue-xxxxxx-SmsReport
$queueName = '<QueueName>';

// Message Type, smsReport
$messageType = '<MessageType>';

$response = null;
$token = null;
$i = 0;

do {
    try {
        if (null == $token || strtotime($token['ExpireTime']) - time() > 2 * 60) {
            $response = AlibabaCloud::rpcRequest()
                ->product('Dysmsapi')
                ->version('2018-05-01')
                ->action('QueryTokenForMnsQueue')
                ->method('POST')
                ->host("dysmsapi.ap-southeast-1.aliyuncs.com")
                ->options([
                    'query' => [
                        'MessageType' => $messageType,
                        'QueueName' => $queueName,
                    ],
                ])
                ->request()
                ->toArray();
        }

        $token = $response['MessageTokenDTO'];

        $mnsClient = new \AlibabaCloud\Dybaseapi\MNS\MnsClient(
            "https://1493622401794734.mns.ap-southeast-1.aliyuncs.com",
            $token['AccessKeyId'],
            $token['AccessKeySecret'],
            $token['SecurityToken']
        );
        $mnsRequest = new BatchReceiveMessage(10, 5);
        $mnsRequest->setQueueName($queueName);
        $mnsResponse = $mnsClient->sendRequest($mnsRequest);

        $receiptHandles = Array();
        foreach ($mnsResponse->Message as $message) {
            // $receiptHandles[] = $message->ReceiptHandle;
            $messageBody = base64_decode($message->MessageBody);
            print_r($messageBody . "\n");
        }

        if (count($receiptHandles) > 0) {
            $deleteRequest = new BatchDeleteMessage($queueName, $receiptHandles);
            $mnsClient->sendRequest($deleteRequest);
        }
    } catch (ClientException $e) {
        echo $e->getErrorMessage() . PHP_EOL;
    } catch (ServerException $e) {
        if ($e->getCode() == 404) {
            $i++;
        }
        echo $e->getErrorMessage() . PHP_EOL;
    }
} while ($i < 3);