`
碧落海的风
  • 浏览: 13772 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

程序调用飞信API发送免费短信

阅读更多

网上看到有网页版的飞信,http://fetionlib.appspot.com/ 可以添加好友,群发和定时发送短信给飞信好友,还开放了API接口供程序调用,可以用它来监控机器是否正常服务定期给管理员发短信,或者小规模的网站给会员发短信之类的服务。

本飞信API接口程序由Google强力驱动、免费托管,将长期保留,示例程序用到的json包,请到www.json.org下载jar包,也可使用附件。

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.UUID;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.json.JSONArray;
import org.json.JSONObject;

public class Test {
private static Log log = LogFactory.getLog(Test.class);

public static void main(String[] args) {
String mobile = "";
String pw = "";
//测试发短信
/*boolean b = fetchToSendSMS(mobile, pw, new String[] { "15810189365" }, "TestMessage");
System.out.println("Send Message result:" + b);*/

//测试取得好友列表
JSONArray friends = fetchToGetFriends(mobile, pw);
System.out.println("friends:\r\n"+ (friends == null ? "null" : friends.toString()));

//测试添加好友
// int result = fetchToAddFriend(mobile, pw,"13812345678","TestMyName", "TestFriendName");
// System.out.println("Add Friend result:"+result);

//测试发送定时短信(注意是太平洋时间,所以2009-10-09 01:00 是北京时间09:00发奥)
// String sid = fetchToSendScheduleMsg(mobile, pw, new String[]{"13912345678"}, "TestScheduleMessage", "2009-10-09 01:00");
// System.out.println("sid:"+sid);

//测试删除定时短信
// boolean b2 = fetchToDeleteScheduleMsg(mobile, pw, "123456");
// System.out.println("schedule message delete result:"+b2);
}

private static final int TRY_TIMES = 3;
private static final int TIME_OUT = 30000;

 

 

 

 

 

/**
*
发送短消息 更简单的Get方式(不支持群发,如要群发用下面POST方式,已更新),直接在浏览器里输入以下地址,手机号码和密码请自行改掉:

* http://fetionlib.appspot.com/restlet/fetion/13812345678/password/13912345678/message
成功返回OK
*
否则返回Message Not Sent,如果要群发或者您的密码包含/或者需要提交中文消息避免可能的乱码最好请用以下的程序(POST方式)

*
注意参数String[] friends 中的数组可以是好友的手机号,也可以是后面用程序取到的好友的uri,详见后面取得好友列表的说明
*
fetchToSendSMS("13812345678","password",new String[]{"sip:12345678@fetion.com.cn;p=5065","13916416465","tel:15912345678"},"Test");
*
好友数不能超过8个,如果有需要,请用程序分开来多次调用

*
注意:相同手机号,相同好友的请求的调用间隔要超过30秒,否则不成功(responseCode:406),但接受好友中包含你自己的手机号的请求不受30秒的限制!
*/

public static boolean fetchToSendSMS(String mobile, String password,
String[] friends, String message) {
// 加上UUID的目的是防止这样的情况,在服务器上已经成功发送短信,却在返回结果过程中遇到错误,
// 而导致客户端继续尝试请求,此时让服务器根据UUID分辨出该请求已经发送过,避免再次发送短信。
String uuid = UUID.randomUUID().toString();
for (int i = 0; i < TRY_TIMES; i++) {
int responseCode = 0;
try {
URL postUrl = new URL(
"http://fetionlib.appspot.com/restlet/fetion");
HttpURLConnection connection = (HttpURLConnection) postUrl
.openConnection();
connection.setConnectTimeout(TIME_OUT);
connection.setReadTimeout(TIME_OUT);
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setUseCaches(false);
connection.setInstanceFollowRedirects(true);
connection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
connection.connect();
DataOutputStream out = new DataOutputStream(connection
.getOutputStream());
String content = "mobile=" + mobile + "&uuid=" + uuid
+ "&password=" + password + "&friend="
+ convertArrayToJSONString(friends) + "&message="
+ URLEncoder.encode(message, "utf-8");
out.writeBytes(content);

out.flush();
out.close();

responseCode = connection.getResponseCode();
connection.disconnect();
if (responseCode == 202)
return true;
else
return false;
} catch (Exception e) {
log.warn("error fetchToSendSMS, exception:" + e.getMessage()
+ ". tried " + i + " times");
}
}
return false;
}

 
/**
*

取得好友列表 GET方式为:

取得好友列表 GET方式为:


* http://fetionlib.appspot.com/restlet/fetion/friendsList/13812345678/password
*
成功将返回JSON格式的好友列表,如果您不了解JSON格式,请先网上查阅相关知识,
*
如:[{"nickname":"Jerry","localname":"小张","uri":"sip:123456@fetion.com.cn;p=6012","mobile":"13912345678"}]
*
其中nickname是对方给自己设置的昵称,localname是您给对方设置的名字,mobile是对方公开的手机号,uri是该用户的标识符,可用于发送短信时传递的参数

*
注意nicknamelocalnamemobile 这三个字段可能为空,如果为空,将不会再JSON中显示!
*
不成功返回空白
*
注意:相同手机号调用间隔要超过30秒,否则不成功(responseCode:406
*
*
您从JSONArray中取得的uri,sip:123456@fetion.com.cn;p=6012或可能为tel:13912345678
*
可直接作为参数传入上面的例子中发送短信, 如果有mobile,也可以传入mobile13916416465
*
不过有些时候,对方不公开手机号,便无法获取手机号,只有通过uri来发送短信
*
*/

public static JSONArray fetchToGetFriends(String mobile, String password) {
String uuid = UUID.randomUUID().toString();
for (int i = 0; i < TRY_TIMES; i++) {
try {
URL postUrl = new URL(
"http://fetionlib.appspot.com/restlet/fetion/friendsList");
HttpURLConnection connection = (HttpURLConnection) postUrl
.openConnection();
connection.setConnectTimeout(TIME_OUT);
connection.setReadTimeout(TIME_OUT);
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setUseCaches(false);
connection.setInstanceFollowRedirects(true);
connection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
connection.connect();
DataOutputStream out = new DataOutputStream(connection
.getOutputStream());
String content = "mobile=" + mobile + "&uuid=" + uuid
+ "&password=" + password;
out.writeBytes(content);

out.flush();
out.close();

int responseCode = connection.getResponseCode();
if (responseCode == 202) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(connection.getInputStream())); // 读取结果
StringBuffer sb = new StringBuffer();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
reader.close();
connection.disconnect();
return new JSONArray(sb.toString());
} else {
connection.disconnect();
}
} catch (Exception e) {
log.warn("error fetchToGetFriends, exception:" + e.getMessage()
+ ". tried " + i + " times");
}
}
return null;
}

 

 

/**
*
邀请好友 GET方式为:

* http://fetionlib.appspot.com/restlet/fetion/friend/13812345678/password/13912345678/MyName/FriendNickname
返回数字-101,见下面说明
*
*@param friend
*
被邀请好友的手机号
*@param desc
*
您的姓名(不能超过10个字),对方收到邀请短信时,会显示这个名字,以便让对方知道您是谁
*@param nickname
*
对方的姓名(不能超过10个字),如果对方同意的话,这个名字会作为您的好友名称显示
*
*@return -1
错误或者对方手机号不支持, 0对方已经是您的好友 1成功发送邀请短信,等待对方回复是否同意
*
注意:相同手机号调用间隔要超过30秒,否则不成功(responseCode:406
*/

public static int fetchToAddFriend(String mobile, String password,
String friend, String desc, String nickname) {
String uuid = UUID.randomUUID().toString();
for (int i = 0; i < TRY_TIMES; i++) {
int responseCode = 0;
try {
URL postUrl = new URL(
"http://fetionlib.appspot.com/restlet/fetion/friend");
HttpURLConnection connection = (HttpURLConnection) postUrl
.openConnection();
connection.setConnectTimeout(TIME_OUT);
connection.setReadTimeout(TIME_OUT);
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setUseCaches(false);
connection.setInstanceFollowRedirects(true);
connection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
connection.connect();
DataOutputStream out = new DataOutputStream(connection
.getOutputStream());
String content = "mobile=" + mobile + "&uuid=" + uuid
+ "&password=" + password + "&friend=" + friend
+ "&desc=" + URLEncoder.encode(desc, "utf-8")
+ "&nickname=" + URLEncoder.encode(nickname, "utf-8");
out.writeBytes(content);

out.flush();
out.close();

responseCode = connection.getResponseCode();
if (responseCode == 202) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(connection.getInputStream())); // 读取结果
StringBuffer sb = new StringBuffer();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
reader.close();
connection.disconnect();
JSONObject jo = new JSONObject(sb.toString());
return jo.getInt("action");
} else {
connection.disconnect();
return -1;
}
} catch (Exception e) {
log.warn("error fetchToAddFriend, exception:" + e.getMessage()
+ ". tried " + i + " times");
}
}
return -1;
}

 

 

/**
*
发送定时短信 GET方式为(不支持群发,如要群发用下面POST方式,已更新)
:
*
http://fetionlib.appspot.com/restlet/fetion/schedule/13812345678/password/13912345678/message/2009-08-08%2012:18
成功返回sid号码,否则返回空白(空格)
*
*POST
方式如下

*
*@param message
*
短信内容,字数不能超过180
*@param date
*
发送日期格式为yyyy-MM-dd HH:mm,注意日期为时区为0的标准时间,北京时间的时区是8,所以要减去8小时;
*
如计划2009-08-08 20:18分发送,应该填写2009-08-08 12:18
*
中国移动还规定日期要超出现在时间20分钟但不能超过1年。
*@param friends
*
接受短信的好友们, 其中的数组可以是好友的手机号,也可以是用程序取到的好友的uri,注意好友数不能超过30个,如果有需要,请用程序分开来多次调用
*
注意:相同手机号,相同好友的请求的调用间隔要超过30秒,否则不成功(responseCode:406),但接受好友中包含你自己的手机号的请求不受30秒的限制!
*
*@return
一个sid号码,记下来如果后续要撤销短信发送,需要用到这个号码
*/

public static String fetchToSendScheduleMsg(String mobile, String password,
String[] friends, String message, String date) {
String uuid = UUID.randomUUID().toString();
for (int i = 0; i < TRY_TIMES; i++) {
try {
URL postUrl = new URL(
"http://fetionlib.appspot.com/restlet/fetion/schedule");
HttpURLConnection connection = (HttpURLConnection) postUrl
.openConnection();
connection.setConnectTimeout(TIME_OUT);
connection.setReadTimeout(TIME_OUT);
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setUseCaches(false);
connection.setInstanceFollowRedirects(true);
connection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
connection.connect();
DataOutputStream out = new DataOutputStream(connection
.getOutputStream());
String content = "mobile=" + mobile + "&uuid=" + uuid
+ "&password=" + password + "&friend="
+ convertArrayToJSONString(friends) + "&schedule="
+ date.replace(" ", "%20") + "&message="
+ URLEncoder.encode(message, "utf-8");
out.writeBytes(content);

out.flush();
out.close();
int responseCode = connection.getResponseCode();
if (responseCode == 202) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(connection.getInputStream())); // 读取结果
StringBuffer sb = new StringBuffer();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
reader.close();
connection.disconnect();
JSONObject jo = new JSONObject(sb.toString());
return jo.getString("sid");
} else {
connection.disconnect();
return null;
}
} catch (Exception e) {
log.warn("error fetchToSaveSchedule, exception:"
+ e.getMessage() + ". tried " + i + " times");
}
}
return null;
}

 

 

/**
*
删除定时短信 GET方式为:

* http://fetionlib.appspot.com/restlet/fetion/scheduleDelete/13812345678/password/aglmZXRpb25saWJyGgsSB0FjY291bnQYAQwLEgdNZXNzYWdlGCQM
* aglmZXRpb25saWJyGgsSB0FjY291bnQYAQwLEgdNZXNzYWdlGCQM
是你发送定时短信返回的sid号码,
* GET
方式之支持一次删除一个定时短信, 如果要删除多个,请用下面的POST方式,成功返回OK,否则返回Schedule Not Deleted
*
注意:相同手机号调用间隔要超过30秒,否则不成功(responseCode:406

*
*@param sid
*
发送定时短信时返回的那些sid号码(不能超过10sid),多个用数组的形式,程序会转换成JSON提交
*
*/

public static boolean fetchToDeleteScheduleMsg(String mobile,
String password, String[] sids) {
String uuid = UUID.randomUUID().toString();
for (int i = 0; i < TRY_TIMES; i++) {
try {
URL postUrl = new URL(
"http://fetionlib.appspot.com/restlet/fetion/scheduleDelete");
HttpURLConnection connection = (HttpURLConnection) postUrl
.openConnection();
connection.setConnectTimeout(TIME_OUT);
connection.setReadTimeout(TIME_OUT);
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setUseCaches(false);
connection.setInstanceFollowRedirects(true);
connection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
connection.connect();
DataOutputStream out = new DataOutputStream(connection
.getOutputStream());
String content = "mobile=" + mobile + "&uuid=" + uuid
+ "&password=" + password + "&sids="
+ convertArrayToJSONString(sids);
out.writeBytes(content);

out.flush();
out.close();

int responseCode = connection.getResponseCode();
connection.disconnect();
if (responseCode == 202)
return true;
else
return false;
} catch (Exception e) {
log.warn("error fetchToDeleteSchedule, exception:"
+ e.getMessage() + ". tried " + i + " times");
}
}
return false;
}

//把数组转化成JSONString
private static String convertArrayToJSONString(String[] arr)
throws Exception {
JSONArray ja = new JSONArray();
for (String a : arr)
ja.put(a);//ja.add(a);//?
return URLEncoder.encode(ja.toString(), "UTF-8");
}
}

 

 

附件下载:
请解压缩.rar 100.7KB

编程实现飞信免费发短信息 技术

Post by 涛声依旧 on 2010-3-25 13:44 Thursday

必须条件:1、移动手机号,不能欠费;2、开通飞信,具体咨询10086

下面的程序是以java编写,本人已经测试通过。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
/**
* 编程实现借助飞信通道,免费发送短信
* @author leo
* @date Mar 25, 2010 1:43:50 PM
*/
public class Fetion {
public static void main(String[] args) throws IOException{
String sUrl = "https://fetionAPI.appspot.com/api/?";
String fromNo = "";//发送端手机号码
String password = "";//飞信登陆密码
String toNo = "";//接收手机号码
String msg = "你好";//发送内容
sUrl += "from="+fromNo+"&pw="+password+"&to="+toNo+"&msg="+msg;
System.out.println(sUrl);
URL url = new URL(sUrl);
URLConnection urlConn = url.openConnection();

BufferedReader in = new BufferedReader(new InputStreamReader(urlConn.getInputStream(), "UTF-8"));

String rets = "";
if (in != null){
for (String s = ""; (s = in.readLine()) != null;){
rets = rets + s;
}
}

in.close();
System.out.println("Result : " + rets);
System.out.println("发送成功");
}
}

 

 

分享到:
评论

相关推荐

    易语言利用中国移动飞信API免费发短信程序源码

    在本项目中,我们探讨的是如何使用易语言来编写一个利用中国移动飞信API的程序,实现免费发送短信的功能,这对于监控报警提示等应用场景非常实用。 首先,了解中国移动飞信API是关键。飞信是中国移动推出的一款即时...

    PB调用飞信免费发短信程序

    【标题】"PB调用飞信免费发短信程序"揭示了一个使用PowerBuilder(PB)集成开发环境来调用飞信应用程序实现免费发送短信的技术方案。PowerBuilder是Sybase公司推出的一种面向对象的可视化编程工具,尤其适合于数据库...

    免费发短信飞信API ASP.NET源码

    【标题】"免费发短信飞信API ASP.NET源码"涉及的核心知识点主要集中在以下几个方面: 1. **飞信API**:飞信是中国移动推出的一种即时通讯服务,它允许用户通过互联网向中国移动、中国联通、中国电信的手机用户发送...

    ASP小程序通过飞信免费发短信

    这个标题"ASP小程序通过飞信免费发短信"表明我们要讨论的是如何利用ASP技术结合飞信服务,实现一个能够免费发送短信的应用程序。飞信是中国移动推出的一种即时通讯服务,用户可以通过飞信向手机或飞信客户端发送短信...

    调用移动飞信接口实现免费发送短信java版源码

    2. **创建连接**:使用飞信API发送短信的第一步是建立与飞信服务器的连接。这通常涉及到设置用户名、密码和其他认证信息,并通过HTTP或HTTPS协议进行连接。 3. **登录验证**:登录到飞信服务通常需要提供用户的飞信...

    利用飞信机器人发送短信

    在VC++环境中,我们可以创建一个图形用户界面(GUI),让用户能够输入接收者的信息和短信内容,然后调用飞信API进行发送。这需要对MFC(Microsoft Foundation Classes)或者Win32 API有一定的了解,因为这些库提供了...

    飞信好友免费短信API接口PHP开源版

    飞信好友免费短信API接口PHP开源版是一款基于PHP语言开发的应用程序,旨在允许开发者通过编程方式向飞信的联系人发送免费短信。这个接口的开放源码性质使得它成为学习和开发相关应用的理想资源,同时也方便了那些...

    PHP用飞信接口免费发短信源码 1.0.rar

    标题 "PHP用飞信接口免费发短信源码 1.0.rar" 提供的信息表明,这是一个使用PHP编程语言实现的程序,它利用了飞信(Fetion)的开放接口来发送免费短信。飞信是中国移动推出的一款即时通讯服务,允许用户通过网络免费...

    飞信API_jar下载

    开发者需要将下载的`java发短信_fetionAPI.jar`文件添加到项目的类路径(ClassPath)中,这样就可以在代码中直接调用飞信API的相关方法。 下载飞信API的jar文件通常是通过官方网站或者第三方开发者社区获取。在下载...

    C#.NET利用飞信接口免费发短信

    标题 "C#.NET利用飞信接口免费发短信" 涉及的是在.NET环境中使用C#编程语言,通过飞信(Fetion)提供的API接口实现短信的自动发送功能。飞信是中国移动推出的一种即时通讯服务,允许用户通过网络免费或低价发送短信...

    java 飞信 API

    Java飞信API是一种基于Java语言开发的接口,用于与飞信系统进行交互,实现短信发送、接收以及其他相关功能。飞信是中国移动推出的一款即时通讯软件,允许用户通过互联网或者手机进行免费短信交流,同时支持语音、...

    asp通过飞信免费发短信

    通过以上步骤,你可以在ASP中集成飞信API,实现免费向中国移动用户发送短信的功能。但请注意,这种服务可能会受到一定的限制,比如每日发送条数、频率等,具体取决于飞信的政策和服务等级。此外,随着技术的发展,...

    利用飞信免费发短信的源代码,php版

    在这个"利用飞信免费发短信的源代码"中,关键知识点包括: 1. **飞信API接口**:飞信提供了API接口,允许开发者通过程序方式与其服务进行交互。这些接口可能包括登录验证、发送短信、接收短信等操作。开发者需要...

    飞信短信发送的PHP类(PHP版飞信)

     我曾经拜读过superli_198的《让 PHP 程序利用飞信(Fetion)发免费短信》,但是该版本使用的通讯方式目前已经不被飞信支持,且superli_198也没有做新的更新。我也下载过 c.young[@]xicabin.com的Openfetion,但是...

    java+飞信 免费发送短信

    Java+飞信是一种结合了Java编程语言和中国移动的飞信服务来实现免费发送短信的技术方案。飞信是中国移动推出的一款即时通讯应用,它允许用户通过网络免费向中国移动手机号码发送短信,同时也支持语音、图片等多种...

    PHP用飞信接口免费发短信源码.7z

    通常,飞信API提供了登录、发送短信、接收短信等基本功能。开发者需要注册飞信开发者账号,并获取相应的API密钥,这些密钥用于验证调用API的合法性。Open Fetion库已经封装了这些复杂的交互过程,使得开发者可以更...

    利用飞信免费发送短信

    总结起来,利用飞信免费发送短信涉及的关键知识点包括:Java编程、JSP脚本、第三方库的引入和使用、网络通信API的调用以及基本的错误处理。在实际开发中,结合这些知识点,我们可以构建一个有效的短信发送系统,有效...

    可整合在任何网站的飞信插件,可向你的网站会员或者客户任意免费发送免费短信

    飞信是一种通信服务,允许用户通过网络发送短信,而这个插件能够让网站管理员利用飞信的服务,向其网站的会员或客户发送免费短信。 描述部分进一步强调了这个插件的核心功能,即它能够无限制地免费发送短信。这对于...

    asp 通过飞信免费发短信

    总之,通过ASP结合飞信API发送短信是一种早期但仍然有效的技术方案,尤其在资源受限的环境中。然而,随着技术的不断进步,现代Web开发已转向更加高效、安全的解决方案,如Node.js、Python等,结合更为稳定可靠的...

    网页免费发短信

    网页免费发短信是一种技术,它允许用户通过网页接口发送和接收短信,通常与特定的服务提供商如飞信(Fetion)关联。飞信是中国移动推出的一款即时通讯服务,支持通过互联网与手机用户进行免费或低成本的短信交流。在...

Global site tag (gtag.js) - Google Analytics