微信消息推送服務器嗎,消息推送

# 消息推送

接入微信小程序消息推送服務,可以兩種方式選擇其一:

# 開發者服務器接收消息推送

開發者需要按照如下步驟完成: 填寫服務器配置

驗證服務器地址的有效性

據接口文檔實現業務邏輯,接收消息和事件

# 第一步:填寫服務器配置

登錄小程序后臺后,在「開發」-「開發設置」-「消息推送」中,管理員掃碼啟用消息服務,填寫服務器地址(URL)、令牌(Token) 和 消息加密密鑰(EncodingAESKey)等信息。 URL: 開發者用來接收微信消息和事件的接口 URL。開發者所填寫的URL 必須以 http:// 或 https:// 開頭,分別支持 80 端口和 443 端口。

Token: 可由開發者可以任意填寫,用作生成簽名(該 Token 會和接口 URL 中包含的 Token 進行比對,從而驗證安全性)。

EncodingAESKey: 由開發者手動填寫或隨機生成,將用作消息體加解密密鑰。

同時,開發者可選擇消息加解密方式:明文模式(默認)、兼容模式和安全模式。可以選擇消息數據格式:XML 格式(默認)或 JSON 格式。

eaea012db80a3c9822b81d1a8129d690.png

模式的選擇與服務器配置在提交后都會立即生效,請開發者謹慎填寫及選擇。切換加密方式和數據格式需要提前配置好相關代碼,詳情請參考 消息加解密說明。

# 第二步:驗證消息的確來自微信服務器

開發者提交信息后,微信服務器將發送GET請求到填寫的服務器地址URL上,GET請求攜帶參數如下表所示:

參數 描述 signature 微信加密簽名,signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。

timestamp 時間戳

nonce 隨機數

echostr 隨機字符串

開發者通過檢驗 signature 對請求進行校驗(下面有校驗方式)。若確認此次 GET 請求來自微信服務器,請原樣返回 echostr 參數內容,則接入生效,成為開發者成功,否則接入失敗。加密/校驗流程如下: 將token、timestamp、nonce三個參數進行字典序排序

將三個參數字符串拼接成一個字符串進行sha1加密

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

驗證URL有效性成功后即接入生效,成為開發者。

檢驗signature的PHP示例代碼:

private function checkSignature()

{

$signature = $_GET["signature"];

$timestamp = $_GET["timestamp"];

$nonce = $_GET["nonce"];

$token = TOKEN;

$tmpArr = array($token, $timestamp, $nonce);

sort($tmpArr, SORT_STRING);

$tmpStr = implode( $tmpArr );

$tmpStr = sha1( $tmpStr );

if ($tmpStr == $signature ) {

return true;

} else {

return false;

}

}

PHP示例代碼下載:下載

# 第三步:接收消息和事件

當某些特定的用戶操作引發事件推送時(如用戶向小程序客服發送消息、或者進入會話等情況),微信服務器會將消息(或事件)的數據包以 POST 請求發送到開發者配置的 URL,開發者可以依據自身業務邏輯進行響應。

微信服務器在將用戶的消息發給開發者服務器地址后,微信服務器在五秒內收不到響應會斷掉連接,并且重新發起請求,總共重試三次。如果在調試中,發現用戶無法收到響應的消息,可以檢查是否消息處理超時。關于重試的消息排重,有 msgid 的消息推薦使用 msgid 排重。事件類型消息推薦使用 FromUserName + CreateTime 排重。

服務器收到請求必須做出下述回復,這樣微信服務器才不會對此作任何處理,并且不會發起重試,否則,將出現嚴重的錯誤提示。詳見下面說明: 直接回復success(推薦方式)

直接回復空串(指字節長度為0的空字符串,而不是結構體中content字段的內容為空)

若接口文檔有指定返回內容,應按文檔說明返回

對于客服消息,一旦遇到以下情況,微信會在小程序會話中向用戶下發系統提示“該小程序客服暫時無法提供服務,請稍后再試”: 開發者在5秒內未回復任何內容

開發者回復了異常數據

如果開發者希望增強安全性,可以在開發者中心處開啟消息加密,這樣,用戶發給小程序的消息以及小程序被動回復用戶消息都會繼續加密,詳見消息加解密說明。

# 云函數接收消息推送 需開發者工具版本大于 1.02.1904220,目前需 Nightly Build

開通了云開發的小程序可以使用云函數接收消息推送,目前僅支持客服消息推送。

接入步驟如下: 開發者工具中填寫配置并上傳

云函數中處理消息

# 第一步:開發者工具中填寫配置并上傳

在項目根目錄下新建消息推送配置文件 temp-cloud-callback-config.json 并在填寫完成后右鍵該文件選擇上傳配置。

配置文件格式如下(以客服消息推送配置為例):

{

"enable": true,

"callbacks": [

{

"msgType": 1,

"functionName": "云函數名",

"env": "環境ID"

}

]

}

字段說明: enable: 只有為 true 時云函數消息推送才會啟用,否則所有云函數消息推送都不會生效

callbacks: 接收推送的所有云函數配置

callbacks.msgType: 消息的 msgType,客服消息的 msgType 為 1

callbacks.functionName: 接收消息推送的云函數名稱

callbacks.env: 云函數所在環境

寫好后,右鍵該文件,選擇上傳配置。

# 第二步:云函數中處理消息

云函數被觸發時,其 event 參數即是接口所定義的 JSON 結構的對象(統一 JSON 格式,不支持 XML 格式)。

以客服消息為例,接收到客服消息推送時,event 結構如下:

{

"FromUserName": "ohl4L0Rnhq7vmmbT_DaNQa4ePaz0",

"ToUserName": "wx3d289323f5900f8e",

"Content": "測試",

"CreateTime": 1555684067,

"MsgId": "49d72d67b16d115e7935ac386f2f0fa41535298877_1555684067",

"MsgType": "text"

}

此時可調用客服消息發送接口回復消息,一個簡單的接收到消息后統一回復 “收到” 的示例如下:

// 云函數入口文件

const cloud = require('wx-server-sdk')

cloud.init()

// 云函數入口函數

exports.main = async (event, context) => {

const wxContext = cloud.getWXContext()

await cloud.openapi.customerServiceMessage.send({

touser: wxContext.OPENID,

msgtype: 'text',

text: {

content: '收到',

},

})

return 'success'

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257224.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257224.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257224.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MVC與WebApi中的異常過濾器

一、MVC的異常過濾器 1、自定義MVC異常過濾器創建一個類&#xff0c;繼承HandleErrorAttribute即可&#xff0c;如果不需要作為特性使用直接實現IExceptionFilter接口即可&#xff0c;注意&#xff0c;該接口在System.Web.Mvc 命名空間下/// <summary> /// 自定義的MVC異…

windows下eclipse遠程連接hadoop集群開發mapreduce

轉載請注明出處&#xff0c;謝謝2017-10-22 17:14:09之前都是用python開發maprduce程序的&#xff0c;今天試了在windows下通過eclipse java開發&#xff0c;在開發前先搭建開發環境。在此&#xff0c;總結這個過程&#xff0c;希望能夠幫助有需要的朋友。用Hadoop eclipse plu…

縮放瀏覽器時 背景圖片固定

今天遇到一個很奇怪的問題&#xff0c;頁面做好后&#xff0c;當縮放瀏覽器的時候&#xff0c;背景圖片跟著移動&#xff0c;這就使本來做好的內容看起來像是錯位了一樣&#xff0c;跟背景對不上。 研究了一下發現&#xff0c;不需要fixed 之類的&#xff0c;只需要給body加個 …

醫學影像后處理服務器系統的特點,【CT影像系統工作站怎么用】CT影像系統工作站好不好_使用技巧-ZOL軟件百科...

為滿足醫療衛生領域廣大影像工作者、醫生和醫院管理工作者的需求&#xff0c;本單位應用當代計算機技術&#xff0c;影像處理技術以及網絡技術開發的 CT型醫學影像工作站&#xff0c;可與各種CT配接&#xff0c;不需對原機作任何改動。實現了數字化存儲和接口標準化以及網絡管理…

20145308劉昊陽 《Java程序設計》實驗五報告

20145308劉昊陽 《Java程序設計》實驗五 Java網絡編程及安全 實驗報告 實驗名稱 Java網絡編程及安全 實驗內容 1&#xff0e;掌握Socket程序的編寫&#xff1b; 2&#xff0e;掌握密碼技術的使用&#xff1b; 3&#xff0e;設計安全傳輸系統。 統計的PSP(Personal Software Pro…

FPL 2017最佳論文:如何對FPGA云發動DoS攻擊?

第27屆現場可編程邏輯與應用國際會議&#xff08;The International Conference on Field-Programmable Logic and Applications&#xff0c;FPL&#xff09;九月份在比利時根特召開。在FPL 2017上&#xff0c;一篇來自德國卡爾斯魯厄理工學院&#xff08;Karlsruhe Institute …

應用程序唯一性

程序啟動后&#xff0c;如果再次啟動程序&#xff0c;不會出現2個程序&#xff0c;或者實現如Notepad已打開一個文件&#xff0c;再打開另外一個文件&#xff0c;則追加在Notepad界面上。 使用codeproject上別人編寫的一個類&#xff0c;加在程序啟動時即可。 sinstance.h /* M…

php的GC機制

在php5.3版本之前, php變量的回收機制只是簡單的通過計數來處理(當refcount0時&#xff0c;會回收內存),但這樣會出現一個問題 $aarray("str"); $a[]&$a; unset($a); 執行unset之前,$a的refcount 為2,執行unset之后,$a的refcout為1,因為是1不等于0,不能被回收內存…

Spring 框架的JDBC模板技術

1. 概述 Spring 框架提供了很多持久層的模板類來簡化編程;Spring 框架提供的JDBC模板類: JdbcTemplate 類;Spring 框架提供的整合 Hibernate 框架的模板類: HibernateTemplate 類2. 環境搭建 2.1 創建數據庫表結構 CREATE TABLE t_account(id INT PRIMARY KEY AUTO_INCREMENT,…

BZOJ 1692: [Usaco2007 Dec]隊列變換( 貪心 )

數據 n < 30000 , 然后 O( n ) 的貪心也過了..... USACO 數據是有多弱啊 ( ps : BZOJ 1640 和此題一模一樣 , 雙倍經驗 ) --------------------------------------------------------------------------------------#include<cstdio>#include<cstring>#include…

數據說話,88000條數據繪制北京市地圖

偶獲得一批數據&#xff0c;本著好玩的態度繪制下來看看到底是什么鬼&#xff0c;繪制的結果如下&#xff1a; 呵呵&#xff0c;什么都不像。而且中間最重要的部分因數據量過大繪制的已經看不清楚了。于是乎&#xff0c;縮小繪制范圍&#xff0c;去除周圍沒有用的數據。重新繪制…

我的第一個python web開發框架(11)——工具函數包說明(二)

db_helper.py是數據庫操作包&#xff0c;主要有兩個函數&#xff0c;分別是read()數據庫讀操作函數和write()數據庫寫操作函數。這個包的代碼是從小戴同學分享的博文改造過來的。 1 #!/usr/bin/env python2 # codingutf-83 4 import psycopg25 from common import log_helper6 …

ASP.NET:在一般處理程序中通過 Session 保存驗證碼卻無法顯示圖片?

1 using System.Drawing;2 using System.Web;3 using System.Web.SessionState;4 5 /// <summary>6 /// CaptchaHandler 的摘要說明7 /// </summary>8 public class CaptchaHandler : IHttpHandler, IRequiresSessionState  //簡記&#xff1a;我需要Session9 { …

[LINK]用Python計算昨天、今天和明天的日期時間

用Python計算昨天、今天和明天的日期時間 轉載于:https://www.cnblogs.com/Athrun/p/5477651.html

Windows系統下oracle數據庫每天定時備份

第一步&#xff1a;建立備份腳本oraclebackup.bat 首先建立一個備份bat文件&#xff0c;在D盤下新建備份目錄oraclebackup&#xff0c;將oracle安裝目錄下的EXP.EXE復制到此目錄下&#xff0c;再新建一個文本文件oraclebackup.txt&#xff0c;內容如下&#xff1a; echo off ec…

面試題3:二維數組查找

1 bool Find(const int *matrix, int rows, int columns, int number)2 {3 int key;4 int indexRow;5 int indexCol;6 7 /*合法性檢查*/8 if((NULL matrix)||(rows < 0)||(columns <0))9 { 10 return false; 11 } 12 13 /*提升…

linux crontab 命令

#method 1 crontab -e crontab -u root -e #不同用戶自己的任務計劃 crontab -l#method 2 vim /etc/crontab# Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .--…

[譯] RNN 循環神經網絡系列 2:文本分類

原文地址&#xff1a;RECURRENT NEURAL NETWORKS (RNN) – PART 2: TEXT CLASSIFICATION原文作者&#xff1a;GokuMohandas譯文出自&#xff1a;掘金翻譯計劃本文永久鏈接&#xff1a;github.com/xitu/gold-m…譯者&#xff1a;Changkun Ou校對者&#xff1a;yanqiangmiffy, To…

[置頂] Android開發者官方網站文檔 - 國內踏得網鏡像

Mark 一下&#xff1a; 鏡像地址&#xff1a;http://wear.techbrood.com/index.html Android DevelopTools: http://www.androiddevtools.cn/ 轉載于:https://www.cnblogs.com/superle/p/4561856.html

Java實現選擇排序

選擇排序思想就是選出最小或最大的數與第一個數交換&#xff0c;然后在剩下的數列中重復完成該動作。 package Sort;import java.util.Arrays;public class SelectionSort {public static int selectMinKey(int[] list, int beginIdx) {int idx beginIdx;int temp list[begin…