![【移动应用开发技术】C#微信公众平台开发之高级群发接口的示例分析_第1页](http://file4.renrendoc.com/view/712106e84dffd062268154c762815451/712106e84dffd062268154c7628154511.gif)
![【移动应用开发技术】C#微信公众平台开发之高级群发接口的示例分析_第2页](http://file4.renrendoc.com/view/712106e84dffd062268154c762815451/712106e84dffd062268154c7628154512.gif)
![【移动应用开发技术】C#微信公众平台开发之高级群发接口的示例分析_第3页](http://file4.renrendoc.com/view/712106e84dffd062268154c762815451/712106e84dffd062268154c7628154513.gif)
![【移动应用开发技术】C#微信公众平台开发之高级群发接口的示例分析_第4页](http://file4.renrendoc.com/view/712106e84dffd062268154c762815451/712106e84dffd062268154c7628154514.gif)
![【移动应用开发技术】C#微信公众平台开发之高级群发接口的示例分析_第5页](http://file4.renrendoc.com/view/712106e84dffd062268154c762815451/712106e84dffd062268154c7628154515.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年昆明货运驾驶员从业资格证考试
- 消化系统疾病病人诊查 呕血的病因和发病机制
- 会计法试题含答案
- 草牧场承包合同2025年-草原生态环境保护与草牧场承包合作框架协议6篇
- 二零二五版项目部人员聘用合同样本下载2篇
- 2025年镉镍航空蓄电池合作协议书
- 2024-2025版高中化学第4章非金属及其化合物第2节富集在海水中的元素-氯练习含解析新人教版必修1
- 2024-2025学年高中政治第二单元探索世界与追求真理第6课第1框人的认识从何而来随堂作业含解析新人教版必修4
- 化学九年级上册第五单元《化学方程式》测试卷5份含答案(人教版)
- 2024-2025学年新教材高中化学第二章海水中的重要元素-钠和氯7活泼的金属单质-钠练习含解析新人教版必修第一册
- 2024复工复产安全培训
- 2025中国南光集团限公司校园招聘高频重点提升(共500题)附带答案详解
- 机加工行业安全生产风险辨识及控制清单
- 《大坝安全检测》课件
- 江苏省苏州市2024-2025学年第一学期八年级数学期末模拟卷(一)(无答案)
- 呼吸科护理组长述职报告
- 【历史】秦汉时期:统一多民族国家的建立和巩固复习课件-2024-2025学年统编版七年级历史上册
- 四年级上册科学教科版课件四年级科学开学第一课
- 社区中心及卫生院65岁及以上老年人健康体检分析报告模板
- 化工过程安全管理导则AQT 3034-2022知识培训
- 肿瘤中医中药治疗护理
评论
0/150
提交评论