123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- <?php
- defined('BASEPATH') OR exit('No direct script access allowed');
- if (!function_exists('send_by_modem')) {
- /**
- * 使用短信猫发送短信
- * @param $config 配置
- * @param $mobile 接收号码
- * @param $content 发送内容
- * @return bool 是否发送成功
- */
- function send_by_modem($config, $mobile, $content)
- {
- $max_len = 280;
- $serial = new Serial();
- if(!$serial->deviceSet("COM" . $config['serial_port'])){
- return false;
- }else {
- $serial->confBaudRate($config['baud_rate']);
- if ($serial->deviceOpen()) {
- $phone_center = InvertNumbers("86" . $config['sms_cneter_num']);
- $phone_sendto = InvertNumbers("86" . $mobile);
- $pdu_text = Ucs2Code($content);
- do {
- $pdu_len = strlen($pdu_text);
- if ($pdu_len > $max_len) {
- $pdu_text1 = substr($pdu_text, 0, $max_len);
- $pdu_text = substr($pdu_text, $max_len, $pdu_len - $max_len);
- } else {
- $pdu_text1 = $pdu_text;
- $pdu_text = "";
- }
- $mess = "11000D91" . $phone_sendto . "000800" . sprintf("%02X", strlen($pdu_text1) / 2) . $pdu_text1;
- $serial->sendMessage("AT+CMGF=0" . chr(13),0.5);
- $cmd = "AT+CMGS=" . sprintf("%d", strlen($mess) / 2) . chr(13);
- $serial->sendMessage($cmd);
- $mess_ll = "0891" . $phone_center . $mess;
- $serial->sendMessage($mess_ll . chr(26), 0.5);
- } while ($pdu_text != "");
- $serial->deviceClose();
- return true;
- } else {
- return false;
- }
- }
- }
- }
- /***
- * @Method Ucs2Code UCS2编码
- * @Param $str 输入字符串
- * @Param $encod 输入字符串编码类型(UTF-8,GB2312,GBK)
- * @Return 返回编码后的字符串
- */
- function Ucs2Code($str, $encode = "UTF-8")
- {
- $jumpbit = strtoupper($encode) == 'GB2312' ? 2 : 3;//跳转位数
- $strlen = strlen($str);//字符串长度
- $pos = 0;//位置
- $buffer = array();
- for ($pos = 0; $pos < $strlen;) {
- if (ord(substr($str, $pos, 1)) >= 0xa1) {//0xa1(161)汉字编码开始
- $tmpChar = substr($str, $pos, $jumpbit);
- $pos += $jumpbit;
- } else {
- $tmpChar = substr($str, $pos, 1);
- ++$pos;
- }
- $buffer[] = bin2hex(iconv("UTF-8", "UCS-2", $tmpChar));
- }
- return strtoupper(join("", $buffer));
- }
- /***
- * @Method unUcs2Code UCS2解码
- * @Param $str 输入字符串
- * @Param $encod 输入字符串编码类型(UTF-8,GB2312,GBK)
- * @Return 返回解码后的字符串
- */
- function unUcs2Code($str, $encode = "UTF-8")
- {
- $strlen = strlen($str);
- $step = 4;
- $buffer = array();
- for ($i = 0; $i < $strlen; $i += $step) {
- $buffer[] = iconv("UCS-2", $encode, pack("H4", substr($str, $i, $step)));
- }
- return join("", $buffer);
- }
- /**
- * 号码PDU翻转
- * @param $msisdn
- * @return string
- */
- 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;
- }
|