【移动应用开发技术】微信开发之如何实现被动回复和上传下载文件_第1页
【移动应用开发技术】微信开发之如何实现被动回复和上传下载文件_第2页
【移动应用开发技术】微信开发之如何实现被动回复和上传下载文件_第3页
【移动应用开发技术】微信开发之如何实现被动回复和上传下载文件_第4页
【移动应用开发技术】微信开发之如何实现被动回复和上传下载文件_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】微信开发之如何实现被动回复和上传下载文件

/upload/information/20201208/260/9851.jpg/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET将appid和secret替换成你自己的。{"access_token":"eEd6dhp0s24JfWwDyGBbrvJxnhqHTSYZ8MKdQ7MuCGBKxAjHv-tEIwhFZzn102lGvIWxnjZZreT6C1NCT9fpS7NREOkEX42yojVnqKVaicg","expires_in":7200}我们只需解析这个json,即可获取到我们所需的access_token.代码如下:AccessToken实体类:public

class

AccessToken

{

public

string

token

{

get;

set;

}

public

DateTime

expirestime

{

get;

set;

}

}///

<summary>

///

获取access

token

///

</summary>

///

<param

name="appid">第三方用户唯一凭证</param>

///

<param

name="secret">第三方用户唯一凭证密钥,即appsecret</param>

///

<returns>AccessToken对象,expirestime是过期时间</returns>

public

static

AccessToken

GetAccessToken(string

appid,

string

secret)

{

try

{

string

url

=

string.Format("/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}",

appid,

secret);

string

retdata

=

Utils.HttpGet(url);

if

(retdata.Contains("access_token"))

{

JObject

obj

=

(JObject)JsonConvert.DeserializeObject(retdata);

string

token

=

obj.Value<string>("access_token");

int

expirestime

=

obj.Value<int>("expires_in");

return

new

AccessToken

{

token

=

token,

expirestime

=

DateTime.Now.AddSeconds(expirestime)

};

}

else

{

WriteBug(retdata);//写错误日志

}

return

null;

}

catch

(Exception

e)

{

WriteBug(e.ToString());//写错误日志

return

null;

}

}/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE语音(voice):2M,播放长度不超过60s,支持AMR\MP3格式视频(video):10MB,支持MP4格式缩略图(thumb):64KB,支持JPG格式媒体文件在后台保存时间为3天,即3天后media_id失效。public

enum

MediaType

{

///

<summary>

///

图片(image):

1M,支持JPG格式

///

</summary>

image,

///

<summary>

///

语音(voice):2M,播放长度不超过60s,支持AMR\MP3格式

///

</summary>

voice,

///

<summary>

///

视频(video):10MB,支持MP4格式

///

</summary>

video,

///

<summary>

///

缩略图(thumb):64KB,支持JPG格式

///

</summary>

thumb

}public

class

UpLoadInfo

{

///

<summary>

///

媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb,主要用于视频与音乐格式的缩略图)

///

</summary>

public

string

type

{

get;

set;

}

///

<summary>

///

媒体文件上传后,获取时的唯一标识

///

</summary>

public

string

media_id

{

get;

set;

}

///

<summary>

///

媒体文件上传时间戳

///

</summary>

public

string

created_at

{

get;

set;

}

}///

<summary>

///

微信上传多媒体文件

///

</summary>

///

<param

name="filepath">文件绝对路径</param>

public

static

ReceiveModel.UpLoadInfo

WxUpLoad(string

filepath,

string

token,

MediaType

mt)

{

using

(WebClient

client

=

new

WebClient())

{

byte[]

b

=

client.UploadFile(string.Format("/cgi-bin/media/upload?access_token={0}&type={1}",

token,

mt.ToString()),

filepath);//调用接口上传文件

string

retdata

=

Encoding.Default.GetString(b);//获取返回值

if

(retdata.Contains("media_id"))//判断返回值是否包含media_id,包含则说明上传成功,然后将返回的json字符串转换成json

{

return

JsonConvert.DeserializeObject<UpLoadInfo>(retdata);

}

else

{//否则,写错误日志

WriteBug(retdata);//写错误日志

return

null;

}

}

}注意:一旦遇到以下情况,微信都会在公众号会话中,向用户下发系统提示“该公众号暂时无法提供服务,请稍后再试”:1、开发者在5秒内未回复任何内容

2、开发者回复了异常数据,比如JSON数据等<xml><ToUserName><![CDATA[接收方帐号(收到的OpenID)]]></ToUserName><FromUserName><![CDATA[开发者微信号]]></FromUserName><CreateTime>消息创建时间

(整型)</CreateTime><MsgType><![CDATA[image]]></MsgType><Content><![CDATA[回复的消息内容(换行:在content中能够换行,微信客户端就支持换行显示)]]></Content></xml><xml><ToUserName><![CDATA[接收方帐号(收到的OpenID)]]></ToUserName><FromUserName><![CDATA[开发者微信号]]></FromUserName><CreateTime>消息创建时间

(整型)</CreateTime><MsgType><![CDATA[image]]></MsgType><Image><MediaId><![CDATA[通过上传多媒体文件,得到的id。]]></MediaId></Image></xml><xml><ToUserName><![CDATA[接收方帐号(收到的OpenID)]]></ToUserName><FromUserName><![CDATA[开发者微信号]]></FromUserName><CreateTime>消息创建时间

(整型)</CreateTime><MsgType><![CDATA[voice]]></MsgType><Voice><MediaId><![CDATA[通过上传多媒体文件,得到的id。]]></MediaId></Voice></xml><xml><ToUserName><![CDATA[接收方帐号(收到的OpenID)]]></ToUserName><FromUserName><![CDATA[开发者微信号]]></FromUserName><CreateTime>消息创建时间

(整型)</CreateTime><MsgType><![CDATA[video]]></MsgType><Video><MediaId><![CDATA[通过上传多媒体文件,得到的id。]]></MediaId><Title><![CDATA[视频消息的标题]]></Title>

<Description><![CDATA[视频消息的描述]]></Description>

</Video></xml><xml><ToUserName><![CDATA[接收方帐号(收到的OpenID)]]></ToUserName><FromUserName><![CDATA[开发者微信号]]></FromUserName><CreateTime>消息创建时间

(整型)</CreateTime><MsgType><![CDATA[music]]></MsgType><Music><ThumbMediaId><![CDATA[缩略图的媒体id,通过上传多媒体文件,得到的id。]]></ThumbMediaId><Title><![CDATA[视频消息的标题]]></Title>

<Description><![CDATA[视频消息的描述]]></Description>

<MusicURL><![CDATA[音乐链接]]></MusicURL>

<HQMusicUrl><![CDATA[高质量音乐链接,WIFI环境优先使用该链接播放音乐]]></HQMusicUrl>

</Music></xml><xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>12345678</CreateTime><MsgType><![CDATA[news]]></MsgType><ArticleCount>2</ArticleCount><Articles><item><Title><![CDATA[title1]]></Title>

<Description><![CDATA[description1]]></Description><PicUrl><![CDATA[picurl]]></PicUrl><Url><![CDATA[url]]></Url></item><item><Title><![CDATA[title]]></Title><Description><![CDATA[description]]></Description><PicUrl><![CDATA[picurl]]></PicUrl><Url><![CDATA[url]]></Url></item></Articles></xml>///

<summary>

///

消息体基类

///

</summary>

public

abstract

class

BaseMessage

{

///

<summary>

///

开发者微信号

///

</summary>

public

string

ToUserName

{

get;

set;

}

///

<summary>

///

发送方帐号(一个OpenID)

///

</summary>

public

string

FromUserName

{

get;

set;

}

///

<summary>

///

消息创建时间

(整型)

///

</summary>

public

string

CreateTime

{

get;

set;

}

///

<summary>

///

消息类型

///

</summary>

public

MsgType

MsgType

{

get;

set;

}

public

virtual

void

ResponseNull()

{

Utils.ResponseWrite("");

}

public

virtual

void

ResText(EnterParam

param,

string

content)

{

StringBuilder

resxml

=

new

StringBuilder(string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>{2}</CreateTime>",

FromUserName,

ToUserName,

Utils.ConvertDateTimeInt(DateTime.Now)));

resxml.AppendFormat("<MsgType><![CDATA[text]]></MsgType><Content><![CDATA[{0}]]></Content><FuncFlag>0</FuncFlag></xml>",

content);

Response(param,

resxml.ToString());

}

///

<summary>

///

回复消息(音乐)

///

</summary>

public

void

ResMusic(EnterParam

param,

Music

mu)

{

StringBuilder

resxml

=

new

StringBuilder(string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>{2}</CreateTime>",FromUserName,ToUserName,

Utils.ConvertDateTimeInt(DateTime.Now)));

resxml.Append("

<MsgType><![CDATA[music]]></MsgType>");

resxml.AppendFormat("<Music><Title><![CDATA[{0}]]></Title><Description><![CDATA[{1}]]></Description>",

mu.Title,

mu.Description);

resxml.AppendFormat("<MusicUrl><![CDATA[http://{0}{1}]]></MusicUrl><HQMusicUrl><![CDATA[http://{2}{3}]]></HQMusicUrl></Music><FuncFlag>0</FuncFlag></xml>",

VqiRequest.GetCurrentFullHost(),

mu.MusicUrl,

VqiRequest.GetCurrentFullHost(),

mu.HQMusicUrl);

Response(param,

resxml.ToString());

}

public

void

ResVideo(EnterParam

param,

Video

v)

{

StringBuilder

resxml

=

new

StringBuilder(string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>{2}</CreateTime>",FromUserName,ToUserName,

Utils.ConvertDateTimeInt(DateTime.Now)));

resxml.Append("

<MsgType><![CDATA[video]]></MsgType>");

resxml.AppendFormat("<Video><MediaId><![CDATA[{0}]]></MediaId>",

v.media_id);

resxml.AppendFormat("<Title><![CDATA[{0}]]></Title>",

v.title);

resxml.AppendFormat("<Description><![CDATA[{0}]]></Description></Video></xml>",

v.description);

Response(param,

resxml.ToString());

}

///

<summary>

///

回复消息(图片)

///

</summary>

public

void

ResPicture(EnterParam

param,

Picture

pic,

string

domain)

{

StringBuilder

resxml

=

new

StringBuilder(string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>{2}</CreateTime>",FromUserName,ToUserName,

Utils.ConvertDateTimeInt(DateTime.Now)));

resxml.Append("

<MsgType><![CDATA[image]]></MsgType>");

resxml.AppendFormat("<PicUrl><![CDATA[{0}]]></PicUrl></xml>",

domain

+

pic.PictureUrl);

Response(param,

resxml.ToString());

}

///

<summary>

///

回复消息(图文列表)

///

</summary>

///

<param

name="param"></param>

///

<param

name="art"></param>

public

void

ResArticles(EnterParam

param,

List<Articles>

art)

{

StringBuilder

resxml

=

new

StringBuilder(string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>{2}</CreateTime>",FromUserName,ToUserName,

Utils.ConvertDateTimeInt(DateTime.Now)));

resxml.AppendFormat("<MsgType><![CDATA[news]]></MsgType><ArticleCount>{0}</ArticleCount><Articles>",

art.Count);

for

(int

i

=

0;

i

<

art.Count;

i++)

{

resxml.AppendFormat("<item><Title><![CDATA[{0}]]></Title>

<Description><![CDATA[{1}]]></Description>",

art[i].Title,

art[i].Description);

resxml.AppendFormat("<PicUrl><![CDATA[{0}]]></PicUrl><Url><![CDATA[{1}]]></Url></item>",

art[i].PicUrl.Contains("http://")

?

art[i].PicUrl

:

"http://"

+

VqiRequest.GetCurrentFullHost()

+

art[i].PicUrl,

art[i].Url.Contains("http://")

?

art[i].Url

:

"http://"

+

VqiRequest.GetCurrentFullHost()

+

art[i].Url);

}

resxml.Append("</Articles><FuncFlag>0</FuncFlag></xml>");

Response(param,

resxml.ToString());

}

///

<summary>

///

多客服转发

///

</summary>

///

<param

name="param"></param>

public

void

ResDKF(EnterParam

param)

{

StringBuilder

resxml

=

new

StringBuilder();

resxml.AppendFormat("<xml><ToUserName><![CDATA[{0}]]></ToUserName>",FromUserName);

resxml.AppendFormat("<FromUserName><![CDATA[{0}]]></FromUserName><CreateTime>{1}</CreateTime>",ToUserName,CreateTime);

resxml.AppendFormat("<MsgType><![CDATA[transfer_customer_service]]></MsgType></xml>");

Response(param,

resxml.ToString());

}

///

<summary>

///

多客服转发如果指定的客服没有接入能力(不在线、没有开启自动接入或者自动接入已满),该用户会一直等待指定客服有接入能力后才会被接入,而不会被其他客服接待。建议在指定客服时,先查询客服的接入能力指定到有能力接入的客服,保证客户能够及时得到服务。

///

</summary>

///

<param

name="param">用户发送的消息体</param>

///

<param

name="KfAccount">多客服账号</param>

public

void

ResDKF(EnterParam

param,

string

KfAccount)

{

StringBuilder

resxml

=

new

StringBuilder();

resxml.AppendFormat("<xml><ToUserName><![CDATA[{0}]]></ToUserName>",FromUserName);

resxml.AppendFormat("<FromUserName><![CDATA[{0}]]></FromUserName><CreateTime>{1}</CreateTime>",ToUserName,CreateTime);

resxml.AppendFormat("<MsgType><![CDATA[transfer_customer_service]]></MsgType><TransInfo><KfAccount>{0}</KfAccount></TransInfo></xml>",

KfAccount);

Response(param,

resxml.ToString());

}

private

void

Response(EnterParam

param,

string

data)

{

if

(param.IsAes)

{

var

wxcpt

=

new

MsgCrypt(param.token,

param.EncodingAESKey,

param.appid);

wxcpt.EncryptMsg(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论