【移动应用开发技术】C#微信公众平台开发之高级群发接口的示例分析_第1页
【移动应用开发技术】C#微信公众平台开发之高级群发接口的示例分析_第2页
【移动应用开发技术】C#微信公众平台开发之高级群发接口的示例分析_第3页
【移动应用开发技术】C#微信公众平台开发之高级群发接口的示例分析_第4页
【移动应用开发技术】C#微信公众平台开发之高级群发接口的示例分析_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

【移动应用开发技术】C#微信公众平台开发之高级群发接口的示例分析

一、为了实现高级群发功能,需要解决的问题二、实现步骤,以根据OpenID列表群发图文消息为例/upload/information/20201208/260/14855.jpgDataTable

dt

=

ImgItemDal.GetImgItemTable(loginUser.OrgID,

data);///

<summary>

///

Http上传文件

///

</summary>

public

static

string

HttpUploadFile(string

url,

string

path)

{

//

设置参数

HttpWebRequest

request

=

WebRequest.Create(url)

as

HttpWebRequest;

CookieContainer

cookieContainer

=

new

CookieContainer();

request.CookieContainer

=

cookieContainer;

request.AllowAutoRedirect

=

true;

request.Method

=

"POST";

string

boundary

=

DateTime.Now.Ticks.ToString("X");

//

随机分隔线

request.ContentType

=

"multipart/form-data;charset=utf-8;boundary="

+

boundary;

byte[]

itemBoundaryBytes

=

Encoding.UTF8.GetBytes("\r\n--"

+

boundary

+

"\r\n");

byte[]

endBoundaryBytes

=

Encoding.UTF8.GetBytes("\r\n--"

+

boundary

+

"--\r\n");

int

pos

=

path.LastIndexOf("\\");

string

fileName

=

path.Substring(pos

+

1);

//请求头部信息

StringBuilder

sbHeader

=

new

StringBuilder(string.Format("Content-Disposition:form-data;name=\"file\";filename=\"{0}\"\r\nContent-Type:application/octet-stream\r\n\r\n",

fileName));

byte[]

postHeaderBytes

=

Encoding.UTF8.GetBytes(sbHeader.ToString());

FileStream

fs

=

new

FileStream(path,

FileMode.Open,

FileAccess.Read);

byte[]

bArr

=

new

byte[fs.Length];

fs.Read(bArr,

0,

bArr.Length);

fs.Close();

Stream

postStream

=

request.GetRequestStream();

postStream.Write(itemBoundaryBytes,

0,

itemBoundaryBytes.Length);

postStream.Write(postHeaderBytes,

0,

postHeaderBytes.Length);

postStream.Write(bArr,

0,

bArr.Length);

postStream.Write(endBoundaryBytes,

0,

endBoundaryBytes.Length);

postStream.Close();

//发送请求并获取相应回应数据

HttpWebResponse

response

=

request.GetResponse()

as

HttpWebResponse;

//直到request.GetResponse()程序才开始向目标网页发送Post请求

Stream

instream

=

response.GetResponseStream();

StreamReader

sr

=

new

StreamReader(instream,

Encoding.UTF8);

//返回结果网页(html)代码

string

content

=

sr.ReadToEnd();

return

content;

}///

<summary>

///

上传媒体返回媒体ID

///

</summary>

public

static

string

UploadMedia(string

access_token,

string

type,

string

path)

{

//

设置参数

string

url

=

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

access_token,

type);

return

HttpRequestUtil.HttpUploadFile(url,

path);

}string

msg

=

WXApi.UploadMedia(access_token,

"image",

path);

//

上图片返回媒体IDstring

media_id

=

Tools.GetJsonValue(msg,

"media_id");string

path

=

MapPath(data);///

<summary>

///

拼接图文消息素材Json字符串

///

</summary>

public

static

string

GetArticlesJsonStr(PageBase

page,

string

access_token,

DataTable

dt)

{

StringBuilder

sbArticlesJson

=

new

StringBuilder();

sbArticlesJson.Append("{\"articles\":[");

int

i

=

0;

foreach

(DataRow

dr

in

dt.Rows)

{

string

path

=

page.MapPath(dr["ImgUrl"].ToString());

if

(!File.Exists(path))

{

return

"{\"code\":0,\"msg\":\"要发送的图片不存在\"}";

}

string

msg

=

WXApi.UploadMedia(access_token,

"image",

path);

//

上图片返回媒体ID

string

media_id

=

Tools.GetJsonValue(msg,

"media_id");

sbArticlesJson.Append("{");

sbArticlesJson.Append("\"thumb_media_id\":\""

+

media_id

+

"\",");

sbArticlesJson.Append("\"author\":\""

+

dr["Author"].ToString()

+

"\",");

sbArticlesJson.Append("\"title\":\""

+

dr["Title"].ToString()

+

"\",");

sbArticlesJson.Append("\"content_source_url\":\""

+

dr["TextUrl"].ToString()

+

"\",");

sbArticlesJson.Append("\"content\":\""

+

dr["Content"].ToString()

+

"\",");

sbArticlesJson.Append("\"digest\":\""

+

dr["Content"].ToString()

+

"\",");

if

(i

==

dt.Rows.Count

-

1)

{

sbArticlesJson.Append("\"show_cover_pic\":\"1\"}");

}

else

{

sbArticlesJson.Append("\"show_cover_pic\":\"1\"},");

}

i++;

}

sbArticlesJson.Append("]}");

return

sbArticlesJson.ToString();

}///

<summary>

///

请求Url,发送数据

///

</summary>

public

static

string

PostUrl(string

url,

string

postData)

{

byte[]

data

=

Encoding.UTF8.GetBytes(postData);

//

设置参数

HttpWebRequest

request

=

WebRequest.Create(url)

as

HttpWebRequest;

CookieContainer

cookieContainer

=

new

CookieContainer();

request.CookieContainer

=

cookieContainer;

request.AllowAutoRedirect

=

true;

request.Method

=

"POST";

request.ContentType

=

"application/x-www-form-urlencoded";

request.ContentLength

=

data.Length;

Stream

outstream

=

request.GetRequestStream();

outstream.Write(data,

0,

data.Length);

outstream.Close();

//发送请求并获取相应回应数据

HttpWebResponse

response

=

request.GetResponse()

as

HttpWebResponse;

//直到request.GetResponse()程序才开始向目标网页发送Post请求

Stream

instream

=

response.GetResponseStream();

StreamReader

sr

=

new

StreamReader(instream,

Encoding.UTF8);

//返回结果网页(html)代码

string

content

=

sr.ReadToEnd();

return

content;

}///

<summary>

///

上传图文消息素材返回media_id

///

</summary>

public

static

string

UploadNews(string

access_token,

string

postData)

{

return

HttpRequestUtil.PostUrl(string.Format("/cgi-bin/media/uploadnews?access_token={0}",

access_token),

postData);

}string

articlesJson

=

ImgItemDal.GetArticlesJsonStr(this,

access_token,

dt);

string

newsMsg

=

WXApi.UploadNews(access_token,

articlesJson);

string

newsid

=

Tools.GetJsonValue(newsMsg,

"media_id");///

<summary>

///

获取关注者OpenID集合

///

</summary>

public

static

List<string>

GetOpenIDs(string

access_token)

{

List<string>

result

=

new

List<string>();

List<string>

openidList

=

GetOpenIDs(access_token,

null);

result.AddRange(openidList);

while

(openidList.Count

>

0)

{

openidList

=

GetOpenIDs(access_token,

openidList[openidList.Count

-

1]);

result.AddRange(openidList);

}

return

result;

}

///

<summary>

///

获取关注者OpenID集合

///

</summary>

public

static

List<string>

GetOpenIDs(string

access_token,

string

next_openid)

{

//

设置参数

string

url

=

string.Format("/cgi-bin/user/get?access_token={0}&next_openid={1}",

access_token,

string.IsNullOrWhiteSpace(next_openid)

?

""

:

next_openid);

string

returnStr

=

HttpRequestUtil.RequestUrl(url);

int

count

=

int.Parse(Tools.GetJsonValue(returnStr,

"count"));

if

(count

>

0)

{

string

startFlg

=

"\"openid\":[";

int

start

=

returnStr.IndexOf(startFlg)

+

startFlg.Length;

int

end

=

returnStr.IndexOf("]",

start);

string

openids

=

returnStr.Substring(start,

end

-

start).Replace("\"",

"");

return

openids.Split(',').ToList<string>();

}

else

{

return

new

List<string>();

}

}///

<summary>

///

图文消息json

///

</summary>

public

static

string

CreateNewsJson(string

media_id,

List<string>

openidList)

{

StringBuilder

sb

=

new

StringBuilder();

sb.Append("{\"touser\":[");

sb.Append(string.Join(",",

openidList.ConvertAll<string>(a

=>

"\""

+

a

+

"\"").ToArray()));

sb.Append("],");

sb.Append("\"msgtype\":\"mpnews\",");

sb.Append("\"mpnews\":{\"media_id\":\""

+

media_id

+

"\"}");

sb.Append("}");

return

sb.ToString();

}resultMsg

=

WXApi.Send(access_token,

WXMsgUtil.CreateNewsJson(newsid,

openidList));///

<summary>

///

根据OpenID列表群发

///

</summary>

public

static

string

Send(string

access_token,

string

postData)

{

return

HttpRequestUtil.PostUrl(string.Format("/cgi-bin/message/mass/send?access_token={0}",

access_token),

postData);

}///

<summary>

///

群发

///

</summary>

public

string

Send()

{

string

type

=

Request["type"];

string

data

=

Request["data"];

string

access_token

=

AdminUtil.GetAccessToken(this);

//获取access_token

List<string>

openidList

=

WXApi.GetOpenIDs(access_token);

//获取关注者OpenID列表

UserInfo

loginUser

=

AdminUtil.GetLoginUser(this);

//当前登录用户

string

resultMsg

=

null;

//发送文本

if

(type

==

"1")

{

resultMsg

=

WXApi.Send(access_token,

WXMsgUtil.CreateTextJson(data,

openidList));

}

//发送图片

if

(type

==

"2")

{

string

path

=

MapPath(data);

if

(!File.Exists(path))

{

return

"{\"code\":0,\"msg\":\"要发送的图片不存在\"}";

}

string

msg

=

WXApi.UploadMedia(access_token,

"image",

path);

string

media_id

=

Tools.GetJsonValue(msg,

"media_id");

resultMsg

=

WXApi.Send(access_token,

WXMsgUtil.CreateImageJson(media_id,

openidList));

}

//发送图文消息

if

(type

==

"3")

温馨提示

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

最新文档

评论

0/150

提交评论