PHP交流群:294088839

function baiCode($tel,$verify){$sys=\think\Db::name('tel_sys')->where(array('tel_id'=>3))->field('tel_text')->find();$sys=json_decode($sys['tel_text'],true);$url=$sys['url'];$accesskey=$sys['accesskey'];$secretaccesskey=$sys['secretaccesskey'];$template=$sys['template'];$invokeId=$sys['invokeid'];$message_array = array("invokeId" => $invokeId,"phoneNumber" => $tel,"templateCode" => $template,"contentVar" => array("code" =>  "$verify",),);//生成json格式$json_data = json_encode($message_array);//生成签名include_once "./extend/sign/sign.php";$signer = new SampleSigner();$credentials = array("ak" => $accesskey,"sk" => $secretaccesskey);$httpMethod = "POST";$path = "/bce/v2/message";$params = array();$timestamp = new \DateTime();$timestamp->setTimezone(new \DateTimeZone("GMT"));$datetime = $timestamp->format("Y-m-d\TH:i:s\Z");$datetime_gmt = $timestamp->format("D, d M Y H:i:s T");$headers = array("Host" => $url);$str_sha256 = hash('sha256', $json_data);$headers['x-bce-content-sha256'] = $str_sha256;$headers['Content-Length'] = strlen($json_data);$headers['Content-Type'] = "application/json";$headers['x-bce-date'] = $datetime;$options = array(SignOption::TIMESTAMP => $timestamp, SignOption::HEADERS_TO_SIGN =>array('host', 'x-bce-content-sha256',));$ret = $signer->sign($credentials, $httpMethod, $path, $headers, $params, $options);$headers_curl = array('Content-Type:application/json','Host:' . $url,'x-bce-date:' . $datetime,'Content-Length:' . strlen($json_data),'x-bce-content-sha256:' . $str_sha256,'Authorization:' . $ret,"Accept-Encoding: gzip,deflate",'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/2008052906 Firefox/3.0','Date:' .$datetime_gmt,);//$url = 'http://sms.bj.baidubce.com/bce/v2/message';$url = 'http://' . $url . $path;//$url = '/bce/v2/message';$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);curl_setopt($curl, CURLOPT_POST, 1);curl_setopt($curl, CURLOPT_POSTFIELDS, $json_data);//curl_setopt($curl, CURLOPT_HEADER, 1);//curl_setopt($curl,CURLOPT_PROXY,'127.0.0.1:8888');//设置代理服务器curl_setopt($curl, CURLOPT_HTTPHEADER, $headers_curl);curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);$result = curl_exec($curl);$errorno = curl_errno($curl);curl_close($curl);//print var_export($result, true);$aa= json_decode($result,true);if($aa['code']==1000){return true;}else{return false;}}

//sign.php 文件内容

<?php
/*
* Copyright (c) 2014 Baidu.com, Inc. All Rights Reserved
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* Http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/class SignOption
{const EXPIRATION_IN_SECONDS = 'expirationInSeconds';const HEADERS_TO_SIGN = 'headersToSign';const TIMESTAMP = 'timestamp';const DEFAULT_EXPIRATION_IN_SECONDS = 1800;const MIN_EXPIRATION_IN_SECONDS = 300;const MAX_EXPIRATION_IN_SECONDS = 129600;
}class HttpUtil
{// 根据RFC 3986,除了://   1.大小写英文字符//   2.阿拉伯数字//   3.点'.'、波浪线'~'、减号'-'以及下划线'_'// 以外都要编码public static $PERCENT_ENCODED_STRINGS;//填充编码数组public static function __init(){HttpUtil::$PERCENT_ENCODED_STRINGS = array();for ($i = 0; $i < 256; ++$i) {HttpUtil::$PERCENT_ENCODED_STRINGS[$i] = sprintf("%%%02X", $i);}//a-z不编码foreach (range('a', 'z') as $ch) {HttpUtil::$PERCENT_ENCODED_STRINGS[ord($ch)] = $ch;}//A-Z不编码foreach (range('A', 'Z') as $ch) {HttpUtil::$PERCENT_ENCODED_STRINGS[ord($ch)] = $ch;}//0-9不编码foreach (range('0', '9') as $ch) {HttpUtil::$PERCENT_ENCODED_STRINGS[ord($ch)] = $ch;}//以下4个字符不编码HttpUtil::$PERCENT_ENCODED_STRINGS[ord('-')] = '-';HttpUtil::$PERCENT_ENCODED_STRINGS[ord('.')] = '.';HttpUtil::$PERCENT_ENCODED_STRINGS[ord('_')] = '_';HttpUtil::$PERCENT_ENCODED_STRINGS[ord('~')] = '~';}//在uri编码中不能对'/'编码public static function urlEncodeExceptSlash($path){return str_replace("%2F", "/", HttpUtil::urlEncode($path));}//使用编码数组编码public static function urlEncode($value){$result = '';for ($i = 0; $i < strlen($value); ++$i) {$result .= HttpUtil::$PERCENT_ENCODED_STRINGS[ord($value[$i])];}return $result;}//生成标准化QueryStringpublic static function getCanonicalQueryString(array $parameters){//没有参数,直接返回空串if (count($parameters) == 0) {return '';}$parameterStrings = array();foreach ($parameters as $k => $v) {//跳过Authorization字段if (strcasecmp('Authorization', $k) == 0) {continue;}if (!isset($k)) {throw new \InvalidArgumentException("parameter key should not be null");}if (isset($v)) {//对于有值的,编码后放在=号两边$parameterStrings[] = HttpUtil::urlEncode($k). '=' . HttpUtil::urlEncode((string) $v);} else {//对于没有值的,只将key编码后放在=号的左边,右边留空$parameterStrings[] = HttpUtil::urlEncode($k) . '=';}}//按照字典序排序sort($parameterStrings);//使用'&'符号连接它们return implode('&', $parameterStrings);}//生成标准化uripublic static function getCanonicalURIPath($path){//空路径设置为'/'if (empty($path)) {return '/';} else {//所有的uri必须以'/'开头if ($path[0] == '/') {return HttpUtil::urlEncodeExceptSlash($path);} else {return '/' . HttpUtil::urlEncodeExceptSlash($path);}}}//生成标准化http请求头串public static function getCanonicalHeaders($headers){//print 'getCanonicalHeaders:'.var_export($headers, true);//如果没有headers,则返回空串if (count($headers) == 0) {return '';}$headerStrings = array();foreach ($headers as $k => $v) {//跳过key为null的if ($k === null) {continue;}//如果value为null,则赋值为空串if ($v === null) {$v = '';}//trim后再encode,之后使用':'号连接起来$headerStrings[] = HttpUtil::urlEncode(strtolower(trim($k))) . ':' . HttpUtil::urlEncode(trim($v));}//字典序排序sort($headerStrings);//用'\n'把它们连接起来return implode("\n", $headerStrings);}
}
HttpUtil::__init();class SampleSigner
{const BCE_AUTH_VERSION = "bce-auth-v1";const BCE_PREFIX = 'x-bce-';//不指定headersToSign情况下,默认签名http头,包括://    1.host//    2.content-length//    3.content-type//    4.content-md5public static $defaultHeadersToSign;public static function  __init(){SampleSigner::$defaultHeadersToSign = array("host","content-length","content-type","content-md5",);}//签名函数public function sign(array $credentials,$httpMethod,$path,$headers,$params,$options = array()) {//设定签名有效时间if (!isset($options[SignOption::EXPIRATION_IN_SECONDS])) {//默认值1800秒$expirationInSeconds = SignOption::DEFAULT_EXPIRATION_IN_SECONDS;} else {$expirationInSeconds = $options[SignOption::EXPIRATION_IN_SECONDS];}//解析ak sk$accessKeyId = $credentials['ak'];$secretAccessKey = $credentials['sk'];//设定时间戳,注意:如果自行指定时间戳需要为UTC时间if (!isset($options[SignOption::TIMESTAMP])) {//默认值当前时间$timestamp = new \DateTime();} else {$timestamp = $options[SignOption::TIMESTAMP];}$timestamp->setTimezone(new \DateTimeZone("GMT"));//生成authString$authString = SampleSigner::BCE_AUTH_VERSION . '/' . $accessKeyId . '/'. $timestamp->format("Y-m-d\TH:i:s\Z") . '/' . $expirationInSeconds;//使用sk和authString生成signKey$signingKey = hash_hmac('sha256', $authString, $secretAccessKey);//生成标准化URI$canonicalURI = HttpUtil::getCanonicalURIPath($path);//生成标准化QueryString$canonicalQueryString = HttpUtil::getCanonicalQueryString($params);//填充headersToSign,也就是指明哪些header参与签名$headersToSign = null;if (isset($options[SignOption::HEADERS_TO_SIGN])) {$headersToSign = $options[SignOption::HEADERS_TO_SIGN];}//生成标准化header$canonicalHeader = HttpUtil::getCanonicalHeaders(SampleSigner::getHeadersToSign($headers, $headersToSign));//整理headersToSign,以';'号连接$signedHeaders = '';if ($headersToSign !== null) {$signedHeaders = strtolower(//trim(implode(";", array_keys($headersToSign)))trim(implode(";", $headersToSign)));}//组成标准请求串$canonicalRequest = "$httpMethod\n$canonicalURI\n". "$canonicalQueryString\n$canonicalHeader";//$canonicalRequest = "$httpMethod\n$canonicalURI\n\nhost:sms.bj.baidubce.com";//print var_export($canonicalRequest, true);//使用signKey和标准请求串完成签名$signature = hash_hmac('sha256', $canonicalRequest, $signingKey);//组成最终签名串$authorizationHeader = "$authString/$signedHeaders/$signature";return $authorizationHeader;}//根据headsToSign过滤应该参与签名的headerpublic static function getHeadersToSign($headers, $headersToSign){//print 'headers:' .var_export($headers, true);//print 'headersToSign:' .var_export($headersToSign, true);//value被trim后为空串的header不参与签名$filter_empty = function($v) {return trim((string) $v) !== '';};$headers = array_filter($headers, $filter_empty);//处理headers的key:去掉前后的空白并转化成小写$trim_and_lower = function($str){return strtolower(trim($str));};$temp = array();$process_keys = function($k, $v) use(&$temp, $trim_and_lower) {$temp[$trim_and_lower($k)] = $v;};array_map($process_keys, array_keys($headers), $headers);//array_map($process_keys, array_keys($headersToSign), $headersToSign);$headers = $temp;//print 'headers123:' .var_export($headers, true);//取出headers的key以备用$header_keys = array_keys($headers);// print 'header_keys:' .var_export($header_keys, true);$filtered_keys = null;if ($headersToSign !== null) {//如果有headersToSign,则根据headersToSign过滤//预处理headersToSign:去掉前后的空白并转化成小写$headersToSign = array_map($trim_and_lower, $headersToSign);//print 'headersToSign4321:' .var_export($headersToSign, true);//只选取在headersToSign里面的header$filtered_keys = array_intersect_key($header_keys, $headersToSign);} else {//如果没有headersToSign,则根据默认规则来选取headers$filter_by_default = function($k) {return SampleSigner::isDefaultHeaderToSign($k);};$filtered_keys = array_filter($header_keys, $filter_by_default);}//print 'headersToSign123:' .var_export($headersToSign, true);//print 'filtered_keys123:' .var_export($filtered_keys, true);//print 'headers4321:' .var_export($headers, true);//$filtered_keys = array('host');//返回需要参与签名的headerreturn array_intersect_key($headers, array_flip($filtered_keys));}//检查header是不是默认参加签名的://1.是host、content-type、content-md5、content-length之一//2.以x-bce开头public static function isDefaultHeaderToSign($header){$header = strtolower(trim($header));if (in_array($header, SampleSigner::$defaultHeadersToSign)) {return true;}return substr_compare($header, SampleSigner::BCE_PREFIX, 0, strlen(SampleSigner::BCE_PREFIX)) == 0;}
}
SampleSigner::__init();

转载地址:http://www.thinkindrupal.com/node/5983

百度云SMS发短信接口 PHP版本SDK TP5.0相关推荐

  1. 使用腾讯云sms实现短信验证功能

    使用腾讯云sms实现短信验证功能 腾讯云短信免费试用:https://console.cloud.tencent.com/smsv2 腾讯云短信功能注册完成,并通过审批.就可以得到以下参数. Secr ...

  2. 云之讯php短信接口,菏泽java云之讯短信接口价格如何计算? 新锐信息科技服务至上...

    免费接码验证码接收平台 好用的接码平台有以下几个特征: 1.平台功能设置人性化:语音验证码+短信验证码一体化,方便用户使用.现在很多项目都慢慢开始了语音验证码的步伐. 2.平台稳定经营时间久:接码平台 ...

  3. 容联云通讯php短信接口,短信发送接口

    1 模板短信接口请求方式 1.1 业务流程说明 1.2 Base URL 模板短信API引用的地址有Base URL. 注意:为了确保数据隐私,云通讯平台的REST API是通过HTTPS方式请求. ...

  4. 秒懂云通信:如何用阿里云平台发短信?

    1.阿里云短信官网在哪里.业务怎么开通? 搜索引擎搜"阿里云"或者直接录入alicloud.com后选择"短信服务". 阿里云短信服务,第一次或者未登录都可以点 ...

  5. 发短信接口获取验证码

    接口合作公司  :http://sms.inolink.com/LoginFront.aspx  从这里获取id <?php function execPostRequest($url,$fie ...

  6. 云之讯短信接口开发小白教程

    首先,不了解云之讯的可以不用了解.我们只需要知道自己的目的,我的目的是短信的发送,所以我直接去看云之讯开发文档(毕竟是开发人员). 首先我做的第一步是:申请一个账户,给自己的手机发送一条短信,先体验功 ...

  7. 容联云通讯php短信接口,开发中使用 【容联 云通信】获取短信验证码的 Javascript 接口...

    开发中使用 [容联 云通信]获取短信验证码的 Javascript 接口 在平台应用列表添加应用. 在测试号码中绑定测试手机号码,只有这个号码能接收验证短信. 在项目中绑定配置:将控制台首页的开发者主 ...

  8. 容联云通讯php短信接口,短信查询接口_开发文档_容联云通讯

    1.短信模板查询 1.1 请求地址 /{SoftVersion}/Accounts/{accountSid}/SMS/QuerySMSTemplate 1.2 请求包体 属性 类型 约束 说明 app ...

  9. java调用发短信接口

    关于代码的编写 转载:http://blog.csdn.net/longwei000/article/details/50715253 首先要引入jar包,使用maven,如果去官网下载也可以,好多人 ...

最新文章

  1. 安装QQ时出现无法访问WINDOWS安装服务。
  2. dsoframer控件注册,解注册和检查注册情况
  3. linux内核唤醒过程,Linux内核启动过程分析
  4. 程序员如何理解Gmail“撤销发送”功能
  5. Python 了解 bytes 与 str 的区别
  6. .NET程序不需要受SVN版本控制的文件类型
  7. JMETER 不同线程组 变量值 的参数传递(转)
  8. 七月老师python_七月在线Python数据分析入门
  9. (152)IES光源概述文件
  10. 车间和仓库可以一起吗_为什么厂房和仓库不能混用?
  11. 一文搞懂HTTPProxy丨含基础、高级路由、服务韧性
  12. android开机logo制作
  13. 【历史上的今天】1 月 6 日:“互联网之子”的陨落;微软云服务先驱出生;世界上第一台 5G 笔记本
  14. 鼠标右键“新建”选项没没有如何解决?
  15. 全国各地的五十种面条大全
  16. 我喜欢出发 - 汪国真
  17. AI人工智能毕业设计课题:人脸识别,人脸识别系统,人脸识别考勤系统
  18. uniapp搜索出的文字高光并添加锚点
  19. 员工修改添加,部门修改添加
  20. 金山办公测试开发面试总结

热门文章

  1. 关于自动化运维的那些事儿
  2. 一个图片测试的小网站:dummyimage.com
  3. 《和沐阳一起学POST+JS逆向》视频教程
  4. 有哪些营销书籍值得推荐?市场营销人员必读书单
  5. 2020-12-22 ACM集训一(二维数组与结构体)
  6. 五子棋游戏-1(绘制棋盘)
  7. Python全栈工程师之从网页搭建入门到Flask全栈项目实战(3) - 入门Flask微框架
  8. 正式加入阿里巴巴!跟Android初学者分享几点经验,附超全教程文档
  9. 《多媒体在初中数学中的运用研究》课题研究活动记录
  10. 消费金融进入“第二赛段”,突围关键是什么?