mvc 实现微信公众号主动推送消息

hbgdluck 2014-02-28 03:20:57
去年做的项目,去年还能用,但是今天来用,发现用不了了。
我的功能是 模拟登录, 获取用户fakeid ,然后循环发消息。现在不能用了。求大神解决。
这是获取用户fakeid的代码,请求的时候会报错。基础连接已经关闭: 发送时发生错误

/// <summary>
/// 获取用户ID
/// </summary>
/// <param name="count">需要获取的用户数</param>
/// <param name="pageidx">当前页(默认为0)</param>
/// <param name="groupid">分组ID(默认为0,表示未分组的用户)</param>
/// <returns></returns>
public static ArrayList SubscribeMP(int? pagesize, int? pageidx, int? groupid)
{
try
{
/*获取用户信息的url,这里有几个参数给大家讲一下,1.token此参数为上面的token 2.pagesize此参数为每一页显示的记录条数3.pageid为当前的页数,4.groupid为微信公众平台的用户分组的组id*/
CookieContainer cookie = null;
string token = null;
cookie = WeiXinLoginCookie.LoginCookie;//取得cookie
token = WeiXinLoginCookie.Token;//取得token
string Url = " https://mp.weixin.qq.com/cgi-bin/contactmanage?t=user/index&pagesize=" + pagesize + "&pageidx=" + pageidx + "&type=0&token=" + token + "&lang=zh_CN";
HttpWebRequest webRequest2 = (HttpWebRequest)WebRequest.Create(Url);
webRequest2.CookieContainer = cookie;
webRequest2.ContentType = "text/html; charset=UTF-8";
webRequest2.Method = "GET";
webRequest2.ContentType = "application/x-www-form-urlencoded";
webRequest2.UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1";
//webRequest2.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36";
HttpWebResponse response2 = (HttpWebResponse)webRequest2.GetResponse();
StreamReader sr2 = new StreamReader(response2.GetResponseStream(), Encoding.Default);
string text2 = sr2.ReadToEnd();

UTF8Encoding utf8 = new UTF8Encoding();
Byte[] encodedBytes = utf8.GetBytes(text2);
String decodedString = utf8.GetString(encodedBytes);
text2 = decodedString;
MatchCollection mc;
//由于此方法获取过来的信息是一个html网页所以此处使用了正则表达式,注意:(此正则表达式只是获取了fakeid的信息如果想获得一些其他的信息修改此处的正则表达式就可以了。)
Regex r = new Regex("\"id\":\\d+,\"nick_name\""); //定义一个Regex对象实例
mc = r.Matches(text2);
Int32 friendSum = mc.Count; //好友总数
string fackID = "";
ArrayList fackID1 = new ArrayList();
for (int i = 0; i < friendSum; i++)
{
fackID = mc[i].Value.Split(new char[] { ':' })[1];
fackID = fackID.Replace(",\"nick_name\"", "").Trim();
fackID1.Add(fackID);
}

return fackID1;



}
catch (Exception ex)
{
throw new Exception(ex.StackTrace);
}
}



/// <summary>
/// 发送文字消息
/// </summary>
/// <param name="Message">消息内容</param>
/// <param name="fakeid">用户fakeid</param>
/// <returns></returns>
public static bool SendMsgText(string Message, string fakeid)
{
bool result = false;
string strMsg = System.Web.HttpUtility.UrlEncode(Message);
string padate = "type=1&content=" + strMsg + "&error=false&tofakeid=" + fakeid + "&token=" + WeiXinLoginCookie.Token + "&ajax=1";
string url = "https://mp.weixin.qq.com/cgi-bin/singlesend?t=ajax-response&lang=zh_CN";
byte[] byteArray = Encoding.UTF8.GetBytes(padate); // 转化
HttpWebRequest webRequest2 = (HttpWebRequest)WebRequest.Create(url);
webRequest2.CookieContainer = WeiXinLoginCookie.LoginCookie; //登录时得到的缓存
webRequest2.Referer = "https://mp.weixin.qq.com/cgi-bin/singlesendpage?t=message/send&action=index&tofakeid=" + fakeid + "&token=" + WeiXinLoginCookie.Token + "&lang=zh_CN";
webRequest2.Method = "POST";
webRequest2.UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1";
webRequest2.ContentType = "application/x-www-form-urlencoded";
webRequest2.ContentLength = byteArray.Length;
Stream newStream = webRequest2.GetRequestStream();
// Send the data.
newStream.Write(byteArray, 0, byteArray.Length); //写入参数
newStream.Close();
HttpWebResponse response2 = (HttpWebResponse)webRequest2.GetResponse();
StreamReader sr2 = new StreamReader(response2.GetResponseStream(), Encoding.Default);
string text2 = sr2.ReadToEnd();
if (text2.Contains("ok") || text2.Contains("10706") || text2.Contains("10703"))
{
result = true;
}
return result;
}
...全文
937 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_32065643 2016-09-21
  • 打赏
  • 举报
回复
引用 10 楼 mp0258463 的回复:
微信升级了 原来的代码要改下 才可以用了。
你好 请问怎么改呢
LMAOhuaNL 2014-03-03
  • 打赏
  • 举报
回复
哥们,很明显腾讯不允许你这样干了,之前是可以的,现在不可以的,现在他有对应的接口的
hbgdluck 2014-03-03
  • 打赏
  • 举报
回复
引用 5 楼 myhope88 的回复:
估计人家接口有变化了吧
这个是模拟登录,然后模拟给微信发消息,去年还行,今年就不行了。
hbgdluck 2014-03-03
  • 打赏
  • 举报
回复
引用 4 楼 Johnson674423584 的回复:
腾讯加强验证了
有没有别的办法?
myhope88 2014-03-03
  • 打赏
  • 举报
回复
估计人家接口有变化了吧
异常异长 2014-03-03
  • 打赏
  • 举报
回复
腾讯开发平台应该有你想要的
Trace__ 2014-03-03
  • 打赏
  • 举报
回复
微信升级了 原来的代码要改下 才可以用了。
hbgdluck 2014-03-03
  • 打赏
  • 举报
回复
引用 8 楼 LMAOhuaNL 的回复:
哥们,很明显腾讯不允许你这样干了,之前是可以的,现在不可以的,现在他有对应的接口的
哦知道了谢谢了,现在公司服务号已经认证高级接口。正在尝试认证的高级接口
Ho_Johnson 2014-03-02
  • 打赏
  • 举报
回复
腾讯加强验证了
YunDuanZiYuan 2014-03-02
  • 打赏
  • 举报
回复
看看,貌似不错的功能
rtdb 2014-02-28
  • 打赏
  • 举报
回复
> 基础连接已经关闭: 发送时发生错误。 这是网络层的错误,测试要连接的服务器。 试试直接用浏览器开那个WEB。
hbgdluck 2014-02-28
  • 打赏
  • 举报
回复
自己顶 千万别沉了

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧