飞信短信发送的PHP类(散分)
飞信发送API网上有很多,但没有多少是我自己满意的。很多网站提供基于Web的API调用方式向用户提供服务,但是作为使用者我心里还是没底。我总是担心自己的密码会被某些人记录,一直想写一个自己用的PHP版本飞信发送程序。
因为本人没有任何逆向基础,同时飞信版本变化不同。从nathan在百度上发布《飞信协议分析》到现在也有3年了,且当时分析的是飞信2006版本。这中间变化太多,也使得我在写PHP版本飞信发送程序是走了很多弯路。
我曾经拜读过superli_198的《让 PHP 程序利用飞信(Fetion)发免费短信》,但是该版本使用的通讯方式目前已经不被飞信支持,且superli_198也没有做新的更新。我也下载过c.young[@]xicabin.com的Openfetion,但是该版本存在明显bug,现在也不能正常使用。无奈只能硬着头皮修改一个C# 版本的飞信发送程序。
在移植C#版本的飞信发送程序到PHP过程中,我遇到了一个关于MD5加密相关的问题,困了很多天。最后在CSDN论坛ycTIN的帮助下,问题得以解决。非常感谢ycTIN。 以下是我完成的PHP版飞信短信发送类,截止到2010年2月17日下午4点该程序一直能正常工作。技术上没有什么难度,发在这里和大家交流。
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->
<?php /**
*@desc 飞信短信发送类(Encoded:UTF-8)
*使用方法:$myNewFetion = new myFetion('1381111111', 'password','1382222222', '测试消息' );
*非常感谢CSDN论坛ycTIN在MD5加密部分的帮助!
*本程序未做容错处理,为防止诈骗短信乱发,程序不提供添加好友功能
*测试URL:http://i.isclab.org/tools/fetion.php
*
*程序运行条件:
*1.服务器能够访问飞信服务器nav.fetion.com.cn的443端口(https)
*2.服务器端PHP程序能够创建socket访问221.176.31.4的8080端口
*
*关键技术:
*1.CURL + SSL通讯
*2.PHP Socket编程
*3.PHP MD5函数的深入理解
*4.PHP DOM处理XML
*
*@author shadu AT foxmail DOT com /CNOS(http://bbs.ouropen.org)
*@version 2010-02-17
*@copyright 任意拷贝和修改!
**/
class myFetion{
private $mobile_no = '1381111111'; // 发送者手机号
private $fetion_no = '738713940' ; // 发送者飞信号,程序自动获取
private $fetion_pwd = 'mypassword' ; // 发送者飞信登录密码
private $cookie_file = 'cookie.txt' ; // 临时存放的cookie文件
public $SMS_RECEIVER = '1382222222' ; // 短信接收者手机号码
public $SMS_TEXT = 'sms test' ; // 短信内容,支持中文
private $NONCE = 'AAB3238922BCC25A6F606EB525FFDC56' ; // SIPC服务器返回,每次不同
private $C_NONCE = 'AAB3238922BCC25A6F606EB525FFDC56' ; // 是随机的,但是固定值也没关系
private $SSIC = '' ; // cookie中提取的变量
private $RESPONSE = '' ; // 加密后的密钥串
private $url_nav = 'https://nav.fetion.com.cn/nav/getsystemconfig.aspx' ; // 443端口获取导航信息
private $domain_fetion = 'fetion.com.cn' ; // 飞信服务器的域名
private $SIPC_PROXY = '221.176.31.4:8080'; // 8080端口飞信通讯占用
private $SSI_PROXY_SIGN_IN = 'https://uid.fetion.com.cn/ssiportal/SSIAppSignIn.aspx' ; // 登录URL
private $SSI_PROXY_SIGH_OUT = 'http://ssi.fetion.com.cn/ssiportal/SSIAppSignOut.aspx' ; // 登出URL
private $proxy_http = 'proxy.example.com:8080' ; // HTTP代理服务器地址
private $curl = NULL ;
private $socket = NULL ;
/**
*从导航网站获取信息
**/
private $REQUEST_CONFIG = "<config><user mobile-no='"%s"'></user><client type='"PC"' version='"2.3.0230"' platform='"W5.1"'></client><servers version='"0"'></servers><service-no version='"12"'></service-no><parameters version='"15"'></parameters><hints version='"13"'></hints><http-applications version='"14"'></http-applications><client-config version='"17"'></client-config>";
/**
*使用手机号码和密码向服务器获取对应的飞信号码信息
**/
private $REQUEST_SSI_SIGN = "mobileno=%s&pwd=%s" ;
/**
*使用飞信号码向SIPC服务器注册,获取临时变量NONCE和SSIC的值
**/
private $REQUEST_SIPC_SIGN_NONCE = "R %s SIP-C/2.0
F: %s
I: 1
Q: 1 R
L: %d
%s" ;
private $REQUEST_SIPC_SIGN_NONCE_BODY = "<args><device type='"PC"' version='"6"' client-version='"2.3.0230"'></device><caps value='"simple-im;im-session;temp-group"'></caps><events value='"contact;permission;system-message"'></events><user-info attributes='"all"'></user-info><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;" sence><basic value='"400"' desc='""'></basic><basic value='"400"' desc='""'></basic>
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号