PHP、www6662016comJava 還是 18288006666Python?微信公眾號首選語言

www6662016com18288006666發表於2019-06-26

現在很多人都在做微信公眾號開發,但大多數人都是按照騰訊公司給出的文件在用 PHP 或者 Java 做開發,那麼用 Python 如何做?

微信公眾號的準備

  1. 註冊

訪問地址:https://mp.weixin.qq.com/,按照提示註冊即可

注意:本文樣例使用個人公眾號,由於個人公眾號沒有介面許可權,自定義選單無法進行開發,同學們不要註冊錯!

  1. 配置

需要準備好自己的伺服器地址,可以使用騰訊雲阿里雲京東雲等等皆可,沒有域名用 IP 也可以。

在公眾平臺官網的開發-基本設定頁面,勾選協議成為開發者,點選“修改配置”按鈕,填寫伺服器地址(URL)、Token 和 EncodingAESKey,其中 URL 是開發者用來接收微信訊息和事件的介面 URL。Token 可由開發者可以任意填寫,用作生成簽名(該 Token 會和介面 URL 中包含的 Token 進行比對,從而驗證安全性)。EncodingAESKey 由開發者手動填寫或隨機生成,將用作訊息體加解密金鑰。

按照要求對開發基本資訊配置,如下:

  1. 連線

伺服器配置提交後,微信伺服器傳送 GET 請求到填寫的伺服器地址 URL 上,GET 請求攜帶引數包括 signature、timestamp、nonce、echostr,服務端程式通過檢驗 signature 對請求進行校驗(下面有校驗方式)。

若確認此次 GET 請求來自微信伺服器,請原樣返回 echostr 引數內容給微信伺服器確認後接入生效。加密/校驗流程如下,下文中有程式碼具體實現:

將 token、timestamp、nonce 三個引數進行字典序排序;

將三個引數字串拼接成一個字串進行 sha1 加密;

開發者獲得加密後的字串可與 signature 對比,標識該請求來源於微信。

▌基於 Django 開發微信公眾號後臺

1.準備工作

新建 django project,專案名稱為 weixin:

django-admin.py startproject weixin
新建 app,進入專案目錄下,cd weixin 然後執行下面的命令:

python manage.py startapp weixin
或者如下命令:

django-admin.py startapp weixin
修改 settings.py 加入剛才建立的 weixin 應用:

INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'weixin',
)
修改專案同名 app 內的 urls.py,新增新的 weixin 的路由解析跳轉:

urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^weixin/', include('weixin.urls',namespace="weixin")),
]
2.編寫 weixin 應用的 urls.py

修改 app weixin 內的 urls.py,新增針對檢視函式的解析,預設訪問指向檢視函式的 weixin_index 方法。

app_name = 'weixin'
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^$', views.index, name='weixin_index'),
]
3.編寫 weinxin 應用的 views.py

GET 方法做校驗,POST 方法傳 xml 資料,解析和拼湊 xml 資料實現自動回覆功能:

from django.http.response import HttpResponse, HttpResponseBadRequest
from django.views.decorators.csrf import csrf_exempt
from wechat_sdk import WechatBasic
from wechat_sdk.exceptions import ParseError
from wechat_sdk.messages import TextMessage

wechat_instance = WechatBasic(
token='您設定的token',
appid='您的公眾號id',
appsecret='您的公眾號的祕鑰'
)
@csrf_exempt
def index(request):
if request.method == 'GET':

    # 從 request 中提取基本資訊 (signature, timestamp, nonce, xml)
    signature = request.GET.get('signature')
    timestamp = request.GET.get('timestamp')
    nonce = request.GET.get('nonce')
    if not wechat_instance.check_signature(
            signature=signature, timestamp=timestamp, nonce=nonce):
        return HttpResponseBadRequest('Verify Failed')
    return HttpResponse(
        request.GET.get('echostr', ''), content_type="text/plain")
# 解析本次請求的 XML 資料
else:
    try:
        print(request.body)
        wechat_instance.parse_data(data=request.body)
    except ParseError:
        return HttpResponseBadRequest('Invalid XML Data')
    # 獲取解析好的微信請求資訊
    message = wechat_instance.get_message()
    # 關注事件以及不匹配時的預設回覆
    response = wechat_instance.response_text(
        content=(
            '感謝您的關注!\n回覆【功能】兩個字檢視支援的功能,還可以回覆任意內容開始聊天'
        ))
    if isinstance(message, TextMessage):
        # 當前會話內容
        content = message.content.strip()
        if content == '功能':
            reply_text = (
                '目前支援的功能:\n1. 關鍵詞後面加上【教程】兩個字可以搜尋教程,'
                '比如回覆 "Django 後臺教程"\n'
                '2.回覆任意詞語,查天氣,陪聊天,講故事,無所不能!\n'
                '還有更多功能正在開發中哦 ^_^\n'
            )
        response = wechat_instance.response_text(content=reply_text)
    print(response)
    return HttpResponse(response, content_type="application/xml")

▌配置公網域名對映後,執行程式進行效果展示

python manage.py runserver 0.0.0.0:80

發現不能正常使用,提示“該公眾號提供的服務出現故障,請稍後再試”。

於是百度裡各種找資料,又是檢視微信公眾號開發文件,各種百度和 Google,都沒有解決。微信公眾平臺關閉啟用,重置金鑰。仔細核對填寫,都沒有問題。沒有填寫錯誤。

我開啟了開發-運維中心-介面報警-告警規則全部調到“1次/5分鐘”,偶爾會收到這樣的報錯:302 網頁重定向出錯。

最後,我就查到微信公眾平臺-開發-基本配置-伺服器配置-伺服器地址(url),這裡的 http:// 頭改成 https://。

再試自動回覆真的可以了。

相關文章