php短信接口及demo,PHP短信

发布时间:2022-11-20

本文目录一览:

  1. 如何实现php手机短信验证功能
  2. php短信接口是什么?
  3. php短信接口怎么使用
  4. PHP如何实现短信接口的调用?
  5. [阿里云短信sdk php怎么接入](#阿里云短信sdk php怎么接入)
  6. 通用免认证的短信接口,每天单个号码100条以上

如何实现php手机短信验证功能

现在网站在建设网站时为了保证用户信息的真实性,往往会选择发短信给用户手机发验证码信息,只有通过验证的用户才可以注册,这样保证了用户的联系信息资料的100%的准确性。

第一、实现php手机短信验证功能的基本思路

  1. 要找到短信服务提供商,接入短信服务
  2. 在网站信息提交页面请求发送信息
  3. 服务器向短信服务提供商通信,提交发送请求
  4. 短信服务提供商通过运营商将信息发送到用户的手机中

二、手机号码短信验证前台页面效果实现

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
<html xmlns
<head
<title/title
<script src="js/jquery-1.4a2.min.js" type="text/javascript"></script>
<script type="text/javascript"
/*
-------------------------------------------*/
var InterValObj; //timer变量,控制时间
var count = 60; //间隔函数,1秒执行
var curCount;//当前剩余秒数
var code = ""; //验证码
var codeLength = 6;//验证码长度
function sendMessage() {
curCount = count;
var dealType; //验证方式
tel = $('#tel').val();
if(tel!=''){
//验证手机有效性
var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/;
if(!myreg.test($('#tel').val()))
{
alert('请输入有效的手机号码!');
return false;
}
tel = $('#tel').val();
//产生验证码
for (var i = 0; i codeLength; i++) {
code += parseInt(Math.random() * 9).toString();
}
//设置button效果,开始计时
$("#btnSendCode").attr("disabled", "true");
$("#btnSendCode").val("请在" + curCount + "秒内输入验证码");
InterValObj = window.setInterval(SetRemainTime, 1000); //启动计时器,1秒执行一次
//向后台发送处理数据
$.ajax({
type: "POST", //用POST方式传输
dataType: "text", //数据格式:JSON
url: 'yanzhengma.php', //目标地址(根据实际地址)
data: "tel=" + tel + "code=" + code,
error: function (XMLHttpRequest, textStatus, errorThrown) { },
success: function (msg){ }
});
}else{
alert('请填写手机号码');
}
}
//timer处理函数
function SetRemainTime() {
if (curCount == 0) {
window.clearInterval(InterValObj);//停止计时器
$("#btnSendCode").removeAttr("disabled");//启用按钮
$("#btnSendCode").val("重新发送验证码");
code = ""; //清除验证码。如果不清除,过时间后,输入收到的验证码依然有效
}
else {
curCount--;
$("#btnSendCode").val("请在" + curCount + "秒内输入验证码");
}
}
</script>
</head>
<body
<input name="tel" id=tel type="text" />
<input id="btnSendCode" type="button" value="发送验证码" onclick="sendMessage()" />
</body>
</html>

第三、调用短信服务器短信接口

整理的页面是yanzhengma.php(具体根据服务商提供信息)

<?php //提交短信
$post_data = array();
$post_data['userid'] = 短信服务商提供ID;
$post_data['account'] = '短信服务商提供用户名';
$post_data['password'] = '短信服务商提供密码';
// Session保存路径
$sessSavePath = dirname(__FILE__)."/../data/sessions/";
if(is_writeable($sessSavePath) && is_readable($sessSavePath)){
session_save_path($sessSavePath);
}
session_register('mobliecode');
$_SESSION['mobilecode'] = $_POST["code"];
$content='短信验证码:'.$_POST["code"].'【短信验证】';
$post_data['content'] = mb_convert_encoding($content,'utf-8', 'gb2312'); //短信内容需要用urlencode编码下
$post_data['mobile'] = $_POST["tel"];
$post_data['sendtime'] = ''; //不定时发送,值为0,定时发送,输入格式YYYYMMDDHHmmss的日期值
$url='';
$o='';
foreach ($post_data as $k=>$v)
{
$o.="$k=".$v.'&';
}
$post_data=substr($o,0,-1);
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果需要将结果直接返回到变量里,那加上这句。
$result = curl_exec($ch);
?>

第四:提交表单信息时对短信验证码验证

//手机验证码开始
session_start();
$svalitel = $_SESSION['mobilecode'];
$vdcodetel = empty($vdcodetel) ? '' : strtolower(trim($vdcodetel));
if(strtolower($vdcodetel)!=$svalitel || $svalitel=='')
{
ResetVdValue();
//echo "Pageviews=".$vdcodetel;
ShowMsg("手机验证码错误!", '-1');
exit();
}

php短信接口是什么?

就是你后台程序用来的发短信给网站用户的。 你要去购买,然后他们会给你一个地址和账号和密码。 然后 地址+账号+密码+要发送的号码+要发送的内容 就发送短信了。

php短信接口怎么使用

首先你要联系一家短信服务商,然后他会给你一段代码,就是接口,然后给你demo教你怎么用。

PHP如何实现短信接口的调用?

如下代码示例是阅信短信验证码平台为方便客户提供的短信接口请求的代码示例,使用前还需要用户提前申请API服务和在短信模板中新增加一个版块,并且审核通过。

<?php
date_default_timezone_set('PRC'); //设置时区为东八区否则时间比北京时间早8小时
$url = ' 端口号';//接口地址
$mttime=date("YmdHis");
$name = '*******';//开通的用户名
$password='*****************';//密码
$post_data['name'] = $name;
$post_data['pwd'] = md5($password.$mttime);
$post_data['content'] = '【阅信短信平台】验证码888888,打死也不能告诉别人哦。';
$post_data['phone'] = '12345678901';//手机号码
$post_data['subid'] = '';
$post_data['mttime']=$mttime;
$o = "";
foreach( $post_data as $k => $v )
{
$o.= "$k=" . urlencode( $v ). "&" ;
}
$post_data = substr($o,0,-1);
$res = request_post($url, $post_data);
print $res;
/**
* 模拟post进行url请求
* @param string $url
* @param string $param
*/
function request_post($url = '', $param = '') {
if (empty($url) || empty($param)) {
return false;
}
$postUrl= $url;
$curlPost= $param;
$ch= curl_init();//初始化curl
curl_setopt($ch,CURLOPT_URL,$postUrl);//抓取指定网页
curl_setopt($ch,CURLOPT_HEADER, 0);//设置header
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且屏幕上
curl_setopt($ch,CURLOPT_POST, 1);//post提交方式
curl_setopt($ch,CURLOPT_POSTFIELDS, $curlPost);
$data= curl_exec($ch);//运行curl
curl_close($ch);
return $data;
}

阿里云短信sdk php怎么接入

一般情况下短信平台会给你提供下ID和sdk,我们用的邦之信短信平台的短信接口,他们提供各种开发语言的短信demo,直接用就行,很方便。

通用免认证的短信接口,每天单个号码100条以上

下面介绍一下moduyun平台的短信php接口。链接:

// Works well with php5.3 and php5.6.
namespace Moduyun\Sms;
require_once('SmsSenderUtil.php');
class SmsSingleSender {
    var $url;
    var $accesskey;
    var $secretkey;
    var $util;
    function __construct($accesskey, $secretkey) {
        $this->url = "";
        $this->accesskey =  $accesskey;
        $this->secretkey = $secretkey;
        $this->util = new SmsSenderUtil();
    }
    /**
     * 普通单发,明确指定内容,如果有多个签名,请在内容中以【】的方式添加到信息内容中,否则系统将使用默认签名
     * @param int $type 短信类型,0 为普通短信,1 营销短信
     * @param string $nationCode 国家码,如 86 为中国
     * @param string $phoneNumber 不带国家码的手机号
     * @param string $msg 信息内容,必须与申请的模板格式一致,否则将返回错误
     * @param string $extend 扩展码,可填空串
     * @param string $ext 服务端原样返回的参数,可填空串
     * @return string json string { "result": xxxxx, "errmsg": "xxxxxx" ... },被省略的内容参见协议文档
     */
    function send($type, $nationCode, $phoneNumber, $msg, $extend = "", $ext = "") {
        /* 请求包体
        {
            "tel": {
                "nationcode": "86",
                "mobile": "13788888888"
            },
            "type": 0,
            "msg": "你的验证码是1234",
            "sig": "fdba654e05bc0d15796713a1a1a2318c",
            "time": 1479888540,
            "extend": "",
            "ext": ""
        }
        应答包体
        {
            "result": 0,
            "errmsg": "OK",
            "ext": "",
            "sid": "xxxxxxx",
            "fee": 1
        }
        */
        $random = $this->util->getRandom();
        $curTime = time();
        $wholeUrl = $this->url . "?accesskey=" . $this->accesskey . "&random=" . $random;
        // 按照协议组织 post 包体
        $data = new \stdClass();
        $tel = new \stdClass();
        $tel->nationcode = "".$nationCode;
        $tel->mobile = "".$phoneNumber;
        $data->tel = $tel;
        $data->type = (int)$type;
        $data->msg = $msg;
        $data->sig = hash("sha256",
            "secretkey=".$this->secretkey."&random=".$random."&time=".$curTime."&mobile=".$phoneNumber, FALSE);
        $data->time = $curTime;
        $data->extend = $extend;
        $data->ext = $ext;
        return $this->util->sendCurlPost($wholeUrl, $data);
    }
    /**
     * 指定模板单发
     * @param string $nationCode 国家码,如 86 为中国
     * @param string $phoneNumber 不带国家码的手机号
     * @param int $templId 模板 id
     * @param array $params 模板参数列表,如模板 {1}...{2}...{3},那么需要带三个参数
     * @param string $sign 签名,如果填空串,系统会使用默认签名
     * @param string $extend 扩展码,可填空串
     * @param string $ext 服务端原样返回的参数,可填空串
     * @return string json string { "result": xxxxx, "errmsg": "xxxxxx" ... },被省略的内容参见协议文档
     */
    function sendWithParam($nationCode, $phoneNumber, $templId = 0, $params, $sign = "", $extend = "", $ext = "") {
        /* 请求包体
        {
            "tel": {
                "nationcode": "86",
                "mobile": "13788888888"
            },
            "sign": "Moduyun",
            "tpl_id": 19,
            "params": [
                "验证码",
                "1234",
                "4"
            ],
            "sig": "fdba654e05bc0d15796713a1a1a2318c",
            "time": 1479888540,
            "extend": "",
            "ext": ""
        }
        应答包体
        {
            "result": 0,
            "errmsg": "OK",
            "ext": "",
            "sid": "xxxxxxx",
            "fee": 1
        }
        */
        $random = $this->util->getRandom();
        $curTime = time();
        $wholeUrl = $this->url . "?sdkaccesskey=" . $this->accesskey . "&random=" . $random;
        // 按照协议组织 post 包体
        $data = new \stdClass();
        $tel = new \stdClass();
        $tel->nationcode = "".$nationCode;
        $tel->mobile = "".$phoneNumber;
        $data->tel = $tel;
        $data->sig = $this->util->calculateSigForTempl($this->secretkey, $random, $curTime, $phoneNumber);
        $data->tpl_id = $templId;
        $data->params = $params;
        $data->sign = $sign;
        $data->time = $curTime;
        $data->extend = $extend;
        $data->ext = $ext;
        return $this->util->sendCurlPost($wholeUrl, $data);
    }
}
class SmsMultiSender {
    var $url;
    var $accesskey;
    var $secretkey;
    var $util;
    function __construct($accesskey, $secretkey) {
        $this->url = "";
        $this->accesskey =  $accesskey;
        $this->secretkey = $secretkey;
        $this->util = new SmsSenderUtil();
    }
    /**
     * 普通群发,明确指定内容,如果有多个签名,请在内容中以【】的方式添加到信息内容中,否则系统将使用默认签名
     * 【注意】海外短信无群发功能
     * @param int $type 短信类型,0 为普通短信,1 营销短信
     * @param string $nationCode 国家码,如 86 为中国
     * @param string $phoneNumbers 不带国家码的手机号列表
     * @param string $msg 信息内容,必须与申请的模板格式一致,否则将返回错误
     * @param string $extend 扩展码,可填空串
     * @param string $ext 服务端原样返回的参数,可填空串
     * @return string json string { "result": xxxxx, "errmsg": "xxxxxx" ... },被省略的内容参见协议文档
     */
    function send($type, $nationCode, $phoneNumbers, $msg, $extend = "", $ext = "") {
        /* 请求包体
        {
            "tel": [
                {
                    "nationcode": "86",
                    "mobile": "13788888888"
                },
                {
                    "nationcode": "86",
                    "mobile": "13788888889"
                }
            ],
            "type": 0,
            "msg": "你的验证码是1234",
            "sig": "fdba654e05bc0d15796713a1a1a2318c",
            "time": 1479888540,
            "extend": "",
            "ext": ""
        }
        应答包体
        {
            "result": 0,
            "errmsg": "OK",
            "ext": "",
            "detail": [
                {
                    "result": 0,
                    "errmsg": "OK",
                    "mobile": "13788888888",
                    "nationcode": "86",
                    "sid": "xxxxxxx",
                    "fee": 1
                },
                {
                    "result": 0,
                    "errmsg": "OK",
                    "mobile": "13788888889",
                    "nationcode": "86",
                    "sid": "xxxxxxx",
                    "fee": 1
                }
            ]
        }
        */
        $random = $this->util->getRandom();
        $curTime = time();
        $wholeUrl = $this->url . "?accesskey=" . $this->accesskey . "&random=" . $random;
        $data = new \stdClass();
        $data->tel = $this->util->phoneNumbersToArray($nationCode, $phoneNumbers);
        $data->type = $type;
        $data->msg = $msg;
        $data->sig = $this->util->calculateSig($this->secretkey, $random, $curTime, $phoneNumbers);
        $data->time = $curTime;
        $data->extend = $extend;
        $data->ext = $ext;
        return $this->util->sendCurlPost($wholeUrl, $data);
    }
    /**
     * 指定模板群发
     * 【注意】海外短信无群发功能
     * @param string $nationCode 国家码,如 86 为中国
     * @param array $phoneNumbers 不带国家码的手机号列表
     * @param int $templId 模板 id
     * @param array $params 模板参数列表,如模板 {1}...{2}...{3},那么需要带三个参数
     * @param string $sign 签名,如果填空串,系统会使用默认签名
     * @param string $extend 扩展码,可填空串
     * @param string $ext 服务端原样返回的参数,可填空串
     * @return string json string { "result": xxxxx, "errmsg": "xxxxxx" ... },被省略的内容参见协议文档
     */
    function sendWithParam($nationCode, $phoneNumbers, $templId, $params, $sign = "", $extend ="", $ext = "") {
        /* 请求包体
        {
            "tel": [
                {
                    "nationcode": "86",
                    "mobile": "13788888888"
                },
                {
                    "nationcode": "86",
                    "mobile": "13788888889"
                }
            ],
            "sign": "Moduyun",
            "tpl_id": 19,
            "params": [
                "验证码",
                "1234",
                "4"
            ],
            "sig": "fdba654e05bc0d15796713a1a1a2318c",
            "time": 1479888540,
            "extend": "",
            "ext": ""
        }
        应答包体
        {
            "result": 0,
            "errmsg": "OK",
            "ext": "",
            "detail": [
                {
                    "result": 0,
                    "errmsg": "OK",
                    "mobile": "13788888888",
                    "nationcode": "86",
                    "sid": "xxxxxxx",
                    "fee": 1
                },
                {
                    "result": 0,
                    "errmsg": "OK",
                    "mobile": "13788888889",
                    "nationcode": "86",
                    "sid": "xxxxxxx",
                    "fee": 1
                }
            ]
        }
        */
        $random = $this->util->getRandom();
        $curTime = time();
        $wholeUrl = $this->url . "?accesskey=" . $this->accesskey . "&random=" . $random;
        $data = new \stdClass();
        $data->tel = $this->util->phoneNumbersToArray($nationCode, $phoneNumbers);
        $data->sign = $sign;
        $data->tpl_id = $templId;
        $data->params = $params;
        $data->sig = $this->util->calculateSigForTemplAndPhoneNumbers(
            $this->secretkey, $random, $curTime, $phoneNumbers);
        $data->time = $curTime;
        $data->extend = $extend;
        $data->ext = $ext;
        return $this->util->sendCurlPost($wholeUrl, $data);
    }
}

更多,欢迎关注云服务-moduyun平台 官网: