微信公众平台模拟群发技术

文前 。raspberry FQ路由器文章已跳票。因为准备在gitshell上面先发,带markdown。

微信公共平台 最近比较火。

它自身有简单的自动回复功能(判断条件成立则发送相应的文字、素材图像、图文等)。

感觉有点搞头,于是去找api。官方的不可能有。最简单的方法就是用firebug。

http request 和 response 都取下来。慢慢看,看懂就不用看下文了,看不懂的也不用看下文了,好吧我又纠结了,那还写个毛线啊。

首先是,cookies的处理。直接把firebug里面的cookies字符串以header发过去qq服务器就可以了。
$f = new SaeFetchurl();
$f->setMethod("get");
$f->setHeader("Cookie"," YOUR COOKIE STRING ");

  • 取消息timeline:
    http://mp.weixin.qq.com/cgi-bin/getmessage?t=wxm-message&lang=zh_CN&count=50&timeline=1&day=0
    得到的html从

     

    DATA.List.msgList

    })(WXM, window)

    截取下来,就是timeline的json数据了!!!

    单条消息item解析:(一大堆有的没有的,有用的如下)
    item["type"] 1为文本信息 // 3为音频对讲
    item["fakeId"] 不知道含义,但是回复消息的时候就用这个id就行!
    item["content"] 发过来的消息的文本
    item["id"] – 取某条音频消息的mp3数据时候有用

  • 发消息:http://mp.weixin.qq.com/cgi-bin/singlesend?t=ajax-response&lang=zh_CN

     

    $f = new SaeFetchurl();
    $f->setMethod("post");
    $f->setHeader("Cookie"," YOUR COOKIE STRING ");
    $f->setPostData(
    array(
    "ajax"=> "true" ,
    "content" => "要发送给用户的消息正文" ,
    "error" => "false",
    "tofakeid"=>"用户的fakeid(在上面的接口的json数据里面有)",
    "type"=>"1",
    )
    );
    $ret=$f->fetch("http://mp.weixin.qq.com/cgi-bin/singlesend?t=ajax-response&lang=zh_CN");
    if($f->errno() == 0) echo $ret;
    else echo $f->errmsg();

     

  • 取消息音频(mp3格式,额,严格来说是mp2.5….)

    $f->fetch("http://mp.weixin.qq.com/cgi-bin/getvoicedata?uin=*******&skey=******&msgid=".消息id(见上文)."&fileid=0")

    直接取,得到的数据直接可以存成mp3文件,不知道为何微信为什么要这么做。。。

下篇将会介绍如何实现机器人和用户在微信公共平台直接用语音来聊天:

科大讯飞语音云SDK(听写、识别)(把linux SDK做成服务器,json REST) +
微信公共平台(本文提到api) +
Aiml人工智能聊天(中文支持处理)

 

 

今天初来乍到cnode.js,也应该贡献贡献.看到微信公众平台,开始有点兴奋,能做个机器人玩玩,,随后用Node.js写了一个,觉得其实这没什么意思.很快就觉得腻了,于是有了做发送微信接口的想法.首先要做的我们就要模拟公众平台的登陆.对于微信的这些lib,当然不能直接写在routes里面,,那要怎么办呢?没错,就要封装起来,方便复用.你可以打开控制台看到公众平台的登录请求,还有所需的参数,其中密码它是用它本身的md5进行加密的,那么我们需要做的只是将它copy过来放在一个helpers/wx/md5.js文件里就可以直接用了,以下是微信公众平台解析后格式化的js提交代码

submit:function(){if(!n())return;var e = d.getVal();
         t.post("/cgi-bin/login?lang=zh_CN",{
            username: e.account,
            pwd1: t.md5(e.password.substr(0,15)),
            pwd2: t.md5(e.password),
            imgcode: f.data("isHide")?"": e.verify,register: e.isRegister,
            f:"json"},

我们要建立一个login的方法

request =require'superagent'require __basename +'/helpers/wx/md5'
config =require __basename +'/config/config'module.exports =
  login:(fn)->
    wx_usr = config.wx.user
    wx_pwd = md5 config.wx.pwd.substr(0,16)
    request
      .post('http://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN').type('form').send(
        username: wx_usr
        pwd: wx_pwd
        imgcode :''
        f :'json'register:0).end(res)->//在这里你已经成功获取cookie了

但是经过分析我想你会发现,这里的cookie其实并非你想要的cookie,因为它包含一些没用的信息Path=,我们设置cookie的时候,事实上是不能用直接设置这样的cookie,应该是一个cookie里面不应该有其他的东西,而分号后面的path应该将它去掉,这里是返回的结果:

["mp_user=xxxxxx; Path=/","mp_sid=NlJ2Tm5hb1NXRGxOU3V1MzF2a25tSFVWRHhTNkhwek1nMXlEOVZzMnZMUG1lZ29nSkdENGt3WlgwUjBJZnhydndYNkZSd0ZsaHRHdEozSHBIa3QwT3FWTmdXc3RxVFhYUDBCR3dnWkxIRWVvRlZObG15UC83SzU1aEZPZWpocU8=; Path=/"]

以下是完整的login代码:

login:(fn)->
    wx_usr = config.wx.user
    wx_pwd = md5 config.wx.pwd
    request
      .post('http://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN').type('form').send(
        username: wx_usr
        pwd1: wx_pwd
        pwd2: wx_pwd
        imgcode :''
        f :'json').end(res)->
        cookie =''for rs in res.header['set-cookie']
          cookie += rs.replace(/Path=\//g,'')
        fn null, cookie

在这里,我们已经完成登录的操作了,接下来,我们要做的是进行发送,在发送的时候,要把这个cookie设置在请求的地址中,接下来的代码比较简单:(注意:这里面的fakeid是微信公众平台的id,我们可以用控制台去微信公众平台的用户管理中查看,如何获取用户好友的fakeid,接下来一章我会讲)

sender:(options, fn)->
    msg = options.msg
    fakeid = options.fakeid

    unless msg
      fn error:'missing msg'returnunless fakeid
      fn error:'missing fakeid'return

    psotParams =
      type:1
      content: msg
      error:false
      tofakeid : fakeid
      ajax :1

    request
      .post('http://mp.weixin.qq.com/cgi-bin/singlesend?t=ajax-response&lang=zh_CN').type('form').send(psotParams).set('Cookie', options.cookie).end(res)->
        fn null, JSON.parse res.text

这里,我们已经能完全发送了,因为返回的结果是一个json,所要最好先JSON.parse一下,里面的成功判断大家可以加上,返回的接口有个叫ret的参数,0为发送成功

{
ret:"0",
msg:"ok"}

下一章,我会为大家深入讲解怎么发送信息给好友,及获取微信头像等等技术

 

sender目前只能实现文字text的发送,但这并不完善,也可以实现图文的发送,但是却必须要上传一张封面图片,上传后需要在发送图文信息的时候把返回结果中的formId拿到,http://mp.weixin.qq.com/cgi-bin/uploadmaterial?cgi=uploadmaterial&type=2&t=iframe-uploadfile&lang=zh_CN&formId=1其中的参数type是上传的类型,语音和视频是0,formId为null.上传封面图片接口如下:

uploadmaterial:(fn)->@login(err, cookie)->
      request
        .post('http://mp.weixin.qq.com/cgi-bin/uploadmaterial?cgi=uploadmaterial&type=2&t=iframe-uploadfile&lang=zh_CN&formId=1').type('form').set('Cookie', cookie).end(res)->
          results = JSON.parse(res.text).match(/formId, '(\d+)'/)[2]
          fn null, results

成功后,可以进行图文消息的发送了.

  send_appmsg:(options, fn)->@login(err, cookie)->
      psotParams =
        error       :false
        count       :1AppMsgId:null
        title0      : options.title
        digest0     :'正文内容'# content0    : '<p>te<img src="http://www.e-research-solutions.com/system/cms/themes/default/img/top_l.png" /></p><p><span style="color:red">测试标题</span></p>'
        content0    : options.msg
        fileid0     :'10000001'#此处的id即为封面图片的id
        preusername : options.username
        ajax        :1
      request
        .post('http://mp.weixin.qq.com/cgi-bin/operate_appmsg?sub=preview&t=ajax-appmsg-preview').type('form').set('Cookie', cookie).send(psotParams).end(res)->
          results = JSON.parse res.text
          fn null, results['msg']
时间: 2024-09-16 12:28:54

微信公众平台模拟群发技术的相关文章

微信公众平台定时群发功能终于到来了

万众期待的微信公众平台定时群发功能终于来了!就在刚刚,微信团队宣布公众号推送的消息可以定时群发了.官方表示"为了方便公众号运营者更灵活地推送消息,公众平台新增定时群发功能,开放给所有公众号使用."以下是具体的操作方法: 01.群发界面可以选择定时群发 群发界面选中素材后,除了可以直接群发,还可以选择定时群发. 02.设置群发时刻 你可以定时五分钟后的今.明两天内任意时刻群发,成功设置将占用群发时刻当天的一条群发条数.定时消息不支持修改,修改素材库消息也不会改动定时消息的内容. 03.定

微信公众平台高级群发接口

出自微信公众平台开发者文档 在公众平台网站上,为订阅号提供了每天一条的群发权限,为服务号提供每月(自然月)4条的群发权限.而对于某些具备开发能力的公众号运营者,可以通过高级群发接口,实现更灵活的群发能力. 请注意: 1.该接口暂时仅提供给已微信认证的服务号 2.高级群发接口的每日调用限制为10次,请小心测试 3.无论在公众平台网站上,还是使用接口群发,用户每月只能接收4条群发消息,多于4条的群发将对该用户发送失败. 目录 [隐藏] 1 上传图文消息素材 2 根据分组进行群发 3 根据OpenID

微信公众平台模拟登录之验证码获取

这个时候平台首页的登录逻辑就会经常出现无法登录的状态,前几天写了一个抓取验证码要求用户输入,这个么有做多少代码的调整,主要是 让前端写了一写js直接调用微信公众平台的验证码连接了,发现不行,两个方面: 1.imgcode这个表单名打错了 2.在抓包的时候突然发现获取验证码的连接有设置cookie的 发现问题后这些都不是什么大事了,码码代码松松解决: public function getImgCode($username){  $str = $this -> getcurl()-> get(&

微信公众平台测试群发消息公开阅读次数和点赞数

微信公众平台这几天在小范围测试公开阅读次数.点赞数,只有一个微信公众号才会显示,有三个地方新改变:文章标题下的作者信息前加了一个"by",换行显示日期.每篇文章的阅读次数和公众账号信息,同时,在文章末尾可对文章进行点赞,还有具体的点赞次数.(微信阅读数和点赞数怎么算)如下图所示 在同一天,腾讯宣布旗下微博"不再做更新,只维持其基本运转",腾讯微博只维持基本运营,不再做新产品开发.这是微信正在微博化的节奏吗?还微信入侵腾讯微博?谁知道呢?!有微信和手Q就够了,甚至说有

关于 微信公众平台高级群发接口的一些问题(.net)

问题描述 .net我试了下这个接口,素材已经成功提交,也返回给了我一个media_id具体的json是{"media_id":"otV-SZTBm0_It6Z0YxekI_4jICHH_gvDWXY2Safj6ggLmVT35PSh52sAkvK_zV6d"}这是已经成功提交素材了,可是我去公众平台素材管理里边去看,并没有我刚才上传的素材,请问提交成功的素材在哪可以看到啊? 解决方案

微信公众平台模拟登录的返回码{&amp;amp;quot;base_resp&amp;amp;quot;:{&amp;amp;quot;ret&amp;amp;quot;:10706,&amp;amp;quot;err_msg&amp;amp;quot;:&amp;amp;quot;customer block&amp;amp;quot;}},求解!

问题描述 {"base_resp":{"ret":10706,"err_msg":"customerblock"}}是什么意思?有什么解决的方法吗?求高人指点.. 解决方案 解决方案二:这就是一个json串你既然用了人家的API我想肯定有对应的说明文档来解释这些参数的含义的.解决方案三:这个原因是因为你超过24小时未活动而被阻挡造成的,重新激活吧.解决方案四:楼主这个问题解决了吗?我也碰到这个问题了解决方案五:如果都符合API

《微信公众平台开发最佳实践》——导读

前 言 出版说明 自从方倍工作室在博客园推出微信公众平台开发系列教程后,受到广大微信开发人员及爱好者的热情关注,相关文章的日访问量高达2万人次,而<微信公众平台开发入门教程>的阅读量超过50万,博客访问量总计超过500万,成为微信公众平台开发更新最快,传播最广.受众最多.资料最全的博客,很多博文被许多有影响力的网站转载,并被各大搜索引擎收录且排名靠前,这些是我们始料未及的. 然而更让人高兴的是,很多开发者通过学习我们的教程掌握了微信公众平台开发技术,并且通过微信开发赚到了钱.2013年10月1

微信公众平台开发最佳实践(第2版)

  <微信公众平台开发最佳实践 第2版>微信公众平台开发经典之作全新改版,精心挑选最经典的商业项目开发,成千上万人次微信公众平台开发者从中受益 方倍工作室已出版本书的第3版电子版,内容更多,价格更优惠,欢迎查看购买,地址:http://www.cnblogs.com/txw1958/p/buy-ebook.html       前言 出版说明 自从方倍工作室在博客园推出微信公众平台开发系列教程后,受到广大微信开发人员及爱好者的热情关注,相关文章的日访问量高达2万人次,而<微信公众平台开发

php微信公众平台开发之微信群发信息_php实例

1.目的 完成在微信公众号中群发消息.这里只是完成简单的文字发送.也可以发送语音图片等,只是发送数据格式不同而已,下面有链接,可以查询数据类型的数据发送格式. 2.群发短信的流程 获取测试公众账号(有账号的可以不用测试账号,不过正式的账号限制比较多)用户关注上面的公众账号通过appid和appsecret获取我们的access_token通过access_token群发短信 3.获取测试公众账号 + 关注公众号 1).公众测试账号获取 访问上面的连接,选择"接口测试号申请"获得直接打开