<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    微信公眾號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ā)者需要對每次的的請求進(jìn)行合法性校驗及對消息進(jìn)行處理,同樣的,直接調(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)注時默認(rè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標(biāo)簽名保一致。如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ā)送消息

    • 用戶管理

    • 自定義菜單管理

    • 多媒體上傳下載

    • 二維碼

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

    瀏覽 32
    點贊
    評論
    收藏
    分享

    手機(jī)掃一掃分享

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

    手機(jī)掃一掃分享

    編輯 分享
    舉報

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    天天日天天舔天天爽天天操 | 国产无码高清福利 | 99精品人 | 一本经毛片 | 抠逼网站 |