返回基于PHP实现......登陆

基于PHP实现短信验证码接口

巴扎黑2016-12-29 11:36:571810

本文分步骤给大家讲解了短信验证码接口(容联运通讯)实现代码,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧。

自己也是刚刚研究,希望对也在研究的伙伴有帮助。

步骤:

1、登录荣联运通讯注册获取ACCOUNT SID、AUTH TOKEN、Rest URL(生产)、AppID(默认);

2、注册测试用手机号码(先注册测试号码方可使用);

3、下载demo示例,并将代码放到项目中(最好单独建文件夹存储)。

代码区:

一、新建test.app.php(测试用控制器)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

<?php

/*

* 短信接口测试

*/

class TestApp extends ShoppingbaseApp{

public function index(){

$this->display('test.html');

}

public function get_info()

{

include_once(ROOT_PATH.'/includes/rly_message/rest.app.php');//引入模板文件

//主帐号,对应开官网发者主账号下的 ACCOUNT SID

$accountSid '';

//主帐号令牌,对应官网开发者主账号下的 AUTH TOKEN

$accountToken '';

//应用Id,在官网应用列表中点击应用,对应应用详情中的APP ID

//在开发调试的时候,可以使用官网自动为您分配的测试Demo的APP ID

$appId ='';

//请求地址

//沙盒环境(用于应用开发调试):sandboxapp.cloopen.com

//生产环境(用户应用上线使用):app.cloopen.com

$serverIP ='app.cloopen.com';

//请求端口,生产环境和沙盒环境一致

$serverPort ='8883';

//REST版本号,在官网文档REST介绍中获得。

$softVersion ='2013-12-26';

//global $accountSid,$accountToken,$appId,$serverIP,$serverPort,$softVersion;

$phone_mob = isset($_GET['phone_mob']) ? $_GET['phone_mob'] : '';

if($phone_mob){

$this->sendTemplateSMS($phone_mob,array('3519','5'),"1",$accountSid,$accountToken,$appId,$serverIP,$serverPort,$softVersion);//手机号码,替换内容数组,模板ID

}

}

/**

* 发送模板短信

* @param to 手机号码集合,用英文逗号分开

* @param datas 内容数据 格式为数组 例如:array('Marry','Alon'),如不需替换请填 null

* @param $tempId 模板Id,测试应用和未上线应用使用测试模板请填写1,正式应用上线后填写已申请审核通过的模板ID

*/

public function sendTemplateSMS($to,$datas,$tempId,$accountSid,$accountToken,$appId,$serverIP,$serverPort,$softVersion)

{

// 初始化REST SDK

$rest new RestApp($serverIP,$serverPort,$softVersion);

$rest->setAccount($accountSid,$accountToken);

$rest->setAppId($appId);

// 发送模板短信

echo "Sending TemplateSMS to $to <br/>";

$result $rest->sendTemplateSMS($to,$datas,$tempId);

if($result == NULL ) {

echo "result error!";

exit();

}

if($result->statusCode!=0) {

echo "error code :" $result->statusCode . "<br>";

echo "error msg :" $result->statusMsg . "<br>";

//TODO 添加错误处理逻辑

}else{

echo "Sendind TemplateSMS success!<br/>";

// 获取返回信息

$smsmessage $result->TemplateSMS;

echo "dateCreated:".$smsmessage->dateCreated."<br/>";

echo "smsMessageSid:".$smsmessage->smsMessageSid."<br/>";

//TODO 添加成功处理逻辑

}

}

}

二、模板文件(rest.app.php可根据自己使用的框架重新命名,也可直接使用demo原先的名字)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

<?php

class RestApp {

private $AccountSid ;

private $AccountToken ;

private $AppId ;

private $ServerIP// ='app.cloopen.com'

private $ServerPort //='8883'

private $SoftVersion // ='2013-12-26'

private $Batch//时间戳

private $BodyType "xml";//包体格式,可填值:json 、xml

private $enabeLog = true; //日志开关。可填值:true、

private $Filename="./log.txt"//日志文件

private $Handle;

function __construct($ServerIP,$ServerPort,$SoftVersion)

{

$this->RestApp($ServerIP,$ServerPort,$SoftVersion);

}

function RestApp($ServerIP,$ServerPort,$SoftVersion)

{

$this->Batch = date("YmdHis");

$this->ServerIP = $ServerIP;

$this->ServerPort = $ServerPort;

$this->SoftVersion = $SoftVersion;

$this->Handle = fopen($this->Filename, 'a');

}

/**

* 设置主帐号

*

* @param AccountSid 主帐号

* @param AccountToken 主帐号Token

*/

function setAccount($AccountSid,$AccountToken){

$this->AccountSid = $AccountSid;

$this->AccountToken = $AccountToken;

}

/**

* 设置应用ID

* @param AppId 应用ID

*/

function setAppId($AppId){

$this->AppId = $AppId;

}

/**

* 打印日志

*

* @param log 日志内容

*/

function showlog($log){

if($this->enabeLog){

fwrite($this->Handle,$log."\n");

}

}

/**

* 发起HTTPS请求

*/

function curl_post($url,$data,$header,$post=1)

{

//初始化curl

$ch = curl_init();

//参数设置

$res= curl_setopt($ch, CURLOPT_URL,$url);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_POST, $post);

if($post)

{

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

}

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_HTTPHEADER,$header);

$result = curl_exec($ch);

//连接失败

if($result == FALSE){

if($this->BodyType=='json'){

$result "{\"statusCode\":\"172001\",\"statusMsg\":\"网络错误\"}";

else {

$result "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Response><statusCode>172001</statusCode><statusMsg>网络错误</statusMsg></Response>";

}

}

curl_close($ch);

return $result;

}

/**

* 发送模板短信

* @param to 短信接收彿手机号码集合,用英文逗号分开

* @param datas 内容数据

* @param $tempId 模板Id

*/

function sendTemplateSMS($to,$datas,$tempId)

{

//主帐号鉴权信息验证,对必选参数进行判空。

//$auth=$this->accAuth();

// if($auth!=""){

// return $auth;

// }

// 拼接请求包体

if($this->BodyType=="json"){

$data="";

for($i=0;$i<count($datas);$i++){

$data $data"'".$datas[$i]."',";

}

$body"{'to':'$to','templateId':'$tempId','appId':'$this->AppId','datas':[".$data."]}";

}else{

$data="";

for($i=0;$i<count($datas);$i++){

$data $data"<data>".$datas[$i]."</data>";

}

$body="<TemplateSMS>

<to>$to</to>

<appId>$this->AppId</appId>

<templateId>$tempId</templateId>

<datas>".$data."</datas>

</TemplateSMS>";

}

$this->showlog("request body = ".$body);

// 大写的sig参数

$sig strtoupper(md5($this->AccountSid . $this->AccountToken . $this->Batch));

// 生成请求URL

$url="https://$this->ServerIP:$this->ServerPort/$this->SoftVersion/Accounts/$this->AccountSid/SMS/TemplateSMS?sig=$sig";

$this->showlog("request url = ".$url);

// 生成授权:主帐户Id + 英文冒号 + 时间戳。

$authen base64_encode($this->AccountSid . ":" $this->Batch);

// 生成包头

$header array("Accept:application/$this->BodyType","Content-Type:application/$this->BodyType;charset=utf-8","Authorization:$authen");

// 发送请求

$result $this->curl_post($url,$body,$header);

$this->showlog("response body = ".$result);

if($this->BodyType=="json"){//JSON格式

$datas=json_decode($result);

}else//xml格式

$datas = simplexml_load_string(trim($result," \t\n\r"));

}

// if($datas == FALSE){

// $datas = new stdClass();

// $datas->statusCode = '172003';

// $datas->statusMsg = '返回包体错误';

// }

//重新装填数据

if($datas->statusCode==0){

if($this->BodyType=="json"){

$datas->TemplateSMS =$datas->templateSMS;

unset($datas->templateSMS);

}

}

return $datas;

}

/**

* 主帐号鉴权

*/

function accAuth()

{

if($this->ServerIP==""){

$data new stdClass();

$data->statusCode = '172004';

$data->statusMsg = 'IP为空';

return $data;

}

if($this->ServerPort<=0){

$data new stdClass();

$data->statusCode = '172005';

$data->statusMsg = '端口错误(小于等于0)';

return $data;

}

if($this->SoftVersion==""){

$data new stdClass();

$data->statusCode = '172013';

$data->statusMsg = '版本号为空';

return $data;

}

if($this->AccountSid==""){

$data new stdClass();

$data->statusCode = '172006';

$data->statusMsg = '主帐号为空';

return $data;

}

if($this->AccountToken==""){

$data new stdClass();

$data->statusCode = '172007';

$data->statusMsg = '主帐号令牌为空';

return $data;

}

if($this->AppId==""){

$data new stdClass();

$data->statusCode = '172012';

$data->statusMsg = '应用ID为空';

return $data;

}

}

}

?>

三、前台模板代码(test.html)

1

2

3

4

5

6

7

<div style="height:100px;border:1px solid gray;text-align:center;padding-top:20px;">

<form action="" method="post">

请输入手机号码:<input type="text" name="phone_mob" ><input type="button" name="btn" value="点击获取验证码"><br />

输入验证码:<input type="text" name="yzm" value=""><br />

<input type="submit" name="sbt" value="提交">

</form>

</div>

四、js代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<script type="text/javascript">

$(function(){

$('input[name=btn]').on('click',function(){

var phone_mob = $('input[name=phone_mob]').val();

$.ajax({

type: "GET",

url: "index.php?app=test&act=get_info",//请求后台的URL地址

dataType: "json",

data:{'phone_mob' : phone_mob},

success:function(data){

if(data.done && data.retval)

{

//console.log(data.retval);

alert('成功!');

}

}

});

});

});

</script>

更多关于PHP实现短信验证码接口请关注PHP中文网(www.php.cn)其它文章!   

相关文章:

短信验证码接口(容联运通讯)

PHP集成发送手机短信验证码、语音验证码接口函数及使用方法

天翼开放平台免费短信验证码接口使用实例

最新手记推荐

• 用composer安装thinkphp框架的步骤• 省市区接口说明• 用thinkphp,后台新增栏目• 管理员添加编辑删除• 管理员添加编辑删除

全部回复(0)我要回复

暂无评论~
  • 取消回复发送