【移動應(yīng)用開發(fā)技術(shù)】微信公眾平臺SDK過程的示例分析_第1頁
【移動應(yīng)用開發(fā)技術(shù)】微信公眾平臺SDK過程的示例分析_第2頁
【移動應(yīng)用開發(fā)技術(shù)】微信公眾平臺SDK過程的示例分析_第3頁
【移動應(yīng)用開發(fā)技術(shù)】微信公眾平臺SDK過程的示例分析_第4頁
【移動應(yīng)用開發(fā)技術(shù)】微信公眾平臺SDK過程的示例分析_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論