微信公衆號開發入門須知:開發者認證和獲取Access_token

一、開啓公衆號開發者模式

1.1 申請公衆號

微信的開發者文檔真的有點丈二和尚摸不着頭腦,有點讓人迷糊。javascript

作微信公衆號開發,先註冊微信公衆號,最好有一個服務器和一個備過案的域名,否則不少jsapi接口沒法調試。java

通常狀況下,我的註冊訂閱號,企業註冊企業號。node

申請公衆號

2.2 開發者配置

公衆平臺官網登陸以後,找到「基本配置」菜單欄express

開發者配置

這裏的服務器配置,是微信發請求到你所填寫的服務器地址去驗證你是這個==公衆號==的開發者的。小程序

url填寫:http://外網IP。外網IP。嗯嗯http的端口號固定使用80,不可填寫其餘。api

Token:自主設置,這個token與公衆平臺wiki中常提的access_token不是一回事。這個token只用於驗證開發者服務器。 瀏覽器

服務器配置

消息加解密密鑰隨機生成便可安全

消息加密模式,開發環境選擇明文便可bash

若是服務器端沒有,提交確定提示失敗,或者出現錯誤。服務器

我是本身有個域名,而後用Nodejs + Express寫了一個接口:

api/auth.js

// 第一步認證爲開發者
const crypto = require('crypto');
const config = require('../config');


// 微信認證開發者 微信服務器發送請求到你的服務器,作校驗,參數都是微信傳過來的。
module.exports = auth = (req, res) => {

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

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

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

  //4.開發者得到加密後的字符串可與signature對比,標識該請求來源於微信
  if (resultCode === signature) {
    res.send(echostr);
  } else {
    res.send('mismatch');
  }
};
複製代碼

這塊的邏輯流程圖以下:

使用Express搭建你的restfull api服務

app.js

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

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

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

通常你要把你的Node項目升級到你的服務器;

其實就是當作服務器和你的電腦同樣就好了,同樣要先裝一個nodejs(若是不會,能夠參考以前的教程,Node項目線上部署), 而後同樣啓動就好了,好比:

node app.js
複製代碼

這樣就啓動你項目,http://你的外網ip:3000;

不過微信規定端口必須是80,若是上一步你的port 能夠設置80最好,若是不能夠的,只能考慮用 Nginx 走下反向代理。

假設以上問題都解決了。

訪問 http://你的外網ip,若是瀏覽器打印了mismatch,說明這個路由走通了

這時候你再回到服務器設置這裏,點擊按鈕,就會提示成功。

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

二、AccessToken

切記,這是繼續開發下去的一個重要步驟,缺乏這個訪問令牌,一切都將不能進行。

access_token是公衆號的全局惟一接口調用憑據,公衆號調用各接口時都需使用access_token。開發者須要進行妥善保存。access_token的存儲至少要保留512個字符空間。access_token的有效期目前爲2個小時,需定時刷新,重複獲取將致使上次獲取的access_token失效。

公衆平臺的API調用所需的access_token的使用及生成方式說明:

一、建議公衆號開發者使用中控服務器統一獲取和刷新access_token,其餘業務邏輯服務器所使用的access_token均來自於該中控服務器,不該該各自去刷新,不然容易形成衝突,致使access_token覆蓋而影響業務;

二、目前access_token的有效期經過返回的expire_in來傳達,目前是7200秒以內的值。中控服務器須要根據這個有效時間提早去刷新新access_token。在刷新過程當中,中控服務器可對外繼續輸出的老access_token,此時公衆平臺後臺會保證在5分鐘內,新老access_token均可用,這保證了第三方業務的平滑過渡

三、access_token的有效時間可能會在將來有調整,因此中控服務器不只須要內部定時主動刷新,還須要提供被動刷新access_token的接口,這樣便於業務服務器在API調用獲知access_token已超時的狀況下,能夠觸發access_token的刷新流程。

公衆號和小程序都可以使用AppIDAppSecret調用本接口來獲取access_tokenAppIDAppSecret可在「微信公衆平臺-開發-基本配置」頁中得到(須要已經成爲開發者,且賬號沒有異常狀態)。**調用接口時,請登陸「微信公衆平臺-開發-基本配置」提早將服務器IP地址添加到IP白名單中,點擊查看設置方法,不然將沒法調用成功。**小程序無需配置IP白名單。

接口調用請求說明

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

參數說明

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

返回說明

正常狀況下,微信會返回下述JSON數據包給公衆號:

{"access_token":"ACCESS_TOKEN","expires_in":7200}
複製代碼

參數說明

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

錯誤時微信會返回錯誤碼等信息,JSON數據包示例以下(該示例爲AppID無效錯誤):

{"errcode":40013,"errmsg":"invalid appid"}
複製代碼

返回碼說明

返回碼 說明
-1 系統繁忙,此時請開發者稍候再試
0 請求成功
40001 AppSecret錯誤或者AppSecret不屬於這個公衆號,請開發者確認AppSecret的正確性
40002 請確保grant_type字段值爲client_credential
40164 調用接口的IP地址不在白名單中,請在接口IP白名單中進行設置。(小程序及小遊戲調用不要求IP地址在白名單內。)

能夠在線調試:

access_token是不少微信接口的必傳參數,因此這一步很重要。

三、JS接口安全域名

這個設置很重要,微信只容許在JS接口安全域名下調試全部開發的JS接口

若是是正式公衆號的開發,這個域名只能是備案過的域名;

若是是測試公衆號,這裏就隨意,能夠是本地server;

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

相關文章
相關標籤/搜索