成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

nodejs開發(fā)企業(yè)微信第三方應用的示例分析

小編給大家分享一下nodejs開發(fā)企業(yè)微信第三方應用的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯公司自2013年起,先為洪洞等服務建站,洪洞等地企業(yè),進行企業(yè)商務咨詢服務。為洪洞企業(yè)網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。

一、注冊第三發(fā)服務商

登陸 服務商官網 ,注冊成為服務商,并登陸服務商管理后臺。

二、配置開發(fā)信息

在創(chuàng)建應用之前,首先要配置好通用開發(fā)參數

nodejs開發(fā)企業(yè)微信第三方應用的示例分析

在填寫系統(tǒng)事件接收 url 時,要正確響應企業(yè)微信驗證 url 的請求。這個可以參考企業(yè)微信后臺,自建應用的接收消息的 api 設置。

在企業(yè)的管理端后臺,進入需要設置接收消息的目標應用,點擊“接收消息”的“設置API接收”按鈕,進入配置頁面。

nodejs開發(fā)企業(yè)微信第三方應用的示例分析

要求填寫應用的 URL、Token、EncodingAESKey 三個參數

  • URL 是企業(yè)后臺接收企業(yè)微信推送請求的訪問協議和地址,支持 http 或 https 協議(為了提高安全性,建議使用 https)。

  • Token 可由企業(yè)任意填寫,用于生成簽名。

  • EncodingAESKey 用于消息體的加密,是 AES 密鑰的 Base64 編碼。

 2.1 驗證 url 有效性

當點擊保存的時候,企業(yè)微信會發(fā)生一條 get 請求到填寫的 url

比如 url 設置的是 https://api.worktile.com , 企業(yè)微信將發(fā)送如下驗證請求:

請求地址: https://api.worktile.com/?msg_signature=ASDFQWEXZCVAQFASDFASDFSS×tamp=13500001234&nonce=123412323&echostr=ENCRYPT_STR


參數說明
msg_signature企業(yè)微信加密簽名,msg_signature 結合了企業(yè)填寫的 token、請求中的 timestamp、nonce 參數、加密的消息體
timestamp時間戳
nonce隨機數
echostr加密的字符串。需要解密得到消息內容明文,解密后有random、msg_len、msg、receiveid 四個字段,其中 msg 即為消息內容明文

2.1.1 通過參數 msg_signature 對請求進行校驗

首先要把剛才配置時隨機生成的 token, timestamp, nonce, msg_encrypt 進行 sha1 加密,這里我們可以直接使用 npm 模塊 sha1 進行加密,然后判斷得到的 str 是否和 msg_signature 相等。

function sha1(str) {
 const md5sum = crypto.createHash('sha1');
 md5sum.update(str);
 const ciphertext = md5sum.digest('hex');
 return ciphertext;
}
function checkSignature(req, res, encrypt) {
 const query = req.query;
 console.log('Request URL: ', req.url);
 const signature = query.msg_signature;
 const timestamp = query.timestamp;
 const nonce = query.nonce;
 let echostr;
 console.log('encrypt', encrypt);
 if (!encrypt) {
  echostr = query.echostr;
 } else {
  echostr = encrypt;
 }
 console.log('timestamp: ', timestamp);
 console.log('nonce: ', nonce);
 console.log('signature: ', signature);
 // 將 token/timestamp/nonce 三個參數進行字典序排序
 const tmpArr = [token, timestamp, nonce, echostr];
 const tmpStr = sha1(tmpArr.sort().join(''));
 console.log('Sha1 String: ', tmpStr);
 // 驗證排序并加密后的字符串與 signature 是否相等
 if (tmpStr === signature) {
  // 原樣返回echostr參數內容
  const result = _decode(echostr);
  console.log('last', result);
  console.log('Check Success');
  return result;
 } else {
  console.log('Check Failed');
  return 'failed';
 }
}

2.1.2 解密 echostr 得到 msg 并返回

密文解密過程:

對剛才生成的 AESKey 進行 base64 解碼

const EncodingAESKey = '21IpFqj8qolJbaqPqe1rVTAK5sgkaQ3GQmUKiUQLwRe';
let aesKey = Buffer.from(EncodingAESKey + '=', 'base64');

對 AESKey 進行 aes-256-cbc 解密

function _decode(data) {
 let aesKey = Buffer.from('21IpFqj8qolJbaqPqe1rVTAK5sgkaQ3GQmUKiUQLwRe' + '=', 'base64');
 let aesCipher = crypto.createDecipheriv("aes-256-cbc", aesKey, aesKey.slice(0, 16));
 aesCipher.setAutoPadding(false);
 let decipheredBuff = Buffer.concat([aesCipher.update(data, 'base64'), aesCipher.final()]);
 decipheredBuff = PKCS7Decoder(decipheredBuff);
 let len_netOrder_corpid = decipheredBuff.slice(16);
 let msg_len = len_netOrder_corpid.slice(0, 4).readUInt32BE(0);
 const result = len_netOrder_corpid.slice(4, msg_len + 4).toString();
 return result; // 返回一個解密后的明文-
}
function PKCS7Decoder (buff) {
 var pad = buff[buff.length - 1];
 if (pad < 1 || pad > 32) {
  pad = 0;
 }
 return buff.slice(0, buff.length - pad);
}

然后返回 result 即可

res.end(result);

2.2 回調 url 驗證失敗問題

驗證 URL 時,經常會碰到 URL 驗證失敗的問題,解決思路是借助微信企業(yè)號 接口調試工具

三、創(chuàng)建應用

nodejs開發(fā)企業(yè)微信第三方應用的示例分析

四、測試應用

應用創(chuàng)建成功后,服務商可以授權 10 個測試企業(yè)

nodejs開發(fā)企業(yè)微信第三方應用的示例分析

從企業(yè)微信應用市場發(fā)起授權時,企業(yè)微信給剛才應用設置的 指令回調 url 發(fā)送一個 post 請求,比如:

https://api.worktile.com/worktile?msg_signature=b99605616153ffbfbe6ebbb500bd211e67ed714d&timestamp=1551076894&nonce=1551709703 ,直接返回成功即可。

各個事件的回調,服務商在收到推送后都必須直接返回字符串 “success”,若返回值不是 “success”,企業(yè)微信會把返回內容當作錯誤信息。

app.post('/worktile', function (req, res) {
 console.log('req.body', req.body);
 res.send('success');
});

測試應用注意事項

  1. 用于安裝測試的企業(yè)微信帳號需服務商自行注冊,每個應用支持同時添加 10 個測試企業(yè)微信賬號

  2. 安裝測試的企業(yè)微信帳號使用的是當前的應用配置信息,后續(xù)的修改不會進行同步;如需更新應用信息請重新授權安裝

  3. 同一企業(yè)微信帳號,不支持同時安裝測試應用和正式發(fā)布的應用

五、應用上線

已認證企業(yè)微信的服務商,可進入應用管理—點擊提交上線—勾選應用—提交上線。

六、用戶網頁授權登錄

6.1 構造第三方應用網頁授權鏈接

如果第三方應用需要在打開的網頁里面攜帶用戶的身份信息,第一步需要構造如下的鏈接來獲取 code:

https://open.weixin.qq.com/connect/oauth3/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

參數必須說明
appid第三方應用 id(即 ww 或 wx 開頭的 suite_id)。注意與企業(yè)的網頁授權登錄不同
redirect_uri授權后重定向的回調鏈接地址,請使用 urlencode 對鏈接進行處理 ,注意域名需要設置為第三方應用的可信域名
response_type返回類型,此時固定為:code
scope應用授權作用域。snsapi_base:靜默授權,可獲取成員的基礎信息(UserId與DeviceId);snsapi_userinfo:靜默授權,可獲取成員的詳細信息,但不包含手機、郵箱等敏感信息;snsapi_privateinfo:手動授權,可獲取成員的詳細信息,包含手機、郵箱等敏感信息。
state重定向后會帶上 state 參數,企業(yè)可以填寫 a-zA-Z0-9 的參數值,長度不可超過 128 個字節(jié)
#wechat_redirect終端使用此參數判斷是否需要帶上身份信息

nodejs開發(fā)企業(yè)微信第三方應用的示例分析

企業(yè)員工點擊后,頁面將跳轉至 redirect_uri?code=CODE&state=STATE,第三方應用可根據 code 參數獲得企業(yè)員工的 corpid 與 userid。code 長度最大為 512 字節(jié)。

6.2 獲取訪問用戶身份

請求方式:GET(HTTPS)

請求地址: https://qyapi.weixin.qq.com/cgi-bin/service/getuserinfo3rd?access_token=SUITE_ACCESS_TOKEN&code=CODE


參數必須說明
access_token第三方應用的 suite_access_token,參見“獲取第三方應用憑證”
code通過成員授權獲取到的 code,最大為 512 字節(jié)。每次成員授權帶上的 code 將不一樣,code 只能使用一次,5 分鐘未被使用自動過期。

 6.2.1 獲取第三方應用的 suite_access_token

請求方式:POST(HTTPS)

請求地址: https://qyapi.weixin.qq.com/cgi-bin/service/get_suite_token


參數是否必須說明
suite_id以 ww 或 wx 開頭應用 id(對應于舊的以 tj 開頭的套件 id)
suite_secret應用 secret
suite_ticket企業(yè)微信后臺推送的 ticket

由于第三方服務商可能托管了大量的企業(yè),其安全問題造成的影響會更加嚴重,故 API 中除了合法來源 IP 校驗之外,還額外增加了 suite_ticket 作為安全憑證。

獲取 suite_access_token 時,需要 suite_ticket 參數。suite_ticket 由企業(yè)微信后臺定時推送給“指令回調 URL”,每十分鐘更新一次,見推送 suite_ticket 。

suite_ticket 實際有效期為 30 分鐘,可以容錯連續(xù)兩次獲取 suite_ticket 失敗的情況,但是請永遠使用最新接收到的 suite_ticket。

通過本接口獲取的 suite_access_token 有效期為 2 小時,開發(fā)者需要進行緩存,不可頻繁獲取。

6.2.2 獲取推送 suite_ticket

企業(yè)微信服務器會定時(每十分鐘)推送 ticket。ticket 會實時變更,并用于后續(xù)接口的調用。

請求方式:POST(HTTPS)

請求地址: https://api.ninesix.cc/worktile?msg_signature=87276aaf15a13e1eb2ebb6d93732ca668c3ddef8&timestamp=1551850300&nonce=1551051655

在發(fā)生授權、通訊錄變更、ticket 變化等事件時,企業(yè)微信服務器會向應用的“指令回調 URL”推送相應的事件消息,nodejs 接收到的是 xml,解析后拿到 encrypt 字段,然后使用上面配置通用開發(fā)參數的 url 時用的解密方式,就可以得到 suite_ticket。

nodejs開發(fā)企業(yè)微信第三方應用的示例分析

6.3 獲取用戶敏感信息

請求方式:POST(HTTPS)

請求地址: https://qyapi.weixin.qq.com/cgi-bin/service/getuserdetail3rd?access_token=SUITE_ACCESS_TOKEN

{
  "user_ticket": "USER_TICKET"
}
參數必須說明
access_token第三方應用的 suite_access_token,參見“獲取第三方應用憑證”
user_ticket成員票據

返回結果:

{
  "errcode": 0,
  "errmsg": "ok",
  "corpid": "wwxxxxxxyyyyy",
  "userid": "lisi",
  "name": "李四",
  "mobile": "15913215421",
  "gender": "1",
  "email": "xxx@xx.com",
  "avatar": "http://shp.qpic.cn/bizmp/xxxxxxxxxxx/0",
  "qr_code": "https://open.work.weixin.qq.com/wwopen/userQRCode?vcode=vcfc13b01dfs78e981c"
}

七、用戶授權成功

首頁

nodejs開發(fā)企業(yè)微信第三方應用的示例分析

詳情頁

nodejs開發(fā)企業(yè)微信第三方應用的示例分析

八、給用戶發(fā)消息

我們可以給推送文本、圖片、視頻、文件、圖文等類型。

請求方式:POST(HTTPS)

請求地址: https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN

推送的時候需要 access_token 和 應用的 agentId,第三方服務商,可通過接口 獲取企業(yè)授權信息 獲取該參數值,其實可以直接通過獲取企業(yè)永久授權碼 直接取到這兩個值。

在我們測試安裝應用成功之后,企業(yè)微信會 post 一條請求給指令回調 URL,通過上面的解密方式,可以解析到 xml 中的 auth_code

nodejs開發(fā)企業(yè)微信第三方應用的示例分析

然后通過 https://qyapi.weixin.qq.com/cgi-bin/service/get_permanent_code?suite_access_token=SUITE_ACCESS_TOKENauth_code 可以獲取到 access_token 和 agentId,返回的 agent 是一個數組,但僅舊的多應用套件授權時會返回多個agent,對新的單應用授權,永遠只返回一個 agent。

再通過 access_token 和 agentId 就可以愉快的給用戶發(fā)送消息了。

nodejs開發(fā)企業(yè)微信第三方應用的示例分析

當點擊鏈接時,可以跳到指定任務或者日程等,只不過返回時還是在企業(yè)微信的消息模塊,并不能自動打開第三方應用,客服回復不支持這么做。

九、注意事項

api 可能有時效性,如有差異,以官方 api 為準。

以上是“nodejs開發(fā)企業(yè)微信第三方應用的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯行業(yè)資訊頻道!

網站題目:nodejs開發(fā)企業(yè)微信第三方應用的示例分析
網站地址:http://jinyejixie.com/article14/pdsdde.html

成都網站建設公司_創(chuàng)新互聯,為您提供自適應網站、ChatGPT、品牌網站設計、靜態(tài)網站網站排名、搜索引擎優(yōu)化

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

網站建設網站維護公司
佛坪县| 成武县| 广安市| 濮阳市| 邵阳县| 平遥县| 浦城县| 长沙市| 丹巴县| 兴文县| 兴文县| 汤阴县| 通城县| 扬中市| 论坛| 安新县| 清徐县| 临西县| 浪卡子县| 汽车| 泾川县| 东明县| 岫岩| 大石桥市| 湖南省| 林周县| 阳高县| 沂水县| 石阡县| 中西区| 寿宁县| 周口市| 惠东县| 曲靖市| 琼海市| 东光县| 清河县| 寻甸| 蛟河市| 新余市| 延津县|