版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】微信公眾平臺SDK過程的示例分析
/upload/information/20201208/260/10216.jpg/upload/information/20201208/260/10217.jpg/upload/information/20201208/260/10218.jpg/upload/information/20201208/260/10219.jpg/upload/information/20201208/260/10220.jpgusing
System.Web;using
Loogn.WeiXinSDK;using
Loogn.WeiXinSDK.Message;namespace
WebTest
{
///
<summary>
///
微信->服務(wù)器配置URL
///
</summary>
public
class
WeiXinAPI
:
IHttpHandler
{
static
string
Token
=
"Token";//這里是Token不是Access_Token
public
void
ProcessRequest(HttpContext
context)
{
context.Response.ContentType
=
"text/plain";
var
signature
=
context.Request["signature"];
var
timestamp
=
context.Request["timestamp"];
var
nonce
=
context.Request["nonce"];
if
(WeiXin.CheckSignature(signature,
timestamp,
nonce,
Token))//驗證是微信給你發(fā)的消息
{
//根據(jù)注冊的消息、事件處理程序回復(fù),
//如果得到?jīng)]用注冊的消息或事件,會返回ReplyEmptyMsg.Instance,即GetXML()為string.Empty,符合微信的要求
var
replyMsg
=
WeiXin.ReplyMsg();
var
xml
=
replyMsg.GetXML();
//WriteLog(xml);
//這里可以查看回復(fù)的XML消息
context.Response.Write(xml);
}
else
{
context.Response.Write("fuck
you!");
}
}
static
WeiXinAPI()
{
WeiXin.ConfigGlobalCredential("appid",
"appSecret");
//注冊一個消息處理程序,當用戶發(fā)"ABC",你回復(fù)“你說:ABC”;
WeiXin.RegisterMsgHandler<RecTextMsg>((msg)
=>
{
return
new
ReplyTextMsg
{
Content
=
"你說:"
+
msg.Content
//FromUserName
=
msg.ToUserName,
默認就是這樣,不用設(shè)置!
//ToUserName
=
msg.FromUserName,
默認就是這樣,不用設(shè)置!
//CreateTime
=
DateTime.Now.Ticks
默認就是這樣,不用設(shè)置!
};
});
//注冊一個用戶關(guān)注的事件處理程序,當用戶關(guān)注你的公眾賬號時,你回復(fù)“Hello!”
WeiXin.RegisterEventHandler<EventAttendMsg>((msg)
=>
{
return
new
ReplyTextMsg
{
Content
=
"Hello
!"
};
});
//還可以繼續(xù)注冊你感興趣的消息、事件處理程序
}
public
bool
IsReusable
{
get
{
return
false;
}
}
}
}/upload/information/20201208/260/10221.jpg一、憑據(jù)(access_token)過期
access_token
{
;
expires_in
{
;
Dictionary<,
Credential>
creds
=
Dictionary<,
Credential>
TokenUrl
=
Credential
GetCredential(
appId,
=
(creds.TryGetValue(appId,
(cred.add_time.AddSeconds(cred.expires_in
-
)
<=
json
=
Util.HttpGet2(=
Util.JsonTo<Credential>二、錯誤碼信息{"errcode":40013,"errmsg":"invalid
appid"}
errcode
{
;
errmsg
{
;
+
errcode
+
+
errmsg
+
public
class
QRCodeTicket
{
public
string
ticket
{
get;
set;
}
public
int
expire_seconds
{
get;
set;
}
public
ReturnCode
error
{
get;
set;
}
}
var
json
=
Util.HttpPost2(url,
data);
if
(json.IndexOf("ticket")
>
0)
{
return
Util.JsonTo<QRCodeTicket>(json);
}
else
{
QRCodeTicket
tk
=
new
QRCodeTicket();
tk.error
=
Util.JsonTo<ReturnCode>(json);
return
tk;
}
var
qrcode
=
WeiXin.CreateQRCode(true,
23);
if
(qrcode.error
==
null)
{
//返回錯誤,可以用qrcode.error查看錯誤消息
}
else
{
//返回正確,可以操作qrcode.ticket
}三、反序列化{
"group":
{
"id":
107,
"name":
"test"
}
}
public
class
GroupInfo
{
public
Group
group
{
get;
set;
}
public
class
Group
{
public
int
id
{
get;
set;
}
public
string
name
{
get;
set;
}
}
}
public
class
GroupInfo
{
public
int
id
{
get;
set;
}
public
string
name
{
get;
set;
}
}
{
"id":
107,
"name":
"test"
}Dictionary<string,
Dictionary<string,
object>>var
dict
=
Util.JsonTo<Dictionary<string,
Dictionary<string,
object>>>(json);var
gi
=
new
GroupInfo();var
gpdict
=
dict["group"];
gi.id
=
Convert.ToInt32(gpdict["id"]);
=
gpdict["name"].ToString();四、消息處理的優(yōu)化using
System.Web;using
Loogn.WeiXinSDK;using
Loogn.WeiXinSDK.Message;namespace
WebTest
{
///
<summary>
///
微信->服務(wù)器配置URL
///
</summary>
public
class
WeiXinAPI
:
IHttpHandler
{
static
string
Token
=
"Token";//這里是Token不是Access_Token
public
void
ProcessRequest(HttpContext
context)
{
context.Response.ContentType
=
"text/plain";
var
signature
=
context.Request["signature"];
var
timestamp
=
context.Request["timestamp"];
var
nonce
=
context.Request["nonce"];
if
(WeiXin.CheckSignature(signature,
timestamp,
nonce,
Token))//驗證是微信給你發(fā)的消息
{
var
replyMsg
=
WeiXin.ReplyMsg((recEvtMsg)
=>
{
switch
(recEvtMsg.MsgType)
{
case
MsgType.text:
{
var
msg
=
recEvtMsg
as
RecTextMsg;
//這里要轉(zhuǎn)型,麻煩
return
new
ReplyTextMsg
{
Content
=
"你說:"
+
msg.Content
};
}
case
MsgType.Event:
{
var
evtMsg
=
recEvtMsg
as
EventBaseMsg;//這里要轉(zhuǎn)型到事件消息的基本,麻煩
switch
(evtMsg.MyEventType)
{
case
MyEventType.Attend:
var
msg
=
evtMsg
as
EventAttendMsg;//這個例子不需要這行代碼,但其他要用消息內(nèi)容還是要轉(zhuǎn)型,麻煩
return
new
ReplyTextMsg
{
Content
=
"Hello
!"
};
default:
break;
}
break;
}
default:
break;
}
return
ReplyEmptyMsg.Instance;
//嵌套switch,而且每個case都有好幾個,這也不優(yōu)雅
});
var
xml
=
replyMsg.GetXML();
//WriteLog(xml);
//這里可以查看回復(fù)的XML消息
context.Response.Write(xml);
}
else
{
context.Response.Write("fuck
you!");
}
}
public
bool
IsReusable
{
get
{
return
false;
}
}
}
}public
static
void
RegisterMsgHandler(MsgType
type,
Func<RecEventBaseMsg,
ReplyBaseMsg>
handler)
{
//add
handler}
WeiXin.RegisterMsgHandler(MsgType.text,
(recEvtMsg)
=>
msg
=
recEvtMsg
ReplyTextMsg
{
Content
=
+
public
static
void
RegisterMsgHandler(MsgType
type,
Func<RecTextMsg,
ReplyBaseMsg>
handler)
{
//add
handler
}
public
static
void
RegisterMsgHandler(MsgType
type,
Func<RecImageMsg,
ReplyBaseMsg>
handler)
{
//add
handler
}
////可以RegisterMsgHandler(MsgType.text,
new
Func<RecTextMsg,
ReplyBaseMsg>((msg)
=>{
return
new
ReplyTextMsg
{
Content
=
"你說:"
+
msg.Content
};
}));//可以RegisterMsgHandler(MsgType.text,
new
Func<RecImageMsg,
ReplyBaseMsg>((msg)
=>{
return
new
ReplyTextMsg
{
Content
=
"你發(fā)的圖片:"
+
msg.PicUrl
};
}));//可以,注意這里msg的智能提示是RecTextMsg類型RegisterMsgHandler(MsgType.text,
(msg)
=>{
return
new
ReplyTextMsg
{
Content
=
"你說:"
+msg.Content};
});//可以,注意這里msg的智能提示還是RecTextMsg類型,但用了類型推斷,運行時可以確定是RecImageMsg,所以可以RegisterMsgHandler(MsgType.text,
(msg)
=>{
return
new
ReplyTextMsg
{
Content
=
"你發(fā)的圖片:"
+
msg.PicUrl
};
});//不可以,注意這里msg的智能提示還是RecTextMsg類型,但lamba
body里沒有用msg的特定子類的屬性,類型推斷不了,所以調(diào)用不明RegisterMsgHandler(MsgType.text,
(msg)
=>{
return
new
ReplyTextMsg
{
Content
=
"你發(fā)了個消息"
};
});public
static
void
RegisterMsgHandler<TMsg>(Func<TMsg,
ReplyBaseMsg>
handler)
where
TMsg
:
RecBaseMsg
{
var
type
=
typeof(TMsg);
var
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026福建省面向復(fù)旦大學(xué)選調(diào)生選拔工作考試備考題庫附答案
- 2026福建龍巖人民醫(yī)院招聘醫(yī)學(xué)類緊缺急需專業(yè)畢業(yè)生4人參考題庫附答案
- 公共交通運營服務(wù)收費標準制度
- 2026遼寧大連理工大學(xué)機械工程學(xué)院實驗技術(shù)人員招聘1人參考題庫附答案
- 2026重慶市紅十字會會屬事業(yè)單位人員招聘1人參考題庫附答案
- 2026陜西省面向華東師范大學(xué)招錄選調(diào)生參考題庫附答案
- 2026黑龍江佳木斯市樺川縣人民法院招聘聘用制輔警1人參考題庫附答案
- 成都東部新區(qū)2025年面向全國公開選調(diào)事業(yè)單位工作人員(40人)參考題庫附答案
- 敦煌油田8個“飛地”社區(qū)面向社會公開招錄“兩委”換屆后備干部備考題庫附答案
- 浙江國企招聘-2026年金華蘭溪市市屬國企(城投集團)人才引進招聘3人考試備考題庫附答案
- 圍手術(shù)期心肌梗塞的護理
- 超市門口鑰匙管理制度
- 代貼現(xiàn)服務(wù)合同范本
- 2025小學(xué)六年級英語時態(tài)綜合練習(xí)卷
- 垃圾清運補充合同范本
- 病蟲害防治操作規(guī)程編制
- 九年級上學(xué)期數(shù)學(xué)壓軸必考題型-反比例函數(shù)(含答案)
- 上海市旅館從業(yè)人員考試及答案解析
- 生日主題宴會設(shè)計方案
- 《基坑圍護結(jié)構(gòu)滲漏檢測技術(shù)標準》
- 防火防爆電氣安全知識培訓(xùn)課件
評論
0/150
提交評論