學(xué)會微信服務(wù)端開發(fā)第一步

什么是微信開發(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)備配置信息

登陸微信平臺

https://mp.weixin.qq.com/

進(jìn)入開發(fā)-》基本配置

image.png

拿到

開發(fā)者ID(AppID)與開發(fā)者密碼(AppSecret),開發(fā)請求時(shí)需要用到。

第二步:編寫云函數(shù)

首先你有個Bmob后端應(yīng)用,點(diǎn)擊進(jìn)入云函數(shù)。選擇模板創(chuàng)建,當(dāng)然你也可以自己變。

云函數(shù)

自己編寫代碼,我們有一點(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/

image.png

總結(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ù)。

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

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

  • 命運(yùn)就像一座天橋,交織的點(diǎn)只有一個,一旦錯過,就會漸行漸遠(yuǎn)。而我們現(xiàn)在就在交織的點(diǎn)上,我希望時(shí)間一直停留在這個點(diǎn)上...
    我的名字里有韓閱讀 699評論 0 1
  • “隔壁的姐給你做的腳墊,你試試” “你三姨問你你對象腳的尺碼好大,她準(zhǔn)備做一雙布鞋,她平時(shí)都賣一百五十多塊錢一雙呢...
    強(qiáng)子_004c閱讀 513評論 2 8
  • 1、及時(shí)發(fā)現(xiàn)團(tuán)隊(duì)中的小問題,不要以為是小問題就可以容忍、馬虎,小問題不解決早晚會是大問題。 2.錯誤可以犯,但是錯...
    小蘋果安妮閱讀 175評論 0 0
  • 拆解對象:《通往財(cái)富自由之路》之《我能賺得更多么》(2017年1月27日專欄文章) Step1.選摘 什么是貪婪?...
    Math劉閱讀 481評論 0 0

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