微信公眾號開發(fā)入門須知:開發(fā)者認(rèn)證和獲取Access_token

前期準(zhǔn)備工作

1、開啟公眾號開發(fā)者模式
  1.1 申請公眾號
  1.2 開發(fā)者配置
2、AccessToken3、JS接口安全域名

1、開啟公眾號開發(fā)者模式

1.1 申請公眾號

微信的開發(fā)者文檔真的有點丈二和尚摸不著頭腦,有點讓人迷糊。

做微信公眾號開發(fā),先注冊微信公眾號,最好有一個服務(wù)器和一個備過案的域名,不然很多jsapi接口無法調(diào)試。

一般情況下,個人注冊訂閱號,企業(yè)注冊企業(yè)號。

申請公眾號
2.2 開發(fā)者配置

公眾平臺官網(wǎng)登錄之后,找到“基本配置”菜單欄

開發(fā)者配置

這里的服務(wù)器配置,是微信發(fā)請求到你所填寫的服務(wù)器地址去驗證你是這個==公眾號==的開發(fā)者的。

url填寫:http://外網(wǎng)IP。外網(wǎng)IP。嗯嗯http的端口號固定使用80,不可填寫其他。

Token:自主設(shè)置,這個token與公眾平臺wiki中常提的access_token不是一回事。這個token只用于驗證開發(fā)者服務(wù)器。

服務(wù)器配置

消息加解密密鑰隨機(jī)生成即可

消息加密模式,開發(fā)環(huán)境選擇明文即可

如果服務(wù)器端沒有,提交肯定提示失敗,或者出現(xiàn)錯誤。

我是自己有個域名,然后用Nodejs + Express寫了一個接口:

api/auth.js

// 第一步認(rèn)證為開發(fā)者
const crypto = require('crypto');
const config = require('../config');


// 微信認(rèn)證開發(fā)者  微信服務(wù)器發(fā)送請求到你的服務(wù)器,做校驗,參數(shù)都是微信傳過來的。
module.exports = auth = (req, res) => {

  //1.獲取微信服務(wù)器Get請求的參數(shù) signature、timestamp、nonce、echostr
  var signature = req.query.signature,//微信加密簽名
    timestamp = req.query.timestamp,//時間戳
    nonce = req.query.nonce,//隨機(jī)數(shù)
    echostr = req.query.echostr;//隨機(jī)字符串

  //2.將token、timestamp、nonce三個參數(shù)進(jìn)行字典序排序
  // 這里的 config.token 就是上面你自定義的 Token (如:beip***6666)
  var array = [config.token, timestamp, nonce];
  array.sort();

  //3.將三個參數(shù)字符串拼接成一個字符串進(jìn)行sha1加密
  var tempStr = array.join('');
  const hashCode = crypto.createHash('sha1'); //創(chuàng)建加密類型 
  var resultCode = hashCode.update(tempStr, 'utf8').digest('hex'); //對傳入的字符串進(jìn)行加密

  //4.開發(fā)者獲得加密后的字符串可與signature對比,標(biāo)識該請求來源于微信
  if (resultCode === signature) {
    res.send(echostr);
  } else {
    res.send('mismatch');
  }
};

這塊的邏輯流程圖如下:

使用Express搭建你的restfull api服務(wù)

app.js

const express = require('express');
const api = require('./api');
const path = require('path');
const app = express();
const port = 3000;

// 這里就是你的認(rèn)證路由
app.get('/', (req, res) => {
  api.auth(req, res);
});

// listen
app.listen(port, () => {
  console.log(`Server started on localhost:%d`, port);
});

一般你要把你的Node項目升級到你的服務(wù)器;

其實就是當(dāng)做服務(wù)器和你的電腦一樣就行了,一樣要先裝一個nodejs(如果不會,可以參考之前的教程,Node項目線上部署), 然后一樣啟動就行了,比如:

node app.js

這樣就啟動你項目,http://你的外網(wǎng)ip:3000;

不過微信規(guī)定端口必須是80,如果上一步你的port 可以設(shè)置80最好,如果不可以的,只能考慮用 Nginx 走下反向代理。

假設(shè)以上問題都解決了。

訪問 http://你的外網(wǎng)ip,如果瀏覽器打印了mismatch,說明這個路由走通了

這時候你再回到服務(wù)器設(shè)置這里,點擊按鈕,就會提示成功。

那么恭喜你,開始了萬里長征的第一步。

2、AccessToken

切記,這是繼續(xù)開發(fā)下去的一個重要步驟,缺少這個訪問令牌,一切都將不能進(jìn)行。

access_token是公眾號的全局唯一接口調(diào)用憑據(jù),公眾號調(diào)用各接口時都需使用access_token。開發(fā)者需要進(jìn)行妥善保存。access_token的存儲至少要保留512個字符空間。access_token的有效期目前為2個小時,需定時刷新,重復(fù)獲取將導(dǎo)致上次獲取的access_token失效。

公眾平臺的API調(diào)用所需的access_token的使用及生成方式說明:

1、建議公眾號開發(fā)者使用中控服務(wù)器統(tǒng)一獲取和刷新access_token,其他業(yè)務(wù)邏輯服務(wù)器所使用的access_token均來自于該中控服務(wù)器,不應(yīng)該各自去刷新,否則容易造成沖突,導(dǎo)致access_token覆蓋而影響業(yè)務(wù);

2、目前access_token的有效期通過返回的expire_in來傳達(dá),目前是7200秒之內(nèi)的值。中控服務(wù)器需要根據(jù)這個有效時間提前去刷新新access_token。在刷新過程中,中控服務(wù)器可對外繼續(xù)輸出的老access_token,此時公眾平臺后臺會保證在5分鐘內(nèi),新老access_token都可用,這保證了第三方業(yè)務(wù)的平滑過渡

3、access_token的有效時間可能會在未來有調(diào)整,所以中控服務(wù)器不僅需要內(nèi)部定時主動刷新,還需要提供被動刷新access_token的接口,這樣便于業(yè)務(wù)服務(wù)器在API調(diào)用獲知access_token已超時的情況下,可以觸發(fā)access_token的刷新流程。

公眾號和小程序均可以使用AppIDAppSecret調(diào)用本接口來獲取access_tokenAppIDAppSecret可在“微信公眾平臺-開發(fā)-基本配置”頁中獲得(需要已經(jīng)成為開發(fā)者,且?guī)ぬ枦]有異常狀態(tài))。調(diào)用接口時,請登錄“微信公眾平臺-開發(fā)-基本配置”提前將服務(wù)器IP地址添加到IP白名單中,點擊查看設(shè)置方法,否則將無法調(diào)用成功。小程序無需配置IP白名單。

接口調(diào)用請求說明

https請求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

參數(shù)說明

參數(shù) 是否必須 說明
grant_type 獲取access_token填寫client_credential
appid 第三方用戶唯一憑證
secret 第三方用戶唯一憑證密鑰,即appsecret

返回說明

正常情況下,微信會返回下述JSON數(shù)據(jù)包給公眾號:

{"access_token":"ACCESS_TOKEN","expires_in":7200}

參數(shù)說明

參數(shù) 說明
access_token 獲取到的憑證
expires_in 憑證有效時間,單位:秒

錯誤時微信會返回錯誤碼等信息,JSON數(shù)據(jù)包示例如下(該示例為AppID無效錯誤):

{"errcode":40013,"errmsg":"invalid appid"}

返回碼說明

返回碼 說明
-1 系統(tǒng)繁忙,此時請開發(fā)者稍候再試
0 請求成功
40001 AppSecret錯誤或者AppSecret不屬于這個公眾號,請開發(fā)者確認(rèn)AppSecret的正確性
40002 請確保grant_type字段值為client_credential
40164 調(diào)用接口的IP地址不在白名單中,請在接口IP白名單中進(jìn)行設(shè)置。(小程序及小游戲調(diào)用不要求IP地址在白名單內(nèi)。)

可以在線調(diào)試:

access_token是很多微信接口的必傳參數(shù),所以這一步很重要。

3、JS接口安全域名

這個設(shè)置很重要,微信只允許在JS接口安全域名下調(diào)試所有開發(fā)的JS接口

如果是正式公眾號的開發(fā),這個域名只能是備案過的域名;

如果是測試公眾號,這里就隨意,可以是本地server;

這里需要注意的是,填寫格式,如wx.qq.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容