PHP中利用gsm modem发送短信的实例代码(兼容windows和Linux),这个时本人测试过的在windows上绝对能用。
参考了http://rainbird.blog.51cto.com/211214/279201
使用了php_serial.class.php类
附件中为完整代码(包括php_serial.class.php):
<?php
/*
* author: mayu8758(mayu8758@gmail.com) thanks:rainbird <chinakapalink@gmail.com> http://rainbird.blog.51cto.com/211214/279201
* Website:http://blog.opendigest.org , http://www.osedu.net
* date:2010-12-2
* system:Windows Server 2003 , Linux
* php cli:5.2.10
* gsm modem:西门子 MODEM
* 注意:使用php.ini-recommended配置文件改为php.ini,使用php.ini-production将不能发短信。
* 配置文件里的有所内容,没有详细看是哪里的配置导致的问题。
*/
include "php_serial.class.php";
//加载php操作串口的类
$serial = new phpSerial;
//连接USB gas modem
$serial->deviceSet("com1");
$serial->deviceOpen();
//要发送的手机号:1531170xxxx
$phone_sendto = InvertNumbers('861356922XXXX');
//要发送的短信内容
$sms_content = "你好";
/*
*hex2str容易出错,导致发送中文乱码
*"晚上好123"的正确转码后的内容为:665A4E0A597D003100320033
*可以和自己的转码结果对比,验证转码是否有问题。
*/
$message = hex2str($sms_content);
$mess = "11000D91".$phone_sendto."000800".sprintf("%02X",strlen($message)/2).$message;
$serial->sendMessage("at+cmgf=0".chr(13));
$serial->sendMessage("at+cmgs=".sprintf("%d",strlen($mess)/2).chr(13));
//不加短信中心号码
$serial->sendMessage('00'.$mess.chr(26));
//加短信中心号码
//$phone_center = InvertNumbers('8613800100500');
//$mess_ll = "0891".$phone_center.$mess;
//$serial->sendMessage($mess_ll.chr(26));
//用完了就关掉,有始有终好习惯
$serial->deviceClose();
//将utf8的短信转成ucs2格式
function hex2str($str) {
//本转码函数在Windows和Linux下都正常运行。因为linux系统和windows系统,对unicode处理的时候,正好是高低位相反。
$hexstring=iconv("UTF-8", "UCS-2", $str);
$str = '';
if(PHP_OS == "WINNT"){//如果操作系统是winnt时的转码操作
for($i=0; $i<strlen($hexstring)/2; $i++){
$temp_str = "";
$temp_str .= sprintf("%02X",ord(substr($hexstring,$i*2+1,1)));
$temp_str = sprintf("%02X",ord(substr($hexstring,$i*2,1))) . $temp_str;
$str .= $temp_str;
}
}
if(PHP_OS == "Linux"){ //如果操作系统是Linux时的转码操作,这里
for($i=0; $i<strlen($hexstring)/2; $i++){
$str .= sprintf("%02X",ord(substr($hexstring,$i*2+1,1)));
$str .= sprintf("%02X",ord(substr($hexstring,$i*2,1)));
}
}
return $str;
}
//手机号翻转,pdu格式要求
function InvertNumbers($msisdn) {
$len = strlen($msisdn);
if ( 0 != fmod($len, 2) ) {
$msisdn .= "F";
$len = $len + 1;
}
for ($i=0; $i<$len; $i+=2) {
$t = $msisdn[$i];
$msisdn[$i] = $msisdn[$i+1];
$msisdn[$i+1] = $t;
}
return $msisdn;
}
?>
完整代码:sendsmswithphp.rar
转载于:https://blog.51cto.com/sa123abc/509750