socket接入中国移动短信代码

/*

+-------------------------------

*    @socket连接移动EMPP

+-------------------------------

*    By:hai

*    QQ:502513392

+--------------------------------

*/

error_reporting(E_ALL);

set_time_limit(0);

$port = 9981;

$ip = "211.136.163.68";

//发送的手机号及内容

$mobile = '';

$content = '';

//平台帐号密码

$accountId = '10657*********';

$password = "********";

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

if ($socket < 0) {

    echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n";

}

$result = socket_connect($socket, $ip, $port);

if ($result < 0) {

    echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";

}

$Timestamp = date("mdHis");

//消息头

$Command_Id = pack("N",1);

$Sequence_Id = pack("N",1);

//消息体

$account = $accountId.pack("C*",0,0,0,0,0,0,0);    //加二进制的0补全到21位

$accountMD5 = $accountId.pack("C*",0,0,0,0,0,0,0,0,0); //加9个二进制的0

$AuthenticatorSource = md5($accountMD5.$password.$Timestamp,true);

$Version = pack("H",'1.0');

$Timestamp = pack("N",$Timestamp);

$Message = $Command_Id.$Sequence_Id.$account.$AuthenticatorSource.$Version.$Timestamp;

$Total_Length = pack("N",strlen($Message)+4);

$out = '';

$in = $Total_Length.$Message;

if(!socket_write($socket, $in, strlen($Message)+4)) {

    echo "socket_write() failed: reason: " . socket_strerror($socket) . "\n";

}

//--------------------------接受移动返回消息-----------------------------------------

$out = socket_read($socket,37);

$arryResult = unpack("C*",$out);

foreach($arryResult as $key=>$value){

    //消息需要的话自己组下

}

/*

  没激活的此处可能需要写激活代码,也可以去平台激活帐号*/

//===========================短信发送=================================================

//消息头

$Command_Id = pack("N",4);

$Sequence_Id = pack("N",0);

//消息体,保留字段全为0

$Msg_Id = pack("C*",0,0,0,0,0,0,0,0,0,0);

$Pk_total = pack("h",1);

$Pk_number = pack("h",1);

$Registered_Delivery = pack("h",1); //返回状态

$Msg_Fmt = pack("C",15); //含GB汉字格式

$ValId_Time = pack("C*",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);

$At_Time = pack("C*",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); //即时发送

$DestUsr_tl = pack("N",1);

$moblieAscii = '';

for($i=0;$i<strlen($mobile);$i++){

    $moblieAscii .= pack("C",ord(substr($mobile,$i,1)));

}

$Dest_terminal_Id = $moblieAscii.pack("C*",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); //手机号补全到32字节

$Msg_Length = pack("C",strlen($content));

$contentAscii = '';

for($i=0;$i<strlen($content);$i++){

    $contentAscii .= pack("C",ord(substr($content,$i,1)));

}

$Msg_Content = $contentAscii;

$Msg_src = pack("C*",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); //保留字段,默认抓包内容

$Src_Id = $account; //帐号取上面的21位

$Service_Id = pack("C*",48,0,0,0,0,0,0,0,0,0);

//==========以下保留字段===============

$LinkID = pack("C*",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);

$Msg_level = pack("C",1);

$Fee_UserType = pack("C",2);

$Fee_terminal_Id = pack("C*",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);

$Fee_terminal_type = pack("C",0);

$TP_pId = pack("C",0);

$TP_udhi = pack("C",0);

$FeeType = pack("CC",48,49);

$FeeCode = pack("C*",48,0,0,0,0,0);

$Dest_terminal_type = pack("C",0);

$Message = $Command_Id.$Sequence_Id.$Msg_Id.$Pk_total.$Pk_number.$Registered_Delivery.$Msg_Fmt.$ValId_Time.$At_Time.$DestUsr_tl.$Dest_terminal_Id.$Msg_Length.$Msg_Content.$Msg_src.$Src_Id.$Service_Id.$LinkID.$Msg_level.$Fee_UserType.$Fee_terminal_Id.$Fee_terminal_type.$TP_pId.$TP_udhi.$FeeType.$FeeCode.$Dest_terminal_type;

$Total_Length = pack("N",strlen($Message)+4);

$in = $Total_Length.$Message;

if(!socket_write($socket, $in, strlen($Message)+4)) {

    echo "socket_write() failed: reason: " . socket_strerror($socket) . "\n";

}

//下面可以接受发送返回的状态

echo "关闭SOCKET...\n";

socket_close($socket);

echo "关闭OK\n";

?>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。