<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          微信公眾號Python-SDK

          聯(lián)合創(chuàng)作 · 2023-09-24 15:33

          本SDK支持微信公眾號以及企業(yè)號的上行消息及OAuth接口。本文檔及SDK假設(shè)使用者已經(jīng)具備微信公眾號開發(fā)的基礎(chǔ)知識,及有能力通過微信公眾號、企業(yè)號的文檔來查找相關(guān)的接口詳情。

          1. 安裝

          pip install wechat

          源碼安裝

          git clone [email protected]:jeffkit/wechat.git
          cd wechat
          python setup.py install

          對于微信用戶在公眾號內(nèi)發(fā)送的上行消息,本sdk提供了一個微型處理框架,開發(fā)者只需繼承wechat.official.WxApplication類, 實現(xiàn)各種消息對應(yīng)的方法,然后把該類與自己熟悉的web框架結(jié)合起來使用即可。

          WxApplication內(nèi)部會實現(xiàn)請求的合法性校驗以及消息的分發(fā)等功能,還對上行消息對行了結(jié)構(gòu)化,開發(fā)者把精力放到業(yè)務(wù)邏輯的編寫即可。

          WxApplication類核心方法:

          WxApplication.process(params, xml, token=None, app_id=None, aes_key=None)

          WxApplication的process函數(shù),接受以下參數(shù):

          • params, url參數(shù)字典,需要解析自微信回調(diào)的url的querystring。格式如:{'nonce': 1232, 'signature': 'xsdfsdfsd'}

          • xml, 微信回調(diào)時post的xml內(nèi)容。

          • token, 公眾號的上行token,可選,允許在子類配置。

          • app_id, 公眾號應(yīng)用id,可選,允許在子類配置。

          • aes_key, 公眾號加密secret,可選,允許在子類配置。

          process最后返回一串文本(xml或echoStr)。

          使用場景1:上行URL有效性驗證

          在微信公眾號的后臺設(shè)置好URL及token等相關(guān)信息后,微信會通過GET的方式訪問一次該URL,開發(fā)者在URL的響應(yīng)程序里直接調(diào)用app.process(params, xml=None)即可返回echStr。

          qs = 'nonce=1221&signature=19selKDJF&timestamp=12312'
          query = dict([q.split('=') for q in qs.split('&')])
          app = YourApplication()
          echo_str = app.process(query, xml=None)
          # 返回echo_str給微信即可

          使用場景2:處理上行消息

          用戶在微信公眾號上發(fā)消息給公眾號,微信服務(wù)器調(diào)用上行的URL,開發(fā)者需要對每次的的請求進行合法性校驗及對消息進行處理,同樣的,直接調(diào)用app.process方法就好。

          qs = 'nonce=1221&signature=19selKDJF&timestamp=12312'
          query = dict([q.split('=') for q in qs.split('&')])
          body = '<xml> ..... </xml>'
          app = YourApplication()
          result = app.process(query, xml=body)
          # 返回result給微信即可

          WxApplication子類示例

          下面先看看一個WxApplication的示例代碼,用于把用戶上行的文本返還給用戶:

          from wechat.official import WxApplication, WxTextResponse, WxMusic,\
              WxMusicResponse
          
          class WxApp(WxApplication):
          
              SECRET_TOKEN = 'test_token'
              WECHAT_APPID = 'wx1234556'
              WECHAT_APPSECRET = 'sevcs0j'
          
              def on_text(self, text):
                  return WxTextResponse(text.Content, text)

          需要配置幾個類參數(shù),幾個參數(shù)均可在公眾號管理后臺的開發(fā)者相關(guān)頁面找到,前三個參數(shù)如果不配置,則需要在調(diào)用process方法時傳入。

          • SECRET_TOKEN: 微信公眾號回調(diào)的TOKEN

          • APP_ID: 微信公眾號的應(yīng)用ID

          • ENCODING_AES_KEY: (可選),加密用的SECRET,如您的公眾號未采取加密傳輸,不需填。

          • UNSUPPORT_TXT:(可選),收到某種不支持類型的消息時自動響應(yīng)給用戶的文本消息。

          • WELCOME_TXT:(可選), 新關(guān)注時默認響應(yīng)的文本消息。

          然后,您需要逐一實現(xiàn)WxApplication的各個on_xxxx函數(shù)。不同類型的上行消息及事件均有對應(yīng)的on_xxx函數(shù)

          on_xxx函數(shù)

          所有的on_xxx函數(shù)列舉如下:

          • on_text, 響應(yīng)用戶文本

          • on_link,響應(yīng)用戶上行的鏈接

          • on_image,響應(yīng)用戶上行圖片

          • on_voice,響應(yīng)用戶上行語音

          • on_video,響應(yīng)用戶上行視頻

          • on_location,響應(yīng)用戶上行地理位置

          • on_subscribe,響應(yīng)用戶關(guān)注事件

          • on_unsubscribe,響應(yīng)用戶取消關(guān)注事件

          • on_click,響應(yīng)用戶點擊自定義菜單事件

          • on_scan,響應(yīng)用戶掃描二維碼事件

          • on_location_update,響應(yīng)用戶地理位置變更事件

          • on_view,響應(yīng)用戶點擊自定義菜單訪問網(wǎng)頁事件

          • on_scancode_push

          • on_scancode_waitmsg

          • on_pic_sysphoto

          • on_pic_photo_or_album

          • on_pic_weixin

          • on_location_select

          on_xxx函數(shù)的定義如下:

          def on_xxx(self, req):
              return WxResponse()

          on_xxx函數(shù),接受一個WxRequest參數(shù)req,返回一個WxResponse的子類實例。

          WxRequestreq是一個代表用戶上行消息的WxRequest實例。其屬性與消息的XML屬性一一對應(yīng),不同的消息有幾個相同的屬性:
          • ToUserName

          • FromUserName

          • CreateTime

          • MsgType

          • MsgId

          不同的消息類型對應(yīng)有各自的屬性,屬性名與消息的xml標簽名保一致。如MsgType為?text的的req,有一個Content屬懷,而MsgType為image的req,則有PicUrl及MediaId兩個屬性。更多消息詳情請查看微信公眾號官方文檔

          WxResponse

          on_xxx函數(shù)需要返回一個WxResponse的子類實例。WxResponse的子類及其構(gòu)造的方式有:

          WxTextResponse, 文本消息
          WxTextResponse("hello", req)
          WxImageResponse, 圖片消息
          WxImageResponse(WxImage(MediaId='xxyy'),req)
          WxVoiceResponse, 語音消息
          WxVoiceResponse(WxVoice(MediaId='xxyy'),req)
          WxVideoResponse, 視頻消息
          WxVideoResponse(WxVideo(MediaId='xxyy', Title='video', Description='test'),req)
          WxMusicResponse, 音樂消息
          WxMusicResponse(WxMusic(Title='hey jude', 
              Description='dont make it bad', 
              PicUrl='http://heyjude.com/logo.png', 
              Url='http://heyjude.com/mucis.mp3'), req)
          WxNewsResponse, 圖文消息
          WxNewsResponse(WxArticle(Title='test news', 
              Description='this is a test', 
              Picurl='http://smpic.com/pic.jpg', 
              Url='http://github.com/jeffkit'), req)
          WxEmptyResponse, 無響應(yīng)
          WxEmptyResponse(req)

          在Django中使用WxApplication

          下面以Django為例說明,實現(xiàn)一個微信回調(diào)的功能(view),利用上面示例代碼中的WxApp:

          from django.http import HttpResponse
          
          def wechat(request):
              app = WxApp()
              result = app.process(request.GET, request.body)
              return HttpResponse(result)

          配置 urls.py:

          urlpatterns = patterns('',
              url(r'^wechat/', 'myapp.views.wechat'),
          )

          在Flask中使用WxApplication

          from flask import request
          from flask import Flask
          app = Flask(__name__)
          
          @app.route('/wechat')
          def wechat():
              app = WxApp()
              return app.process(request.args, request.data)

          OK.就這么多,WxApplication本身與web框架無關(guān),不管你使用哪個Framework都可以享受到它帶來的便利。

          什么?你不喜歡寫WxApplication的子類?!

          好吧,其實,你可以在任何地方寫on_xxx的響應(yīng)函數(shù)。然后在使用之前,告訴一個WxApplication你要用哪個函數(shù)來響應(yīng)對應(yīng)的事件就好。以Django為例:

          # 在任何地方寫你自己的消息處理函數(shù)。
          # @any_decorator   # 添加任何裝飾器。
          def my_text_handler(req):
              return WxTextResponse(req.Content, req)
          
          # 在web的程序里這樣使用:
          def wechat_view(request):
              app = WxApplication()   # 實例化基類就好。
              app.handlers = {'text': my_text_handler}  # 設(shè)置你自己的處理器
              result = app.process(request.GET, request.body, 
                  token='xxxx', app_id='xxxx', aes_key='xxxx')
              return HttpResponse(result)

          嗯,可以自定義消息的handlers,而如果要針對事件自定義handlers的話,要修改app.event_handlers,數(shù)據(jù)的格式是一樣的。具體的消息和事件類型的key,就直接看看源碼得了。卡卡。

          3. OAuth API

          OAuth API目前僅支持下列常用接口:

          • 發(fā)送消息

          • 用戶管理

          • 自定義菜單管理

          • 多媒體上傳下載

          • 二維碼

          其他接口擬于未來的版本中支持,同時歡迎大家來增補。

          瀏覽 32
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产青青操逼视频 | 中文字幕在线观看网站 | 国产最新福利 | 久久久久久蜜桃 | 天天综合天天添夜夜添狠狠添 |