下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】C#實(shí)現(xiàn)微信公眾號(hào)群發(fā)消息的案例
這篇文章將為大家詳細(xì)講解有關(guān)C#實(shí)現(xiàn)微信公眾號(hào)群發(fā)消息的案例,在下覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲??傮w思路:1.首先必須要在微信公眾平臺(tái)上申請(qǐng)一個(gè)公眾號(hào)。2.然后進(jìn)行模擬登陸。(由于我對(duì)http傳輸原理和編程不是特別懂,在模擬登陸的地方,不是特別清楚,希望有大神指教)3.模擬登陸后會(huì)獲得一個(gè)token(令牌)和cookie。4.因?yàn)槟M登陸后相當(dāng)于就進(jìn)入了微信公眾平臺(tái),在這個(gè)里面就可以抓取到需要的數(shù)據(jù),如公眾好友的昵稱(chēng),fakeId。其中的fakeid非常重要,因?yàn)閭鬏敂?shù)據(jù)必須要知道對(duì)方的fakeid。5.知道對(duì)方的fakeid就可以進(jìn)行數(shù)據(jù)的發(fā)送了。不過(guò)里面還有一些小問(wèn)題,希望有人繼續(xù)修改和討論!也有人說(shuō)這樣會(huì)被封號(hào),所以請(qǐng)謹(jǐn)慎操作講一下我項(xiàng)目里面的主要內(nèi)容1.WeiXinLogin.cs類(lèi)是用來(lái)執(zhí)行登陸功能的//對(duì)密碼進(jìn)行MD5加密
static
string
GetMd5Str32(string
str)
{
MD5CryptoServiceProvider
md5Hasher
=
new
MD5CryptoServiceProvider();
//
Convert
the
input
string
to
a
byte
array
and
compute
the
hash.
char[]
temp
=
str.ToCharArray();
byte[]
buf
=
new
byte[temp.Length];
for
(int
i
=
0;
i
<
temp.Length;
i++)
{
buf[i]
=
(byte)temp[i];
}
byte[]
data
=
md5Hasher.ComputeHash(buf);
//
Create
a
new
Stringbuilder
to
collect
the
bytes
//
and
create
a
string.
StringBuilder
sBuilder
=
new
StringBuilder();
//
Loop
through
each
byte
of
the
hashed
data
//
and
format
each
one
as
a
hexadecimal
string.
for
(int
i
=
0;
i
<
data.Length;
i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
//
Return
the
hexadecimal
string.
return
sBuilder.ToString();
}
//執(zhí)行登陸操作
public
static
bool
ExecLogin(string
name,string
pass)
{
bool
result
=
false;
string
password
=
GetMd5Str32(pass).ToUpper();
string
padata
=
"username="
+
name
+
"&pwd="
+
password
+
"&imgcode=&f=json";
string
url
=
"/cgi-bin/login?lang=zh_CN
";//請(qǐng)求登錄的URL
try
{
CookieContainer
cc
=
new
CookieContainer();//接收緩存
byte[]
byteArray
=
Encoding.UTF8.GetBytes(padata);
//
轉(zhuǎn)化
HttpWebRequest
webRequest2
=
(HttpWebRequest)WebRequest.Create(url);
//新建一個(gè)WebRequest對(duì)象用來(lái)請(qǐng)求或者響應(yīng)url
webRequest2.CookieContainer
=
cc;
//保存cookie
webRequest2.Method
=
"POST";
//請(qǐng)求方式是POST
webRequest2.ContentType
=
"application/x-www-form-urlencoded";
//請(qǐng)求的內(nèi)容格式為application/x-www-form-urlencoded
webRequest2.ContentLength
=
byteArray.Length;
Stream
newStream
=
webRequest2.GetRequestStream();
//返回用于將數(shù)據(jù)寫(xiě)入
Internet
資源的
Stream。
//
Send
the
data.
newStream.Write(byteArray,
0,
byteArray.Length);
//寫(xiě)入?yún)?shù)
newStream.Close();
HttpWebResponse
response2
=
(HttpWebResponse)webRequest2.GetResponse();
StreamReader
sr2
=
new
StreamReader(response2.GetResponseStream(),
Encoding.Default);
string
text2
=
sr2.ReadToEnd();
//此處用到了newtonsoft來(lái)序列化
WeiXinRetInfo
retinfo
=
Newtonsoft.Json.JsonConvert.DeserializeObject<WeiXinRetInfo>(text2);
string
token
=
string.Empty;
if
(retinfo.ErrMsg.Length
>
0)
{
token
=
retinfo.ErrMsg.Split(new
char[]
{
'&'
})[2].Split(new
char[]
{
'='
})[1].ToString();//取得令牌
LoginInfo.LoginCookie
=
cc;
LoginInfo.CreateDate
=
DateTime.Now;
LoginInfo.Token
=
token;
result
=
true;
}
}
catch
(Exception
ex)
{
throw
new
Exception(ex.StackTrace);
}
return
result;
}
public
static
class
LoginInfo
{
///
<summary>
///
登錄后得到的令牌
///
</summary>
public
static
string
Token
{
get;
set;
}
///
<summary>
///
登錄后得到的cookie
///
</summary>
public
static
CookieContainer
LoginCookie
{
get;
set;
}
///
<summary>
///
創(chuàng)建時(shí)間
///
</summary>
public
static
DateTime
CreateDate
{
get;
set;
}
}2.在WeiXin.cs類(lèi)中實(shí)現(xiàn)發(fā)送數(shù)據(jù)public
static
bool
SendMessage(string
Message,
string
fakeid)
{
bool
result
=
false;
CookieContainer
cookie
=
null;
string
token
=
null;
cookie
=
WeiXinLogin.LoginInfo.LoginCookie;//取得cookie
token
=
WeiXinLogin.LoginInfo.Token;//取得token
string
strMsg
=
System.Web.HttpUtility.UrlEncode(Message);
//對(duì)傳遞過(guò)來(lái)的信息進(jìn)行url編碼
string
padate
=
"type=1&content="
+
strMsg
+
"&error=false&tofakeid="
+
fakeid
+
"&token="
+
token
+
"&ajax=1";
string
url
=
"/cgi-bin/singlesend?t=ajax-response&lang=zh_CN";
byte[]
byteArray
=
Encoding.UTF8.GetBytes(padate);
//
轉(zhuǎn)化
HttpWebRequest
webRequest2
=
(HttpWebRequest)WebRequest.Create(url);
webRequest2.CookieContainer
=
cookie;
//登錄時(shí)得到的緩存
webRequest2.Referer
=
"/cgi-bin/singlemsgpage?token="
+
token
+
"&fromfakeid="
+
fakeid
+
"&msgid=&source=&count=20&t=wxm-singlechat&lang=zh_CN";
webRequest2.Method
=
"POST";
webRequest2.UserAgent
=
"Mozilla/5.0
(Windows
NT
5.1;
rv:2.0.1)
Gecko/20100101
Firefox/4.0.1";
webRequest2.ContentType
=
"application/x-www-form-urlencoded";
webRequest2.ContentLength
=
byteArray.Length;
Stream
newStream
=
webRequest2.GetRequestStream();
//
Send
the
data.
newStream.Write(byteArray,
0,
byteArray.Length);
//寫(xiě)入?yún)?shù)
newStream.Close();
HttpWebResponse
response2
=
(HttpWebResponse)webRequest2.GetResponse();
StreamReader
sr2
=
new
StreamReader(response2.GetResponseStream(),
Encoding.Default);
string
text2
=
sr2.ReadToEnd();
if
(text2.Contains("ok"))
{
result
=
true;
}
return
result;
}3.SendMessage.aspx.cs中主要實(shí)現(xiàn)獲取fakeidpublic
static
ArrayList
SubscribeMP()
{
try
{
CookieContainer
cookie
=
null;
string
token
=
null;
cookie
=
WeiXinLogin.LoginInfo.LoginCookie;//取得cookie
token
=
WeiXinLogin.LoginInfo.Token;//取得token
/*獲取用戶信息的url,這里有幾個(gè)參數(shù)給大家講一下,1.token此參數(shù)為上面的token
2.pagesize此參數(shù)為每一頁(yè)顯示的記錄條數(shù)
3.pageid為當(dāng)前的頁(yè)數(shù),4.groupid為微信公眾平臺(tái)的用戶分組的組id,當(dāng)然這也是我的猜想不一定正確*/
string
Url
=
"/cgi-bin/contactmanagepage?t=wxm-friend&token="
+
token
+
"&lang=zh_CN&pagesize=10&pageidx=0&type=0&groupid=0";
HttpWebRequest
webRequest2
=
(HttpWebRequest)WebRequest.Create(Url);
webRequest2.CookieContainer
=
cookie;
webRequest2.ContentType
=
"text/html;
charset=UTF-8";
webRequest2.Method
=
"GET";
webRequest2.UserAgent
=
"Mozilla/5.0
(Windows
NT
5.1;
rv:2.0.1)
Gecko/20100101
Firefox/4.0.1";
webRequest2.ContentType
=
"application/x-www-form-urlencoded";
HttpWebResponse
response2
=
(HttpWebResponse)webRequest2.GetResponse();
StreamReader
sr2
=
new
StreamReader(response2.GetResponseStream(),
Encoding.Default);
string
text2
=
sr2.ReadToEnd();
MatchCollection
mc;
//由于此方法獲取過(guò)來(lái)的信息是一個(gè)html網(wǎng)頁(yè)所以此處使用了正則表
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 谷物市場(chǎng)供需分析及預(yù)測(cè)方法考核試卷
- 車(chē)輛制造生產(chǎn)效率提升技術(shù)與策略考核試卷
- 連鎖酒店市場(chǎng)拓展策略考核試卷
- 機(jī)電一體化產(chǎn)品課程設(shè)計(jì)
- 2025年度KTV會(huì)員等級(jí)制度設(shè)計(jì)與實(shí)施合同3篇
- 籃球館空調(diào)課程設(shè)計(jì)
- 二零二五年度MyOracleSupport云計(jì)算解決方案與MyOracleSupport服務(wù)合同
- 2025年度回購(gòu)擔(dān)保協(xié)議(數(shù)字貨幣交易)3篇
- 2025年度XX能源工程項(xiàng)目總承包合同范本
- 2025版智慧城市股份買(mǎi)賣(mài)合同示范文本3篇
- 浙江省杭州市2023-2024學(xué)年高二上學(xué)期期末學(xué)業(yè)水平測(cè)試政治試題 含解析
- 人力資源規(guī)劃
- 夜泊牛渚懷古
- 《實(shí)用日本語(yǔ)應(yīng)用文寫(xiě)作》全套電子課件完整版ppt整本書(shū)電子教案最全教學(xué)教程整套課件
- 公司員工手冊(cè)-全文(完整版)
- 鍋爐習(xí)題帶答案
- 土木工程課程設(shè)計(jì)38281
- 農(nóng)村宅基地地籍測(cè)繪技術(shù)方案
- 液壓爬模作業(yè)指導(dǎo)書(shū)
- 劇院的建筑設(shè)計(jì)規(guī)范標(biāo)準(zhǔn)
- 遺傳分析的一個(gè)基本原理是DNA的物理距離和遺傳距離方面...
評(píng)論
0/150
提交評(píng)論