通过分析网页版飞信(地址:https://webim.feixin.10086.cn/),封装成自己的通用API,通过该API可以给自己和飞信好友的手机发送免费短信。
这是官网登录界面截图:
我们可以通过模拟网页浏览器实现发送飞信短信,下面是具体实现方法。
一、预览截图
1)发送测试界面
2)手机接收截图
二、关键代码
using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using Lyh.Libs.MyConverter; using Lyh.Libs.WebUtility; namespace Lyh.API.Feixin { public class WebMessenger { private HttpClient httpClient=new HttpClient(); /// <summary> /// 获取验证码图片 /// </summary> /// <returns></returns> public Image GetPic() { var url = string.Format("https://webim.feixin.10086.cn/WebIM/GetPicCode.aspx?Type=ccpsession&{0}", new Random().NextDouble()); var parameter = new HttpParameter() { Url = url, Method = HttpMethod.GET }; var stream = httpClient.GetImageStream(parameter); return Image.FromStream(stream); } /// <summary> /// 登录网页版飞信 /// </summary> /// <param name="userName">手机号、飞信号或邮箱</param> /// <param name="password">密码</param> /// <param name="code">验证码</param> /// <returns></returns> public Result Login(string userName, string password, string code) { var dic = new Dictionary<string, string> { {"UserName", userName}, {"Pwd", password}, {"OnlineStatus", "400"}, {"AccountType", "1"}, {"Ccp", code} }; var parameter = new HttpParameter { Url = "https://webim.feixin.10086.cn/WebIM/Login.aspx", Host = "webim.feixin.10086.cn", Origin = "https://webim.feixin.10086.cn", Referer = "https://webim.feixin.10086.cn/loginform.aspx", Method = HttpMethod.POST, Data = dic }; var json = httpClient.Request(parameter); var result = JsonConverter.FromJson<Result>(json); return result; } /// <summary> /// 获取个人资料 /// </summary> /// <returns></returns> public PersonalInfo GetPersonalInfo() { var url = string.Format("https://webim.feixin.10086.cn/WebIM/GetPersonalInfo.aspx?Version=0&ssid={0}", GetSsid()); var parameter = new HttpParameter() { Url=url, Referer = "https://webim.feixin.10086.cn/main.aspx", Method =HttpMethod.GET }; var json = httpClient.Request(parameter); var info = JsonConverter.FromJson<PersonalInfo>(json); return info; } /// <summary> /// 发送短信 /// </summary> /// <param name="from">发送人的uid</param> /// <param name="to">接收人的uid(多个以“,”隔开)</param> /// <param name="msg">短信内容</param> /// <returns></returns> public Result Send(string from,string to,string msg) { var dic = new Dictionary<string, string> { {"UserName", from}, {"Message",Uri.EscapeDataString(msg)}, {"Receivers", to}, {"ssid", GetSsid()} }; var parameter = new HttpParameter() { Url = "https://webim.feixin.10086.cn/content/WebIM/SendSMS.aspx?Version=160", Host = "webim.feixin.10086.cn", Origin = "https://webim.feixin.10086.cn", Referer = "https://webim.feixin.10086.cn/content/freeSms.htm?tabIndex=0", Method = HttpMethod.POST, Data = dic }; var json = httpClient.Request(parameter); var result = JsonConverter.FromJson<Result>(json); return result; } /// <summary> /// 获得联系人信息 /// </summary> /// <returns></returns> public ConnectInfo GetConnectInfo() { var url = string.Format("https://webim.feixin.10086.cn/WebIM/GetConnect.aspx?Version=1&ssid={0}", GetSsid()); var parameter = new HttpParameter() { Url = url, Referer = "https://webim.feixin.10086.cn/main.aspx", Method = HttpMethod.GET }; var json = httpClient.Request(parameter); var info = JsonConverter.FromJson<ConnectInfo>(json); return info; } /// <summary> /// 获得会话编号 /// </summary> /// <returns></returns> private string GetSsid() { var lst=httpClient.GetAllCookies(); var cookie = lst.Single(c => c.Name == "webim_sessionid"); return cookie.Value; } } }
更多源代码请访问:https://lyh.codeplex.com/