




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业产业园场地调研与市场分析咨询服务协议
- 车祸责任划分及经济补偿合同
- 互联网医疗场内委托医护人才招聘合同
- 举办公益跑活动方案
- 房地产公司行政管理制度
- 工程成本审计管理制度
- 华池县探亲费管理制度
- 2023学年深圳市南山区八年级语文下学期期末试卷附答案解析
- 公司格式合同管理制度
- 山西外出培训管理制度
- 医疗器械监督管理条例培训试题
- 小升初数学知识点总结(小考复习精编专项讲义)六年级数学小升初复习系列:数与式知识点梳理大全
- E+H-压力变送器培训
- 统编版高中语文必修下册《跨媒介阅读与交流》标准课件
- 重庆市地质灾害专业监测预警技术要求(试行)
- 中国抗血栓药物相关出血诊疗规范专家共识(2022年版)解读
- 垃圾电站焚烧炉安装施工方案
- 伊东丰雄作品分析
- 7.2.17.2.2 任意角的三角函数 同角三角函数的关系
- 自动售货机设备采购投标方案(技术方案)
- 西方经济学教案要素价格理论课件
评论
0/150
提交评论