golang 模拟登陆微信公众平台,突破微信群发每日一条限制
思路:微信后台可以对指定用户进行回复,群发其实就是一个loop,so 模拟POST提交到微信 后台, 模拟登陆,即可突破群发每日一条限制。
直接上代码
/**@author 菠菜君*@Version 0.1*@time 2013-10-30*@go语言实现模拟登陆微信公众平台,突破微信群发每日一条限制*@青岛程序员 微信订阅号 qdprogrammer*@Golang 微信订阅号 gostock*@关于青岛程序员的技术,创业,生活 分享。*@开源 https://github.com/philsong/*/
package mainimport ("crypto/md5""encoding/hex""encoding/json""fmt""io""io/ioutil""log""net/http""net/url""regexp""strings"
)type WebWeChat struct {token stringcookies []*http.Cookie
}func NewWebWeChat() *WebWeChat {w := new(WebWeChat)return w
}func (w *WebWeChat) login() bool {login_url := "https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN"email := "songbohr@163.com"password := "xxx"h := md5.New()h.Write([]byte(password))password = hex.EncodeToString(h.Sum(nil))fmt.Println(password)post_arg := url.Values{"username": {email}, "pwd": {password}, "imgcode": {""}, "f": {"json"}}fmt.Println(strings.NewReader(post_arg.Encode()))req, err := http.NewRequest("POST", login_url, strings.NewReader(post_arg.Encode()))req.Header.Set("Referer", "https://mp.weixin.qq.com/")if err != nil {log.Fatal(err)}client := new(http.Client)resp, _ := client.Do(req)data, _ := ioutil.ReadAll(resp.Body)s := string(data)fmt.Printf("%s", s)doc := json.NewDecoder(strings.NewReader(s))type Msg struct {Ret intErrMsg stringShowVerifyCode, ErrCode int}var m Msgif err := doc.Decode(&m); err == io.EOF {fmt.Println(err)} else if err != nil {log.Println(err)return false}fmt.Println(m)if m.ErrCode == 0 || m.ErrCode == 65201 || m.ErrCode == 65202 {w.token = strings.Split(m.ErrMsg, "=")[3]fmt.Printf("token:%v\n", w.token)w.cookies = resp.Cookies()fmt.Println(w.cookies)return true}switch m.ErrCode {case -1:fmt.Println("系统错误,请稍候再试。")case -2:fmt.Println("帐号或密码错误。")case -3:fmt.Println("您输入的帐号或者密码不正确,请重新输入。")case -4:fmt.Println("不存在该帐户。")case -5:fmt.Println("您目前处于访问受限状态。")case -6:fmt.Println("请输入图中的验证码")case -7:fmt.Println("此帐号已绑定私人微信号,不可用于公众平台登录。")case -8:fmt.Println("邮箱已存在。")case -32:fmt.Println("您输入的验证码不正确,请重新输入。")case -200:fmt.Println("因频繁提交虚假资料,该帐号被拒绝登录。")case -94:fmt.Println("请使用邮箱登陆。")case 10:fmt.Println("该公众会议号已经过期,无法再登录使用。")case -100:fmt.Println("海外帐号请在公众平台海外版登录,<a href=\"http://admin.wechat.com/\">点击登录</a>")default:fmt.Println("未知的返回。")}return false
}func (w *WebWeChat) SendTextMsg(fakeid string, content string) bool {send_url := "http://mp.weixin.qq.com/cgi-bin/singlesend"referer_url := "https://mp.weixin.qq.com/cgi-bin/singlesendpage?t=message/send&action=index&tofakeid=%s&token=%s&lang=zh_CN"post_arg := url.Values{"tofakeid": {fakeid},"type": {"1"},"content": {content},"ajax": {"1"},"token": {w.token},"t": {"ajax-response"},}req, _ := http.NewRequest("POST", send_url, strings.NewReader(post_arg.Encode()))req.Header.Set("Referer", fmt.Sprintf(referer_url, fakeid, w.token))for i := range w.cookies {req.AddCookie(w.cookies[i])}client := new(http.Client)resp, _ := client.Do(req)data, _ := ioutil.ReadAll(resp.Body)doc := json.NewDecoder(strings.NewReader(string(data)))type Msg struct {Ret stringMsg string}var m Msgif err := doc.Decode(&m); err == io.EOF {fmt.Println(err)} else if err != nil {log.Fatal(err)}fmt.Println(m.Msg)if m.Msg == "ok" {return true}return false
}func (w *WebWeChat) GetFakeId() bool {msg_url := "https://mp.weixin.qq.com/cgi-bin/contactmanage?t=user/index&pagesize=10&pageidx=0&type=0&groupid=0&token=%s&lang=zh_CN"referer_url := "https://mp.weixin.qq.com/cgi-bin/home?t=home/index&lang=zh_CN&token=%s"req, _ := http.NewRequest("GET", fmt.Sprintf(msg_url, w.token), nil)req.Header.Set("Referer", fmt.Sprintf(referer_url, w.token))for i := range w.cookies {req.AddCookie(w.cookies[i])}client := new(http.Client)resp, _ := client.Do(req)data, _ := ioutil.ReadAll(resp.Body)//fmt.Println(string(data))fmt.Println(string(data))re := regexp.MustCompile(`(?s)(?U)contacts.+contacts`)list := re.FindString(string(data))list = strings.Replace(list, `contacts`, "", -1)list = strings.Replace(list, `contacts`, "", -1)list = strings.Replace(list, ` `, " ", -1)fmt.Println(list)list = strings.TrimLeft(list, "\":")list = strings.TrimRight(list, "}).")fmt.Println(list)return true
}func main() {wechat := NewWebWeChat()if wechat.login() == true {log.Println(wechat.GetFakeId())tofakeid := "333215495" //my fakeid for testwechat.SendTextMsg(tofakeid, "Hello Phil.")} else {fmt.Println("wechat login failed.")}
}
golang 模拟登陆微信公众平台,突破微信群发每日一条限制相关推荐
- 微信公众开放平台开发03---百度BAE上搭建属于自己的微信公众平台 -JAVA,微信公众开放平台部署到百度云中BASE2.0,进行调试,木有钱买云服务器的亲们试试
微信公众开放平台开发03---百度BAE上搭建属于自己的微信公众平台 -JAVA,微信公众开放平台部署到百度云中BASE2.0,进行调试,木有钱买云服务器的亲们试试 技术qq交流群:JavaDream ...
- 百度云搭建微信公众平台服务器,微信大众开放平台开发03-百度BAE上搭建属于自己的微信公众平台 -JAVA,微信公众开放平台部署到百度云中BASE2.0,进行调试,木有钱买云服务器的亲们试试...
微信公众开放平台开发03---百度BAE上搭建属于自己的微信公众平台 -JAVA,微信公众开放平台部署到百度云中BASE2.0,进行调试,木有钱买云服务器的亲们试试 微信公众开放平台开发03---百度 ...
- 微信公众平台与微信开放平台的区别、服务号、订阅号、企业微信的区别
微信公众平台 vs 微信开放平台 微信公众平台是介绍公众号相关的内容,比如服务号.订阅号.企业微信,所以叫微信公众平台:公众平台也是公众号的管理端,可以编辑推送文章,通常是公众号的运营.开发登录: 微 ...
- 微信公众平台、微信公众平台.小程序、微信.开放平台三者关系及unionid
以下内容,仅限于根据自己开发以及阅读微信文档总结,错误之处敬请指出,共同进步! 一.微信公众平台.微信公众平台.小程序.微信.开放平台登录地址 项目 微信公众平台 微信公众平台.小程序 微信.开放平台 ...
- 微信公众平台推出微信保护提升微信账号安全 附微信保护开启教程
前两天小美女的微信公众平台要群发消息时提示需要绑定手机才能操作,当时还以为是动态ip的问题,今天微信公众平台安全中心就说升级了,原来那时已经在公测了.微信公众平台推出"微信保护", ...
- 微信公众平台—— 获取微信服务器IP地址
微信公众平台-- 获取微信服务器IP地址 const ServerIpUrl = 'https://api.weixin.qq.com/cgi-bin/getcallbackip?&acces ...
- 【微信公众平台】微信营销推广的12种方法,让您的订单增加两倍以上!
如何做好 微信营销是中小企业转型之后遇到最头疼的问题,注册了微信公众平台之后该怎么把自己推销出去呢,三帮网络给你提供微信营销的12种方法. 微信营销是今年新兴电子商务网络推广营销手段,微信推广方案有哪 ...
- 微信公众平台开发--微信网页授权
在微信公众号开发中实现微信用户自动登陆第三方的功能: 条件: 1.公众号必须为微信认证服务号: 2.在公众号接口权限->网页账号 网页授权获取用户基本信息 修改需要OAuth2.0鉴权的域名: ...
- 微信公众平台开发 高级群发接口
在这篇微信公众平台高级接口开发教程中,我们将介绍如何使用接口实现微信公众平台群发功能.本文分为以下四个部分:准备群发内容选择群发对象执行群发接收群发结果一.准备群发内容群发内容可以是文本.图片.语音. ...
- 微信公众平台开发 微信JSSDK开发
根据微信开发文档步骤如下: 1.先登录微信公众平台进入"公众号设置"的"功能设置"里填写"JS接口安全域名". JS接口安全域名设置 mi. ...
最新文章
- php spl的优势,PHP SPL核心库相对以前有什么好处嘛?
- MS Reporting Services 报表开发
- python——字符串常用方法
- 自动生成三层结构代码(3)--生成数据访问层Insert方法
- 自然语言项目之Python语种检测代码实现
- Java基础学习总结(63)——Java集合总结
- 自动完成文本框AutoCompleteTextView
- 计算机是怎样跑起来的
- 【笔记+总结】Andrew Ng-神经网络和深度学习
- CRA图像 Clean Random Access (CRA) Pictures
- 抓住七月的尾巴,出门放松一下
- php如何pfx转成jks证书,常规方法不行,变相来实现
- 三维开发及三维地形和地理信息系统的集成探索
- 订单管理html页面,订单管理.html
- str中的join方法,fromkeys(),set集合,深浅拷贝(重点)
- 模块化 AMD与CMD 规范
- 【转载】不用加号和减号计算两个数的加法
- EAN13条形码了解,有c测试代码
- Mysql数据库insert报慢查询
- 医学图像的一些预处理知识