搜索
首页后端开发php教程利用阔乐通信实现PHP网页收发短信

利用宽乐通信实现PHP网页收发短信

一直想为网站提供收发短信的功能。

最近学习了一下宽乐通信,  它是电信提供的一个服务,是华为公司开发的,以WebService方式提供了收发短信的开发接口, 用PHP调用这个接口就可以收发短信了。

使用宽乐通信前,要先开通一个帐号、密码(在电信公司开通,帐号即电话号码,开通时要声明是WebService方式的,否则不能用)

发短信是需要收费的,每条8分,接收免费。


宽乐通信有一个接口文档,用于二次开发的。在百度搜索 ”宽乐通信接口“ 即可找到


宽乐通信提供两种接口:


一种是SDK方式,即以Windows COM组件方式提供,用于编写Windows客户端程序

另一种是WebService方式,可用于网站开发。

所谓WebService,就是Web服务,是一种网络函数,可以看作另一个网站给你提供的函数,是一个网站调用另一个网站的功能的一种标准接口,具体来说,如果要调用其它网站的功能,向指定的URL发出一个POST请求,请求内容中包含的函数名和参数(XML格式), 响应结果中是函数返回值。  要详细了解WebService的数据格式, 具体看相关文档。


PHP5中提供了两个类  SoapClient (客户端, 使用WebService)和 SoapServer(服务器,提供WebService),可以很容易地调用WebService.


宽乐通信接口文档很长,简单讲一下收发短信的原理:

宽乐通信提供了一系列接口,其中与短信相关的有: Register, SendSMS两个接口


发短信的过程:

1, 首先通过WebService方式调用  Register 接口中的 函数  getRandom(), 取得宽乐通信平台下发的一个随机数rand

2, 然后调用 Register 接口中的 setCallBackAddr()函数实现登录

       函数原型:String setCallBackAddr(String uc, String pw, String rand, String url);

        参数: uc 是帐号

                     pw 是getRandom获取的随机数 rand+UC密码+UC密码 经过MD5加密后的字符串 (就是把rand与密码字符串两次相连后,进行MD5加密)

                     rand 是getRandom获取的随机数

                     url 是回调函数的url (这个回调函数是在接收短信时用到的,在这个URL上你要先实现一个WebService, 当你的宽乐通信帐号收到短信,宽乐通信平台将会调用你的WebService)

         返回值是一个连接ID (connID), 这个ID用于后续发短信


3,然后,就可以通过调用 SendSMS 接口中的 sendSMS()函数发送短信了

       函数原型:String sendSMS(String uc, String pw, String rand, String callee[], String isreturn, String cont, int msgid, String connID);

       参数: uc 是帐号

                    pw 是getRandom获取的随机数 rand+UC密码+UC密码 经过MD5加密后的字符串 (就是把rand与密码字符串两次相连后,进行MD5加密)

                    rand 是getRandom获取的随机数

                    callee 是接收短信的号码,是一个字符串数组,可以放多个号码

                    isreturn 是否需要短信回执,这是宽乐通信很强的一个功能,当接收方已接收到短信,则宽乐通信平台会发送一个回执给短信发送方

                     cont  是短信内容,中文必须是gbk编码, 还要再进行base64编码

                    msgid 是短信的唯一编号, 你自己编的,收到短信回执中有这个msgid编号,这样就可以知道是哪条短信被接收了

                     connID 就是setCallBackAddr()函数返回的连接ID


收短信的过程:

调用 setCallBackAddr() 函数时要提供一个回调函数的url , 把这个URL指向你的网站,在这个URL上你要先实现一个WebService, 提供三个函数:echoOfSendSMS(), recvSMS(), NotifyStatus().

当收到短信时,宽乐通信平台会调用你指定的URL中的recvSMS()函数

当收到短信回执时,宽乐通信平台会调用你指定的URL中的echoOfSendSMS()函数

当状态变化时,宽乐通信平台会调用你指定的URL中的NotifyStatus()函数

你在自已的网站通过编写这三个webservice函数, 就可以实现接收短信了。


函数原型:String recvSMS(String caller, String time, String cont, String ucNum);

       参数: caller是发送短信的号码,cont是短信内容(需要base64解码),  ucNum是短信接受者号码


函数原型:void echoOfSendSMS(String ucNum, String cee, int msgid, int res, String recvt);

函数原型:void NotifyStatus(int eventID, String sessionID,int res,String para1);


原理讲完了,看一下PHP代码的实现:


开发语言:PHP 5.X


发送短信的代码如下:


$uc="02087XXXX1";    //宽乐通信帐号$pass="uu1XXXX56";   //宽乐通信密码$callBackURL='http://www.some.com/receive_sms.php'; //回调URL,如果不想接收短信,则这个URL可以随便写$urlRegister="http://202.105.212.146:8080/jboss-net/services/Register?wsdl"; //Register接口URL$client = new SoapClient($urlRegister); //生成一个SoapClient对象, 使用Register接口$rand = $client->__call("getRandom", array()); //调用getRandom()函数,取得随机数$pw = md5($rand.$pass.$pass); //计算PW值,$connID = $client->__call("setCallBackAddr", array($uc,$pw,$rand,$callBackURL));//调用setCallBackAddr()函数,取得连接IDif ($connID__call("sendSMS", array($uc,$pw,$rand,$callee,$needReceipt,$content,$msgId,$connID));if ($result==0) {  //如果返回值为0,则发送成功  print "send OK";} else {  print "send error, error code=".$result; //否则,返回值即是错误码}




程序注释已经很清晰了,补充说明:上述程序中的帐号、密码要更改为你的实际帐号密码



下面是,接收短信的php代码, 文件: receive_sms.php


/** * 接收短信回执 * 函数原型:void echoOfSendSMS(String ucNum, String cee, int msgid, int res, String recvt); * @param string $ucNum 发送方号码 * @param string $cee 接收方号码 * @param int $msgid 短消息编号,用于客户端匹配请求消息 * @param int $res 回执的结果(=1表示接收方成功接收短信, -1为系统异常;-12:系统超时;-92:短信无法送达对方) * @param string $recvt 短消息时间 * @return 无返回值 */function echoOfSendSMS($ucNum,$cee,$msgid,$res,$recvt){    $filename = "echo.txt";    $data = "ucNum=".$ucNum." cee=".$cee." msgid=".$msgid." res=".$res." recvt=".$recvt."\r\n";    file_put_contents($filename, $data, FILE_APPEND);}/** * 接收短信 * 函数原型:String recvSMS(String caller, String time, String cont, String ucNum); * @param string $caller 短信的发送者号码 * @param string $time 短信发送时间 * @param string $cont 短信内容(需要对短信内容进行BASE64解码) * @param string $ucNum 短信接受者号码(接收短信的UC号码) * @return string =0:成功返回,  "http://www.some.com/receive_sms.php"));//这个uri要写本php文件所在的uri  //注册三个函数$server->addFunction(array("echoOfSendSMS","recvSMS","NotifyStatus"));//启动soap server$server->handle();




程序注释很清晰,就是定义三个函数,生成一个WebService服务
程序中接收到短信后,只是存盘。你可以修改recvSMS()函数,增加自己想要的功能,比如:写数据库、回复短信等


为简化发送短信的过程,我编写了一个Sms类,对发短信过程进行了封装,使用者不需要懂宽乐通信接口,只要有宽乐通信帐号密码,发送短信只需要三句,例如:


$sms = new Sms(); //产生一个Sms类的对象if ($sms->login($account, $password))   //登录    $sms->send("139876XXXXX", "hello,sms"); //发短信



够简单了吧。 

Sms类的源码文件 class.Sms.php 及接收短信的源码 receive_sms.php 可以在我的资源中下载,分享给大家


网站能收发短信后,就可以实现很多功能,比如:发送验证码、有人登录网站时可以发短信通知到你的手机、发短信就可以触发网站运行。
网站因此就活动起来了!!!








声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
PHP和Python:解释了不同的范例PHP和Python:解释了不同的范例Apr 18, 2025 am 12:26 AM

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP和Python:深入了解他们的历史PHP和Python:深入了解他们的历史Apr 18, 2025 am 12:25 AM

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

在PHP和Python之间进行选择:指南在PHP和Python之间进行选择:指南Apr 18, 2025 am 12:24 AM

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

PHP和框架:现代化语言PHP和框架:现代化语言Apr 18, 2025 am 12:14 AM

PHP在现代化进程中仍然重要,因为它支持大量网站和应用,并通过框架适应开发需求。1.PHP7提升了性能并引入了新功能。2.现代框架如Laravel、Symfony和CodeIgniter简化开发,提高代码质量。3.性能优化和最佳实践进一步提升应用效率。

PHP的影响:网络开发及以后PHP的影响:网络开发及以后Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型?PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型?Apr 17, 2025 am 12:25 AM

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。

PHP如何处理对象克隆(克隆关键字)和__clone魔法方法?PHP如何处理对象克隆(克隆关键字)和__clone魔法方法?Apr 17, 2025 am 12:24 AM

PHP中使用clone关键字创建对象副本,并通过\_\_clone魔法方法定制克隆行为。1.使用clone关键字进行浅拷贝,克隆对象的属性但不克隆对象属性内的对象。2.通过\_\_clone方法可以深拷贝嵌套对象,避免浅拷贝问题。3.注意避免克隆中的循环引用和性能问题,优化克隆操作以提高效率。

PHP与Python:用例和应用程序PHP与Python:用例和应用程序Apr 17, 2025 am 12:23 AM

PHP适用于Web开发和内容管理系统,Python适合数据科学、机器学习和自动化脚本。1.PHP在构建快速、可扩展的网站和应用程序方面表现出色,常用于WordPress等CMS。2.Python在数据科学和机器学习领域表现卓越,拥有丰富的库如NumPy和TensorFlow。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前By尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具