destoon 短信发送函数及短信接口修改

// $DT在common.inc.php中定义, $CACHE = cache_read('module.php'); $DT = $CACHE['dt'];  从缓存里读取网站配置信息。

//$db 数据库类,$DT 全局配置,$DT['sms'] 开启手机短信,$DT_TIME系统时间,$DT_IP 当前ip地址,$_username当前用户

//DT_CLOUD_UID  DT_CLOUD_KEY 在common.inc.php 中定义 

//define('DT_CLOUD_UID', $CFG['cloud_uid']);   //$CFG 加载根目录下 config.inc.php ,所以短信发送接口用户名和密码在这里设置。新版dt在 后台系统设置-》网站设置-》云服务 里设置。

//define('DT_CLOUD_KEY', $CFG['cloud_key']);  

//参数:$mobile手机号,$message发送内容,$word 字数,$time 时间function send_sms($mobile, $message, $word = 0, $time = 0) {global $db, $DT, $DT_TIME, $DT_IP, $_username;    //开启短信,设置了用户名密码,手机号合法,内容给不低于5个字符。if(!$DT['sms'] || !DT_CLOUD_UID || !DT_CLOUD_KEY || !is_mobile($mobile) || strlen($message) < 5) return false;    $word or $word = word_count($message);     //若没有指定字数,则通过函数word_count计算字数 ,这个函数涉及mb_strlen,strlen的区别。$sms_message = convert($message, DT_CHARSET, 'UTF-8');   $data = 'sms_uid='.DT_CLOUD_UID.'&sms_key='.md5(DT_CLOUD_KEY.'|'.$mobile.'|'.md5  ($sms_message)).'&sms_charset='.DT_CHARSET.'&sms_mobile='.$mobile.'&sms_message='.rawurlencode($sms_message).'&sms_time='.$time;$header = "POST /send.php HTTP/1.0\r\n";$header .= "Accept: */*\r\n";$header .= "Content-Type: application/x-www-form-urlencoded\r\n";$header .= "Content-Length: ".strlen($data)."\r\n\r\n";$fp = function_exists('fsockopen') ? fsockopen('sms.destoon.com', 8820) : stream_socket_client('sms.destoon.com:8820');$code = '';if($fp) {fputs($fp, $header.$data);while(!feof($fp)) {$code .= fgets($fp, 1024);}fclose($fp);if($code && strpos($code, 'destoon_sms_code=') !== false) {$code = explode('destoon_sms_code=', $code);$code = $code[1];} else {$code = 'Can Not Connect SMS Server';}} else {$code = 'Can Not Connect SMS Server';}//记录发送记录$db->query("INSERT INTO {&#36;db->pre}sms (mobile,message,word,editor,sendtime,code) VALUES ('$mobile','$message','$word','$_username','$DT_TIME','$code')");return $code;
}
View Code

//mb_strlen,strlen的区别 http://developer.51cto.com/art/201105/263103.htm 

function word_count($string) {if(function_exists('mb_strlen')) return mb_strlen($string, DT_CHARSET);$string = convert($string, DT_CHARSET, 'gbk');$length = strlen($string);$count = 0;for($i = 0; $i < $length; $i++) {$t = ord($string[$i]);if($t > 127) $i++;$count++;}return $count;
}
View Code

 

需要注意的是,mb_strlen并不是PHP核心函数,使用前需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函 数的问题。

 

修改系统默认短信端口

global.func.php   send_sms函数改成

 

/*** 通过CURL发送HTTP请求* @param string $url  //请求URL* @param array $postFields //请求参数 * @return mixed*/function curlPost($url='',$postFields){$postFields = http_build_query($postFields);$ch = curl_init(); curl_setopt ( $ch, CURLOPT_POST, 1 );curl_setopt ( $ch, CURLOPT_HEADER, 0 );curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );curl_setopt ( $ch, CURLOPT_URL, $url );curl_setopt ( $ch, CURLOPT_POSTFIELDS, $postFields );$result = curl_exec ( $ch );curl_close ( $ch );return $result;}/*** 发送短信** @param string $mobile 手机号码* @param string $msg 短信内容* @param string $needstatus 是否需要状态报告* @param string $product 产品id,可选* @param string $extno   扩展码,可选*/function send_sms($mobile,$msg,$word = 0,$time = 0,$needstatus = 'false',$extno = '') { global $db, $DT, $DT_TIME, $DT_IP, $_username;if(!$DT['sms'] || !DT_CLOUD_UID || !DT_CLOUD_KEY || !is_mobile($mobile) || strlen($msg) <3) return false;$word or $word = word_count($message);//创蓝接口参数$postArr = array ('account' => DT_CLOUD_UID,'pswd' => DT_CLOUD_KEY,'msg' => $msg,'mobile' => $mobile,'needstatus' => $needstatus,'extno' => $extno);$url="http://222.73.117.156/msg/HttpBatchSendSM";$result =curlPost($url, $postArr);if($result){$arr=explode(',',$result);$result=$arr[1]==0?1:$arr[1];   //这个接口成功返回0  返回大于1代表错误
  }$db->query("INSERT INTO {&#36;db->pre}sms (mobile,message,word,editor,sendtime,code) VALUES ('$mobile','$message','$word','$_username','$DT_TIME','$result')");return $result;}
View Code

 

转载于:https://www.cnblogs.com/djiz/p/6414255.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓界面组件-文本框

前面三篇文章本质上是围绕着View类进行的。View是安卓UI的基础类&#xff0c;我们的安卓开发“千里之行”是从View开始的。 安卓界面UI有大量的组件&#xff0c;组件的继承和间接继承于View。有一类组件很基本&#xff0c;这就是TextView文本框&#xff0c;作用是显示文本。在T…

redis linux 运行依赖,在Ubuntu系统下安装Redis Desktop Manager的方法

以下为你介绍在Ubuntu16.04系统下安装Redis可视化工具Redis Desktop Manager。不管是哪个Redis Desktop Manager版本&#xff0c;都可以采用下面的安装方式进行。Redis Desktop Manager安装方法1.首先在终端中启动redis服务执行命令&#xff1a;sudo service redis start 与 ps…

bzoj4631

4631: 踩气球 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 260 Solved: 133[Submit][Status][Discuss]Description 六一儿童节到了&#xff0c; SHUXK 被迫陪着M个熊孩子玩一个无聊的游戏&#xff1a;有N个盒子从左到右排成一排&#xff0c;第i个盒子里装着Ai个气球。SH…

hpcp5225设置linux网络,惠普HP color laserjet CP5225打印机驱动

软件标签&#xff1a;惠普CP5225驱动是为同名打印机推出的驱动程序&#xff0c;维持着打印机的正常工作&#xff0c;小编提供了驱动下载&#xff0c;若是你的惠普CP5225打印机在使用过程中出现不能打印或者无法被电脑识别等问题&#xff0c;快来本站下载该驱动来解决问题吧!安装…

Dubbo底层采用Socket进行通信详解

由于Dubbo底层采用Socket进行通信&#xff0c;自己对通信理理论也不是很清楚&#xff0c;所以顺便把通信的知识也学习一下。 n 通信理论 计算机与外界的信息交换称为通信。基本的通信方法有并行通信和串行通信两种。 1.一组信息&#xff08;通常是字节&#xff09;的各位数据被…

linux 网络协议栈变化,ZZ Linux网络协议栈学习

最近学习linux内核网络协议栈&#xff0c;把数据包接收流程大致理了一下&#xff0c;前面也看了瀚海书香兄的总结&#xff0c;感觉总结的比我精炼&#xff0c;抓住了主干&#xff0c;是一目了然的那种我的这篇本来是自己看得&#xff0c;因此把我自己学习中一些遇到的问题写了出…

linux安装各种文件格式,Embeded linux中的各类文件系统

Cramfs&#xff1a;(优点&#xff1a;只读&#xff0c;目的&#xff1a;不可更改文件、防入侵)1.下载cramfs-1.1源码工具http://files.cnblogs.com/files/pokerface/cramfs-1.1.tar.gz2.解压tar xvzf cramfs-1.1.tar.gz -C /home/liuzhengwu/tools3.编译make4.得到COPYING cra…

初始Angularjs2

一、为什么使用Angularjs2 Angularjs2全面使用了模块化、组件化的思想&#xff0c;它有如下的特性&#xff1a; 1&#xff09;模块化 在ng2的应用中&#xff0c;所有的系统功能都是模块化的&#xff0c;开发者只需要按需导入模块化的好处在于可以当应用加载时&#xff0c;是按需…

linux中输入ls出现蓝色的点,linux上ls的蓝色太深,怎么处理

linux下ls的蓝色太深&#xff0c;怎么办&#xff1f;在linux下使用ls命令时&#xff0c;会将目录以蓝色显示。在某些显示器上&#xff0c;黑底蓝字&#xff0c;看起来相当费力&#xff0c;以至于我有时候不得不使用dir命令&#xff0c;全部显示成白色。先看一个图&#xff1a;看…

Discuz常见小问题-如何取消登陆发帖验证码

1 正常情况下&#xff0c;用户点击登录之后&#xff0c;需要填写验证码 2 进入后台&#xff0c;点击防灌水&#xff0c;验证设置&#xff0c;然后下面的各个选项可以设置是否启用验证码。 转载于:https://www.cnblogs.com/acetaohai123/p/6504754.html

RC电路的充放过程C语言实现,RC串联电路的暂态过程基本原理介绍

RC串联电路的特点&#xff1a;由于有电容存在不能流过直流电流&#xff0c;电阻和电容都对电流存在阻碍作用&#xff0c;其总阻抗由电阻和容抗确定&#xff0c;总阻抗随频率变化而变化。RC 串联有一个转折频率&#xff1a;f01/2πR1C1当输入信号频率大于f0 时&#xff0c;整个 …

Java 导出Excel

前台代码&#xff1a; View Code?12345678910111213141516171819202122232425262728293031323334353637383940414243444546<button class"btn btn-sm btn-success" type"submit" id"detailEp" onclick"return exportCheck(true);"…

android 键盘 自动消失,android 软键盘 回到键 消失事件 监听

弹出输入法 时 隐藏了 ‘底部状态栏’ 在按 物理 返回键 后&#xff0c; 软键盘消失后 恢复 ‘底部状态栏’public class ImageViewCareIME extends ImageView{public ImageViewCareIME(Context context){super(context);// TODO Auto-generated constructor stub}public stati…

android 开机动画尺寸,Android开机Logo动画制作

开机Logo制作1.准备Logo图片准备一张符合尺寸要求(例如&#xff1a;1280x720)的图片&#xff0c;最好是png或jgp。2.用Hitool工具制作镜像文件海思芯片使用的是Hitool工具&#xff0c;打开Hitool&#xff0c;选择HiFastplay&#xff0c;选择右下角的Logo设置&#xff0c;添加图…

照片边框 app android,Screener App-一手搞定将手机截图加上外框

记得几年前想要在Android手机上截图&#xff0c;得安装类似截图软件与Root 才行&#xff0c;层层的关卡还真不是一般使用者能处理的&#xff0c;如今Android手机大部分都已内置截图功能&#xff0c;对于我撰写App文章来说帮助很大&#xff0c;但有时想要表现哪台手机外框画面时…

JAVA补充-抽象类

1.抽象类基本概念 1 package com.neusoft.abstracted;2 /**3 * 抽象类&#xff1a;在class之前加abstract关键字4 * 抽象方法语法&#xff1a; 修饰符 abstract 返回值类型 方法名&#xff08;形参列表&#xff09;&#xff1b;5 * 1.抽象方法的返回值前面有abstract关键…

android谷歌补丁日期,久违的Android更新补丁:多年前的坑,谷歌终于给填上了

3月5日消息&#xff0c;近日谷歌在最新的Android安全公告中称&#xff0c;当前更新的补丁CVE-2020-0069已修复联发科芯片设备的安全漏洞。据了解&#xff0c;联发科曾在2016年左右确认&#xff0c;部分搭载联发科芯片的Android设备存在安全性问题&#xff0c;所涉及的设备数量达…

android个人微信支付,Android之微信支付

Android开发中&#xff0c;大多数电商APP都会有支付这么模块&#xff0c;此博客就讲一下微信支付&#xff0c;代码不多&#xff0c;很简单就可以完成&#xff0c;支付宝支付请看博客 Android支付之支付宝封装类先来看看效果图微信支付首先要去微信开发平台申请&#xff0c;得到…

华为鸿蒙山海,华为包圆了整部《山海经》,鸿蒙是何意?还有青龙白虎朱雀玄武?...

华为已经申请注册“华为鸿蒙”商标并标注该商品可用于操作系统程序鸿蒙一个自带书香气的名字一听就是文化人&#xff01;一听就是中华文化传承人&#xff01;那么鸿蒙是啥意思鸿蒙就是一团气不是普通的气体传说盘古在昆仑山开天辟地之前世界是一团混沌的元气这种自然的元气叫做…

ASP.NET MVC5使用Area区域

转载&#xff1a;http://www.lanhusoft.com/Article/217.html 在大型的ASP.NET mvc5项目中一般都有许多个功能模块&#xff0c;这些功能模块可以用Area&#xff08;中文翻译为区域&#xff09;把它们分离开来&#xff0c;比如&#xff1a;Admin&#xff0c;Customer&#xff0c…