精华内容
下载资源
问答
  • 建了个人工具类的微信...废话不多说。...我自己也是个初学真,做个记录,也希望能帮助到别人。微信公众平台网址 https://mp.weixin.qq.com以下操作使用使用chrome示范:打开微信公众平台,输入账号密码,用F12键打开开...

    建了个人工具类的微信公众账号,想主动推动微信消息给自己的账号,可是微信没有提供公开的api,只能通过模拟登陆网页版的公众平台结合sae平台来对用户进行消息的推送。

    废话不多说。下面是模拟登陆的思路和代码。我自己也是个初学真,做个记录,也希望能帮助到别人。

    微信公众平台网址 https://mp.weixin.qq.com

    以下操作使用使用chrome示范:

    打开微信公众平台,输入账号密码,用F12键打开开发者工具,打开Network标签,点击preserve log upon navigation 使其变为红色按钮 ,不然跳转之后请求记录会被清除。

    0818b9ca8b590ca3270a3433284dd417.png

    点击登录按钮,成功进入公众账号管理平台后可以找到login?lang=zh_cn请求。打击打开:0818b9ca8b590ca3270a3433284dd417.png

    可以看到请求头和post 的数据,把各个请求头逐个加入请求头内里,密码应该是md5加密过的,可以直接复制post里加密后的密码到代码里。该请求返回的是json数据,使用json库处理。

    正确返回的数据如下:

    {

    "Ret": 302,

    "ErrMsg": "/cgi-bin/home?t=home/index&lang=zh_CN&token=xxxxxxxx",

    "ShowVerifyCode": 0,

    "ErrCode": 0

    }

    返回的token很重要,而且每次返回的token可能不一样。要在代码里设置变量保存。此外还要主要处理cookie,以下为登陆的代码:

    #-*- coding:utf-8 -*-

    import urllib

    import urllib2

    import cookielib

    import json

    cj=cookielib.LWPCookieJar()

    opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

    urllib2.install_opener(opener)

    #登陆

    paras={'username':'xxxxxx@163.com','pwd':'xxxxxxxxxxxxxxxxxxxx','imgcode':'','f':'json'}

    req=urllib2.Request('https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN',urllib.urlencode(paras))

    req.add_header('Accept','application/json, text/javascript, */*; q=0.01')

    req.add_header('Accept-Encoding','gzip,deflate,sdch')

    req.add_header('Accept-Language','zh-CN,zh;q=0.8')

    req.add_header('Connection','keep-alive')

    req.add_header('Content-Length','79')

    req.add_header('Content-Type','application/x-www-form-urlencoded; charset=UTF-8')

    req.add_header('Host','mp.weixin.qq.com')

    req.add_header('Origin','https://mp.weixin.qq.com')

    req.add_header('Referer','https://mp.weixin.qq.com/cgi-bin/loginpage?t=wxm2-login&lang=zh_CN')

    req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36')

    req.add_header('X-Requested-With','XMLHttpRequest')

    ret=urllib2.urlopen(req)

    retread=ret.read()

    print retread

    token=json.loads(retread)

    #print token['ErrMsg'][44:]

    token=token['ErrMsg'][44:]

    print token

    接下就可以推送消息了。

    进入用户管理,点击你要发送消息的用户,使用同样办法,找到请求 singlesend?t=ajax-response&lang=zh_CN ,得到请求头和post的数据。

    推送消息的代码如下:

    paras2={'type':'1','content':'xxxxx','error':'false','imgcode':'','tofakeid':'xxxx','token':token,'ajax':'1'}# content为你推送的信息,tofakeid为用户的唯一标示id,可在html代码里找到

    req2=urllib2.Request('https://mp.weixin.qq.com/cgi-bin/singlesend?t=ajax-response&lang=zh_CN',urllib.urlencode(paras2))

    req2.add_header('Accept','*/*')

    req2.add_header('Accept-Encoding','gzip,deflate,sdch')

    req2.add_header('Accept-Language','zh-CN,zh;q=0.8')

    req2.add_header('Connection','keep-alive')

    #req2.add_header('Content-Length','77') 此行代码处理发送数据长度的确认,不要加。是个坑。

    req2.add_header('Content-Type','application/x-www-form-urlencoded; charset=UTF-8')

    req2.add_header('Host','mp.weixin.qq.com')

    req2.add_header('Origin','https://mp.weixin.qq.com')

    req2.add_header('Referer','https://mp.weixin.qq.com/cgi-bin/singlemsgpage?msgid=&source=&count=20&t=wxm-singlechat&fromfakeid=150890&token=%s&lang=zh_CN'%token)

    req2.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36')

    req2.add_header('X-Requested-With','XMLHttpRequest')

    #不加cookie也可发送

    #req2.add_header('Cookie',cookie2)

    ret2=urllib2.urlopen(req2)

    #ret2=opener.open(req2)

    print 'x',ret2.read()

    That's all. 复制代码请注意缩进问题。

    展开全文
  • python 微信公众平台开发

    千次阅读 2016-09-08 11:17:04
    风中散发 ...利用微信公众平台提供的消息接口,搭建自己的消息处理服务器,消息的处理和回复将更加灵活,以期给订阅用户提供更加定制化和个性化的信息。本文将结合SAE,基于Python Flask框架,搭建一个公
    
    

    在SAE上搭建微信公众平台账号消息服务器

    利用微信公众平台提供的消息接口,搭建自己的消息处理服务器,消息的处理和回复将更加灵活,以期给订阅用户提供更加定制化和个性化的信息。本文将结合SAE,基于Python Flask框架,搭建一个公众账号“豆米查书”(微信号doumibook)的消息服务器。该公众号的基本功能是:输入书籍标题、作者或者isbn条码号等关键字,查询书籍的基本信息。书籍数据来源豆瓣网,使用了douban api v2

    一、申请微信公众平台账号

    这里注册微信公众平台账号,登陆,设置必要的名称、地区和用户信息等内容。在“高级功能”中开启“开发模式”。

    仔细阅读微信公众平台的官方文档

    二、在SAE上创建Python应用

    创建Python应用,二级域名和应用名称为doumibook,那么基本地址为http://doumibook.sinaapp.com。

    三、申请消息接口并验证

    1,消息接口配置

    到“高级功能”-->“开发模式”-->“成为开发者”中填写接口配置信息,有URL和Token,URL用于接口验证和消息推送,本例中填写步骤二中的接入地址,Token用于接口验证,任意填写即可,例如填写“doumitest”。

    2,消息接口验证(网址接入)

    信息填写完成后,点击提交,会提示认证“服务器未正确响应的Token验证”,这是正常的,因为我们虽然创建了SAE应用,但没有处理接口验证消息。点击提交时,微信服务器会发送一条Http GET请求,携带signature、timestamp、nouce和echostr四个参数,对URL进行合法性的校验(参考微信官方的详细文档的“网址接入”小节)。如下是flask中处理接口验证的代码:

    复制代码
    import hashlib
     
     @app.route('/weixin', methods=['GET'])
     def weixin_verify():
         signature = request.args.get('signature')
         timestamp = request.args.get('timestamp')
         nonce = request.args.get('nonce')
         echostr = request.args.get('echostr')
         
         token = 'doumitest' #和申请消息接口时的Token一致
         tmplist = [token, timestamp, nonce]
         tmplist.sort()
         tmpstr = ''.join(tmplist)
         hashstr = hashlib.sha1(tmpstr).hexdigest()
     
         if hashstr == signature:
             return echostr #success
         return 'access verification fail' #fail
    复制代码

     

    四、消息推送和消息回复

    1,消息推送

    URL接口验证以后,公众平台账号收到的消息将由微信服务器使用HTTP POST推送至该URL。消息内容为XML格式,消息类型有文本、图片和地理位置等,例如文本消息由以下几个部分组成。

    复制代码
    <xml>
      <ToUserName><![CDATA[toUser]]></ToUserName>
      <FromUserName><![CDATA[fromUser]]></FromUserName>
      <CreateTime>1348831860</CreateTime>
      <MsgType><![CDATA[text]]></MsgType>
      <Content><![CDATA[this is a test]]></Content>
    </xml>
    复制代码

    其中,ToUserName和FromUserName分别为公众帐号和用户帐号的表识串。MsgType标识消息类型,“text”表明消息是文本消息,文本内容放置在Content字段。其他类型消息的xml结构请参照官方文档。

    使用下面的代码片段,解析xml数据,以dict形式保存:

    复制代码
    import xml.etree.ElementTree as ET
     
     def parse_msg(rawmsgstr):
         root = ET.fromstring(rawmsgstr)
         msg = {}
         for child in root:
             msg[child.tag] = child.text
         return msg
    复制代码

     

    2,用户订阅消息

    当有新用户关注公众号时,微信服务器会发送一条通知消息到消息服务器,消息服务器可以返回初次订阅的欢迎和帮助信息。目前,微信启用了新的用户订阅通知方法,即使用事件推送。

    事件推送的MsgType为“event”,是微信4.5版开始支持的一种消息格式,可以发送用户订阅( subscribe)、退订(unsubscribe)以及自定义菜单点击(CLICK)等事件消息。消息格式为:

    复制代码
    <xml>
    <ToUserName><![CDATA[toUser]]></ToUserName>
    <FromUserName><![CDATA[FromUser]]></FromUserName>
    <CreateTime>123456789</CreateTime>
    <MsgType><![CDATA[event]]></MsgType>
    <Event><![CDATA[EVENT]]></Event>
    <EventKey><![CDATA[EVENTKEY]]></EventKey>
    </xml>
    复制代码

    微信官方已经发布通告,在2013年3月26日起由原来的发送一条内容为“Hello2BizUser”的订阅消息,切换至事件推送方法。

     

    3,书籍信息获取

    简单起见,目前仅支持微信用户发送书籍isbn条码号给doumibook,来查询作者和书名。使用douban api v2版接口,获取书籍信息,douban返回的json数据。代码片段如下:

    复制代码
     import urllib2
     import json
     
     bookurlbase = 'http://api.douban.com/v2/book/isbn/'
     DOUBAN_APIKEY = '' #豆瓣上申请的APIKEY
     
     def query_book_info(isbn):
         url = '%s%s?apikey=%s' % (bookurlbase, isbn, DOUBAN_APIKEY)
         resp = urllib2.urlopen(url)
         book = json.loads(resp.read())
         info = ''.join(book['author']) + ': ' + book['title']
         return info
    复制代码

     

    4,消息回复

    查询到书籍信息之后,消息服务器响应微信服务器的消息推送,回复内容结构同样是XML,假设我们回复文本消息,基本结构如下:

    复制代码
    <xml>
      <ToUserName><![CDATA[toUser]]></ToUserName>
      <FromUserName><![CDATA[fromUser]]></FromUserName>
      <CreateTime>12345678</CreateTime>
      <MsgType><![CDATA[text]]></MsgType>
      <Content><![CDATA[content]]></Content>
      <FuncFlag>0</FuncFlag>
     </xml>
    复制代码

    其中的ToUserName和FromUserName与消息推送中的相关。

    构造回复消息代码片段如下:

    复制代码
    def response_msg(recvmsg, content):
         textTpl = """<xml>
                 <ToUserName><![CDATA[%s]]></ToUserName>
                 <FromUserName><![CDATA[%s]]></FromUserName>
                 <CreateTime>%s</CreateTime>
                 <MsgType><![CDATA[%s]]></MsgType>
                 <Content><![CDATA[%s]]></Content>
                 <FuncFlag>0</FuncFlag>
                 </xml>"""
         echostr = textTpl % (recvmsg['FromUserName'], recvmsg['ToUserName'], recvmsg['CreateTime'], recvmsg['MsgType'], content)
         return echostr
    复制代码

     注意到,回复文本消息,内容比较单一,这里可以使用MsgType为“news”的图文消息格式进行回复,这里不再赘述,请参考官方文档以及本文末尾给出的源代码链接。

    4,综合

    消息推送HTTP POST请求的处理代码如下:

    复制代码
     @app.route('/weixin', methods=['POST'])
     def weixin_msg():
         data = request.data
         msg = parse_msg(data)
         content = 'not found'
         if msg.has_key('Content'):
             content = query_book_info(msg['Content'])
         return response_msg(msg, content)
    复制代码

     

    五、总结

    本文以doumibook为例,使用Python Flask框架,介绍了在SAE上搭建微信公众平台账号消息服务器的基本步骤。

    需要看完整代码的同学,请移步这里:https://github.com/gzb1985/doumibook_weixin

    doumibook目前仅实现了很简单的功能,还没有实用的价值,例如输入“浪潮之巅”,则返回:

    展开全文
  • python 微信公众平台服务器设置

    千次阅读 2017-11-21 09:52:31
    本人基于tornado写了个例子: #!/usr/bin/env python # encoding:utf-8 import hashlib from common.BaseHandler import MyHandler class WeixinInterface... 微信公众平台服务器配置,验证接口 """ def get

    微信文档里面只有个php例子,本人基于tornado写了个python例子:

    #!/usr/bin/env python
    # encoding:utf-8
    import hashlib
    from common.BaseHandler import MyHandler
    
    
    class WeixinInterface(MyHandler):
        """
        微信公众平台服务器配置,验证接口
        """
    
        def get(self):
            signature = self.get_argument('signature', '')
            timestamp = self.get_argument('timestamp', '')
            nonce = self.get_argument('nonce', '')
            echostr = self.get_argument('echostr', '')
            # 自定义token,只要跟服务器设置那里,填写的一样就可以,不是指的微信的access_token
            wx_access_token = "sdasdas"
            list = [wx_access_token, timestamp, nonce]
            list.sort()
            list2 = ''.join(list)
            sha1 = hashlib.sha1()
            sha1.update(list2.encode('utf-8'))
            hashcode = sha1.hexdigest()
            if hashcode == signature:
                self.write(echostr)  # 返回echostr
                self.finish()


    展开全文
  • 由于工作需要,要搞一个可以把文档内容上传至微信公众号后台永久素材中的应用,于是开始边摸索python边进行开发。环境:腾讯云学生机、python3.x首先得确认服务器端口的开放,主机内的防火墙内设置端口开放,云主机...

    由于工作需要,要搞一个可以把文档内容上传至微信公众号后台永久素材中的应用,于是开始边摸索python边进行开发。

    环境:腾讯云学生机、python3.x

    首先得确认服务器端口的开放,主机内的防火墙内设置端口开放,云主机的还需要在安全组上进行设置;

    需要使用到的包:web.py

    安装python3.x:在python官网(https://www.python.org/)下载对应版本后安装;

    安装pip:pip是一个python的包管理工具,可对python包进行查找、下载、安装、卸载;可在官网(https://pypi.org/project/pip/) 中下载;(Python 2.7.9 + 或 Python 3.4+ 以上版本都自带 pip 工具)

    下载get-pip.py文件后,输入指令python get-pip.py ,等待片刻后便安装成功;更多操作指令可以看官方文档或者菜鸟教程(https://www.runoob.com/w3cnote/python-pip-install-usage.html)

    通过pip安装web.py:输入指令pip install web.py 后等待安装,web.py官网(https://webpy.org/)

    对微信公众号开发进行配置:

    在微信公众平台->开发->基本配置中,设置公众号开发信息中的密码(AppSecre),白名单中添加服务器的ip和调试窗口的ip(如无调试则只添加服务器ip即可)

    在微信公众平台->开发->基本配置中,设置服务器配置,其中服务器地址URL是选择的服务器地址,只能使用80端口、令牌Token可输入2-32字符,需要和服务器文件中的Token匹配、消息加密密钥点击随机即可、消息加密方式调试根据需求选择

    展开全文
  • 首先先获取access_token,并保存与全局之中def token(requset):url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s' % (Config.AppID, Config.AppSecret)...
  • 首先先获取access_token,并保存与全局之中def token(requset):url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s' % (Config.AppID, Config.AppSecret)...
  • 首先先获取access_token,并保存与全局之中def token(requset):url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s' % (Config.AppID, Config.AppSecret)...
  • 本文主要是一步一步教大家如何利用python搭建微信公众平台,有兴趣的朋友可以参考一下使用的工具,python 新浪SAE平台,微信的公众平台你需要先在微信的公众平台与新浪SAE平台上各种注册,微信平台注册的时候需要你...
  • python基于新浪sae开发的微信公众平台,实现功能:输入段子---回复笑话输入开源+文章---发送消息到开源中国输入快递+订单号---查询快递信息输入天气---查询南京最近五天天气状况输入微博热点---回复微博当前热门话题...
  • 本文实例讲述了Python调用微信公众平台接口操作。分享给大家供大家参考,具体如下:这里使用的是Django,其他类似# coding=utf-8from django.http import HttpResponseimport hashlib, time, refrom xml.etree import...
  • python基于新浪sae开发的微信公众平台,实现功能:输入段子---回复笑话输入开源+文章---发送消息到开源中国输入快递+订单号---查询快递信息输入天气---查询南京最近五天天气状况输入微博热点---回复微博当前热门话题...
  • 本文实例讲述了Python调用微信公众平台接口操作。分享给大家供大家参考,具体如下:这里使用的是Django,其他类似# coding=utf-8from django.http import HttpResponseimport hashlib, time, refrom xml.etree import...
  • 非官方微信公众平台 Python 开发包,包括官方接口和非官方接口。官方接口依据公众平台开发者文档编写,可以实现公众平台开发者文档中的所有内容,具体不列举,请查看 WechatBasic 文档;非官方接口采用模拟登陆的...
  • 主要介绍了python搭建微信公众平台的相关资料和技巧,文中给出了详细的python搭建微信公众平台的步骤,感兴趣的朋友可以参考一下
  • 主要介绍了python搭建微信公众平台的相关资料和技巧,感兴趣的朋友可以参考一下
  • 本文主要是一步一步教大家如何利用python搭建微信公众平台,有兴趣的朋友可以参考一下使用的工具,python 新浪SAE平台,微信的公众平台你需要先在微信的公众平台与新浪SAE平台上各种注册,微信平台注册的时候需要你...
  • 微信公众平台接口怎么开发python# coding=utf-8from django.http import HttpResponseimport hashlib, time, refrom xml.etree import ElementTree as ETdef weixin(request):token = "your token here"params = ...
  • 主要介绍了Python调用微信公众平台接口操作,结合具体实例形式分析了Python针对微信接口数据传输的相关操作技巧,需要的朋友可以参考下
  • 本节课讲述如何利用Python开发微信公众平台。说明:如果你是Python小白,爬虫小白,觉得本节课程的代码晦涩难懂。没关系,不需要懂,好多我也不懂(。•́︿•̀。),按照步骤一步步操作就可以了。这一节我们主要是搭...
  • 本文主要是一步一步教大家如何利用python搭建微信公众平台,有兴趣的朋友可以参考一下使用的工具,python 新浪SAE平台,微信的公众平台你需要先在微信的公众平台与新浪SAE平台上各种注册,微信平台注册的时候需要你...
  • 主要介绍了Python实现微信公众平台自定义菜单实例,本文直接给出实现代码,需要的朋友可以参考下
  • 微信公众平台SDK项目背景从2014年开始玩微信公众平台,试用过其中大多数的功能,如:消息回复、自定义菜单、公众号中的支付,页面授权等。之前的程序中都是直接调用公众平台的接口,这样复用功能无法实现。现将功能...
  • python基于新浪sae开发的微信公众平台,实现功能:输入段子---回复笑话输入开源+文章---发送消息到开源中国输入快递+订单号---查询快递信息输入天气---查询南京最近五天天气状况输入微博热点---回复微博当前热门话题...
  • 微信公众平台开发模式微信 语音识别 公众平台 消息接口 语音识别微信公众平台开发 语音识别作者:方倍工作室地址:http://www.cnblogs.com/txw1958/archive/2013/02/06/weixin-if40-voice-recognition.html一、申请...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 545
精华内容 218
关键字:

python微信公众平台

python 订阅