什么是微信開發(fā)第一步?
微信公眾平臺開發(fā)第一步詳解
如果有人問你,微信體系下,開放平臺、公眾號、小程序開發(fā)第一步是做什么?
我的回答是獲取微信access_token。access_token是公眾號的全局唯一接口調(diào)用憑據(jù), 沒有憑據(jù)后面的其他接口,都沒法調(diào)用。
公眾號調(diào)用各接口時(shí)都需使用access_token。開發(fā)者需要進(jìn)行妥善保存。access_token的存儲至少要保留512個字符空間。access_token的有效期目前為2個小時(shí),需定時(shí)刷新,重復(fù)獲取將導(dǎo)致上次獲取的access_token失效。
官方文檔地址:
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183
接口地址
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}
調(diào)試工具
微信官方為了大家開發(fā)公眾號時(shí),提供大家的開發(fā)效率,特地給開發(fā)者上線了一套調(diào)試工具
https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=基礎(chǔ)支持&form=獲取access_token接口%20/token
功能實(shí)現(xiàn)
這個功能,只需要調(diào)用這個接口,然后返回access_token,我們就不搭建Liunx,PHP,node等環(huán)境,直接用當(dāng)今流行的Serverless 相關(guān)平臺的Faas(云函數(shù))功能。 這里使用的是Bmob后端云,當(dāng)然你用阿里、騰訊、華為等等廠商支持Faas(云函數(shù)) 功能的都可以,只是語法稍微有點(diǎn)不同,這些開發(fā)小程序、公眾號都可以。 比自己搭建服務(wù)器要快很多。
前期準(zhǔn)備
第一步:準(zhǔn)備配置信息
登陸微信平臺
進(jìn)入開發(fā)-》基本配置

拿到
開發(fā)者ID(AppID)與開發(fā)者密碼(AppSecret),開發(fā)請求時(shí)需要用到。
第二步:編寫云函數(shù)
首先你有個Bmob后端應(yīng)用,點(diǎn)擊進(jìn)入云函數(shù)。選擇模板創(chuàng)建,當(dāng)然你也可以自己變。

自己編寫代碼,我們有一點(diǎn)javascript基礎(chǔ),或者java基礎(chǔ)都可以。這里介紹下Nodejs
文檔地址:http://doc.bmob.cn/cloud_function/web/develop_doc/#http_1
HTTP請求對象
oHttp對象可以模擬實(shí)現(xiàn)get、post、put、delete等各種HTTP請求信息,讓你在云端實(shí)現(xiàn)諸如數(shù)據(jù)采集、OAuth授權(quán)登錄等功能。Bmob的HTTP請求模塊采用Nodejs提供的request模塊,這里提供簡單的Get和Post的操作實(shí)例。更多的功能詳細(xì)參考:https://npmjs.org/package/request
/**
*發(fā)起Get請求
*/
//獲取Http模塊
var http = modules.oHttp;
//發(fā)起Get請求
http('https://www.bmob.cn', function (error, res, body) {
response.send(body);
});
-
/**
*發(fā)起Post請求
*/
//獲取Http模塊
var http = modules.oHttp;
var options = {
"url": 'https://api.bmob.cn/1/classes/GameScore',
"headers": {
'X-Bmob-Application-Id': 'Your Application ID',
'X-Bmob-REST-API-Key': 'Your REST API Key',
'Content-Type': 'application/json'
},
"body":JSON.stringify({"score":1337,"playerName":"Sean Plott"})
};
http.post(options, function(error, res, body) {
response.send(body);
});
微信access_token,這里只需要發(fā)起一個get請求,地址是這樣。
https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=基礎(chǔ)支持&form=獲取access_token接口%20/token
/**
*發(fā)起Get請求
*/
//獲取Http模塊
var http = modules.oHttp;
var url ="https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=基礎(chǔ)支持&form=獲取access_token接口%20/token";
//發(fā)起Get請求
http(url, function (error, res, body) {
response.send(body);
});
不到10行代碼,我們就可以拿到微信開發(fā)必備的access_token,access_token微信是有次數(shù)限制的,當(dāng)然不能這么每次獲取使用, 這樣只要請求次數(shù)多,每月必定超出微信給的次數(shù)。 微信官方說:access_token的有效期目前為2個小時(shí),需定時(shí)刷新,重復(fù)獲取將導(dǎo)致上次獲取的access_token失效, 那我們就給這個函數(shù)的結(jié)果保存到數(shù)據(jù)庫,做個定時(shí)任務(wù)2小時(shí)執(zhí)行一次。然后需要時(shí)讀取數(shù)據(jù)庫,這樣就不會擔(dān)心超了。
第三步:access_token保存數(shù)據(jù)庫
我們在控制臺建一個WeiXin_access_token表,增加access_token字段,里面隨便增加一條記錄,拿到id,用來更新這條記錄。當(dāng)然你也可以把每次獲取的access_token插入到這個表,需要的時(shí)候獲取到最新的一條。
云函數(shù)數(shù)據(jù)表操作文檔:http://doc.bmob.cn/cloud_function/web/develop_doc/#_9
function onRequest (request, response, modules) {
//獲取數(shù)據(jù)庫對象
var db = modules.oData;
//這里放到表里的ID
var objectId = 'NJEi333B';
//http請求方式: GET
var appid = 'wxd1b8c236059cd569';
var secret = 'xxxxxxxxx';
var url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + appid + '&secret=' + secret;
//獲取Http模塊
var http = modules.oHttp;
//發(fā)起Get請求
http(url, function (error, res, body) {
if (!error && res.statusCode == 200) {
//寫入數(shù)據(jù)庫
var resultObject = JSON.parse(body);
//如果返回錯誤則打印
if (resultObject.errcode) {
response.send(resultObject);
}
//更新到數(shù)據(jù)表
db.update({
"table": "WeiXin_access_token",
"objectId": objectId,
"data": { "access_token": resultObject.access_token }
}, function (err, data) {
response.send("success" + data);
});
}
});
//獲取微信access_token END
}
第四步:讀取access_token暴露給其他平臺調(diào)用
新建個空白云函數(shù),里面編寫一下代碼
function onRequest(request, response, modules) {
//數(shù)據(jù)庫對象
var db = modules.oData;
//查詢一條數(shù)據(jù)
db.findOne({
"table":"WeiXin_access_token",
"objectId":"NJEi333B"
},function(err,data){
//JSON打印給客戶端
response.send(data);
});
}
這里是代碼的執(zhí)行結(jié)果,需要預(yù)覽,可以打開一下鏈接。
http://cloud.bmob.cn/3fbee3a417249ddf/token
一樣不到10行代碼,即可暴露access_token給其他平臺調(diào)用。
總計(jì)不到20行代碼,不需要10分鐘,就可以實(shí)現(xiàn)微信整個access_token的維護(hù),與暴露給其他平臺使用。最后還有一個關(guān)鍵問題, 2小時(shí)自動刷新access_token。
第四步:自動刷新access_token
Bmob平臺云函數(shù)支持liunx下面的crontab語法定時(shí)任務(wù),當(dāng)然國內(nèi)其他公司的云函數(shù)也是支持定時(shí)任務(wù)的,具體看開發(fā)文檔。
http://doc.bmob.cn/cloud_function/web/timing_tasks/

總結(jié):
我們可以看到Serverless的Faas 開發(fā)微應(yīng)用,開發(fā)效率比傳統(tǒng)自己購買云主機(jī),云數(shù)據(jù)庫。高出很多倍。以至于國內(nèi)這2年,阿里、騰訊、華為等云廠商都推出了自己的Faas 服務(wù)。大家都可以去體驗(yàn)一下,你只需要關(guān)系業(yè)務(wù)代碼,不再需要去了解框架、運(yùn)維、底層相關(guān)技術(shù)。