番外訊息推送篇_05

weixin_34138377發表於2018-08-31

簡述

本文介紹微信訊息推送實現過程

需求分析

目前小程式可通過訊息模板實現訊息推送,但因次數限制,不太符合業務場景,後續考慮,可嘗試使用微信網頁版訊息推送方式,封裝成服務,供程式呼叫實現推送

實現過程

使用技術

wxpy 實現微信頁面端相關呼叫 + flask 實現服務封裝

步驟簡述

——> bot = Bot() 微信網頁版登入 
——> bot.friends().search(m_object) 查詢接收物件
——> o.send(m_content) 傳送訊息
——> app = Flask(__name__) 封裝相關服務
使用包
from functools import wraps
from flask import Flask, url_for, request, make_response
from wxpy import *
傳送訊息方法
def api_webchat():
    if request.method == "POST":
        m_type = request.form.get('type')
        m_object = request.form.get('name')
        m_content = request.form.get('message')
        print(m_type)

        if(m_type == 'friend'):
            object_list = bot.friends().search(m_object)
        else:
            print(m_object)
            object_list = bot.groups().search(m_object)

        if(len(object_list) == 0):
            return '沒有找到使用者或群'

        for o in object_list:
            try:
                o.send(m_content)
                print(m_content)
                return 'to send success!'
            except ResponseError as e:
                print(e.err_code, e.err_msg)
封裝服務方法
app = Flask(__name__)

#跨域
def allow_cross_domain(fun):
    @wraps(fun)
    def wrapper_fun(*args, **kwargs):
        rst = make_response(fun(*args, **kwargs))
        rst.headers['Access-Control-Allow-Origin'] = '*'
        rst.headers['Access-Control-Allow-Methods'] = 'PUT,GET,POST,DELETE'
        allow_headers = "Referer,Accept,Origin,User-Agent"
        rst.headers['Access-Control-Allow-Headers'] = allow_headers
        return rst
    return wrapper_fun

@app.route('/')
@allow_cross_domain
def api_root():
    return 'Welcome Wechat Root!'
實現效果
855786-3686cab4f13b7903.png
Postman

855786-cdd28089ec6bfb41.jpg
測試效果

經驗總結

請求服務跨域

設定headers['Access-Control-Allow-Origin']='*'

掃碼無法登入

測試過程中,使用小號連續登入,後手機沒電,自動退出,後續再掃碼無法登入,但不影響小號微信正常使用,實際使用過程中通過切換微訊號登入規避
注:重新登入前,建議手動檢查Python程式,關閉後再登入

提示群找不到

測試過程中,傳送群訊息時,小概率提示找不到群,修改群名稱後,能正常使用

原始碼

wechat_RESTfulWebAPI.py

相關文章