• 阿里云·短信发送


    废话不多说,与文章 

    PHP 阿里云OpenAPI签名[RPC 调用机制]·一键登录取号[云通信号码认证服务]_Purgatory001的博客-CSDN博客_php阿里云签名

    区别不大,最重要的签名都解决了,剩下的都是弟弟。

    1. /**
    2. * 阿里开放文档签名
    3. * @author lianyu001<1411479499@qq.com>
    4. * 2022-08-01
    5. */
    6. class Ali_sms {
    7. public $data;
    8. public $accessKeyId = 'xxx'; //阿里后台拿
    9. public $accessKeySecret = 'xxxx'; //阿里后台拿
    10. public $url = 'https://dysmsapi.aliyuncs.com?'; //依据服务器那个快拿哪个,这个杭州的
    11. /**
    12. * new 的时候初始化参数
    13. * @param ary $actionArray 要调用的开放接口参数 数组,可以去除公共参数,后续如果有公共参数,自行添加在数组中或者 该类中都行
    14. * @param str $url 访问的服务器地址,看下自己服务器离哪个区域近拿哪个
    15. */
    16. public function __construct($actionArray, $url='https://dysmsapi.aliyuncs.com?') {
    17. $this->url = $url;
    18. // date_default_timezone_set("GTM");
    19. date_default_timezone_set("UTC");
    20. // date_default_timezone_set('Asia/Shanghai');
    21. $this->data = array(
    22. // 公共参数
    23. 'Format' => 'JSON',//返回参数格式
    24. 'Version' => '2017-05-25',//版本
    25. 'AccessKeyId' => $this->accessKeyId,
    26. 'SignatureVersion' => '1.0',//加餐版本
    27. 'SignatureMethod' => 'HMAC-SHA1',//加餐方式,参数加密方式
    28. 'SignatureNonce' => uniqid(),//访问唯一标识,防止重复
    29. 'Timestamp' => date('Y-m-d') . 'T' . date('H:i:s') . 'Z',
    30. 'SignatureVersion' => '1.0',
    31. );
    32. //判断输入的参数是否为数组
    33. if (is_array($actionArray)) {
    34. $this->data = array_merge($this->data, $actionArray);//数组合并
    35. }
    36. }
    37. /**
    38. * 传递参数处理
    39. * 按理中间3行要加上的,我这边报警告,就直接注释了
    40. * @param str $str 传递参数值
    41. * @return str 处理结果参数
    42. */
    43. public function percentEncode($str) {
    44. // 使用urlencode编码后,将"+","*","%7E"做替换即满足ECS API规定的编码规范
    45. $res = urlencode($str);
    46. // $res = preg_replace('/+/', '%20', $res);
    47. // $res = preg_replace('/*/', '%2A', $res);
    48. // $res = preg_replace('/%7E/', '~', $res);
    49. return $res;
    50. }
    51. /**
    52. * 加密
    53. * @param ary $parameters 加密参数
    54. * @param str $accessKeySecret 秘钥,第三方可以拿到
    55. * @return str 返回签名
    56. */
    57. public function computeSignature($parameters, $accessKeySecret) {
    58. // 将参数Key按字典顺序排序
    59. ksort($parameters);
    60. // 生成规范化请求字符串
    61. $canonicalizedQueryString = '';
    62. foreach ($parameters as $key => $value) {
    63. $canonicalizedQueryString .= '&' . $this->percentEncode($key)
    64. . '=' . $this->percentEncode($value);
    65. }
    66. // 生成用于计算签名的字符串 stringToSign
    67. $stringToSign = 'POST&%2F&' . $this->percentencode(substr($canonicalizedQueryString, 1));
    68. // 计算签名,注意accessKeySecret后面要加上字符'&'
    69. $signature = base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret . '&', true));
    70. return $signature;
    71. }
    72. /**
    73. * 使用阿里签名访问openapi接口
    74. * @return 结果
    75. */
    76. public function callInterface() {
    77. // 计算签名并把签名结果加入请求参数
    78. $this->data['Signature'] = $this->computeSignature($this->data, $this->accessKeySecret);
    79. var_dump($this->data);
    80. var_dump($this->url);
    81. // return $this->data;
    82. // 发送请求
    83. $ch = curl_init();
    84. curl_setopt($ch, CURLOPT_POST, true);
    85. curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type:application/x-www-form-urlencoded']);
    86. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts
    87. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 不从证书中检查SSL加密算法是否存在
    88. curl_setopt($ch, CURLOPT_URL, $this->url . http_build_query($this->data));
    89. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    90. $res = curl_exec($ch);
    91. $res = json_decode($res, true);
    92. return $res;
    93. }
    94. /**
    95. * 测试 发送短信
    96. */
    97. function test() {
    98. $arr=[
    99. 'Action' => 'SendSms',
    100. 'PhoneNumbers'=>'18520745660',
    101. 'SignName'=>'xxx',//签名,短信开头【xxx】
    102. 'TemplateCode'=>'SMS_247666666',//模板名称
    103. 'TemplateParam'=>'{"code":"52013"}',//模板里面的参数code或其他
    104. ];
    105. $obj = new Ali_sms($arr);
    106. $data = $obj->callInterface();
    107. var_dump($data);die;
    108. }
    109. }

    注意点:url,接收请求的地址服务接入点 - 短信服务 - 阿里云

      其他就没什么要求了,看下文档,阿里云的文档简单,人工也是很舒服的。对于我这种拒绝下载过多和过大文件的sdk 或者 demo 的人来说,简直了,一次愉快的沟通。

    运行结果如下:

    array(4) {
      ["Message"]=>
      string(2) "OK"
      ["RequestId"]=>
      string(36) "CC9F353C-569A-5958-95C6-1EA7391EB299"
      ["Code"]=>
      string(2) "OK"
      ["BizId"]=>
      string(20) "705201159316521496^0"
    }

  • 相关阅读:
    现场维护:问题处理的策略;要先找到真正原因再实施变通方案
    c 语言基础题目:L1-034 点赞
    【记录文】Android自定义Dialog实现圆角对话框
    @EventListener 监听事件 ,在同一个虚拟机中如何保证顺序执行
    专利交底书怎么写 -
    岛屿问题,矩阵:DFS+标记剪枝+回溯
    基于飞书通讯录同步构建本地LDAP服务,打通各应用系统间的组织架构和账号信息
    JLink更新固件成砖头的Q&A
    ubuntu部署若依vue版
    【python】len()、str()、int()和float()函数
  • 原文地址:https://blog.csdn.net/Purgatory001/article/details/126094366