這篇主要針對小程序進行演示,既然是發送消息,那么就有三個問題。發送什么內容,給誰發送,怎么發送!往下一條一條解決。
- 發送什么消息內容 - 通過微信公眾號平台 選擇對應的消息模板
選擇以后在我的模板里面就出現了。
- 發給誰
既然是發送信息,那么必須有收件人的地址,在微信生態里面,只要是通過微信登錄用戶都會根據不同小程序分配一個唯一的openid(每個小程序都不一樣,但是在當前小程序是唯一的)。因為我的系統是使用手機號碼注冊的,並沒有使用微信登錄,那么如果要得到微信分配的openid就需要在注冊時候使用微信登錄一次,只是為了得到當前用戶的openid。代碼如下
//前面是自己的注冊邏輯
uni.login({ provider: 'weixin', success: function(res) { let appid = '*******' // 通過微信小程序后台 開發管理 開發設置得到 let secret = '*******' // 同上 let url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' + appid + '&secret=' + secret + '&js_code=' + res.code + '&grant_type=authorization_code'; uni.request({ url: url, // 請求路徑 success: result => { console.info(result.data.openid); // 在此處得到openid 保存數據庫即可 每個用戶在不同的小程序下是不一樣的 }, }); } });
做完這一步已經得到了收件人,不過微信的限制是你需要在需要發送的地方讓用戶許可(如果沒有這個限制,怕你的小程序一直給客戶發騷擾信息),這個用個實例說下,比如我的是考試系統,那么如果客戶預約了某場考試,那么我就會在預約按鈕上增加一個邏輯用來獲取用戶允許接受信息的權限(用戶點擊一次,你能發一次,微信后台有記錄)
//上面是考試預約邏輯
uni.requestSubscribeMessage({ tmplIds: ['*******'], // 你的模板id 此處是可以多個模板id的 不過我的是一個 success(res) { console.log('已授權接收訂閱消息') } })
效果如下
-
用戶點擊完畢以后,等於你有了一次給當前用戶發送一條當前模板的權利。如果你搞個循環讓這個授權彈出5次,那么你就能給當前這個客戶發送5次。
- 往下就是怎么發的問題了,可以通過自己的后台服務發送,當然也可以是前台,只要能訪問網絡都可以,這里選用的是python后台進行發送,其他的代碼都差不多。還有考試的例子,他預約以后,我在后台建立個定時任務,當這個考試的前10分鍾開始批量給預約過考試的用戶發送。因為發送是通過騰訊服務發送的,所以需要先進行token認證。
appid = "***" // 微信id 獲取方式和上面面一樣 secret = "***" // 同上 token_url = f"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={secret}" request = urllib.request.Request(token_url) # get服務器請求 token_result = urllib.request.urlopen(request).read() token_result=str(token_result, encoding = "utf-8") token_result=eval(token_result) print(token_result) serverToken = token_result.get('access_token')
認證以后得到token,就可以發送了
// data為模板的 內容
data = {# 用戶的openId 就是前台注冊的時候保存到數據庫那個"touser": '*****',# 訂閱消息模板id"template_id": "*****",# 要跳轉的頁面 這里可以跳轉到小程序的某個頁面,可以帶參數"page": "pages/index/index",# 模板消息對應的內容設置 每個字段類型可以根據自己的模板設置"data": {"thing1": {"value": "距開考時間僅剩10分鍾,請您按時參加!"},"thing2": {"value": "2020年國家公務員考試模擬考試"},"date3": {"value": "2019年10月1日 15:01"},"thing11": {"value": "一建水利"}}}url = ' https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token={serverToken} '.format(serverToken = serverToken)# 數據格式化(從這里開始對上面的data進行格式化,轉成符合post的json參數形式) data = json.dumps(data) # 數據格式化 data = bytes(data, 'utf8') # 數據格式化 request = urllib.request.Request(url) # post服務器請求 result = urllib.request.urlopen(request, data).read() # 打印結果 print(result)
最終效果
- 往下就是怎么發的問題了,可以通過自己的后台服務發送,當然也可以是前台,只要能訪問網絡都可以,這里選用的是python后台進行發送,其他的代碼都差不多。還有考試的例子,他預約以后,我在后台建立個定時任務,當這個考試的前10分鍾開始批量給預約過考試的用戶發送。因為發送是通過騰訊服務發送的,所以需要先進行token認證。