整體實現(xiàn)思路:
一、微信小程序登錄退出,訪問后端接口
1.后端的登錄接口不需要token驗證
2.后端的退出接口,用戶信息的接口,需要token驗證
3.該token是專門給小程序用的,不能和管理后臺的token共用,因此需要創(chuàng)建一個 token表,存儲微信小程序 用戶的id、token、token過期時間、記錄的創(chuàng)建時間、記錄的修改時間、記錄的刪除時間 等信息
4.用戶每次訪問小程序,就要把用戶對應(yīng)的舊token刪除,增加一個新的token,并返回用戶信息+token給負(fù)責(zé)小程序的前端
5.根據(jù)token,去請求小程序其它的需要token驗證的后端接口
6.需要token驗證的后端接口,都需要放在中間件下面,由中間件來校驗token的有效性
二、生成微信小程序二維碼的接口,掃微信小程序二維碼,跳到前端指定的頁面,獲取scene參數(shù)的值,訪問后端接口
1.后端在管理后臺,提供接口,為每一個項目生成一個小程序二維碼
2.將生成的小程序二維碼(請求微信小程序官方提供的接口,返回base64圖片編碼,可以將內(nèi)容放到 img 的 src 中進(jìn)行展示),將內(nèi)容保存為圖片文件
3.將該圖片文件上傳到oss,將oss返回的圖片路徑,保存到數(shù)據(jù)表中,某個項目有二維碼,直接讀取,沒有再請求接口生成,避免每次都要請求接口生成
4.掃描微信小程序二維碼,請求到前端提供的頁面中,前端根據(jù)scene的值(后端提供的某個項目的id值),請求相應(yīng)的接口,獲取相應(yīng)的數(shù)據(jù),相應(yīng)的接口不要加token驗證
5.注意:微信小程序,需要發(fā)布后,才能掃
三、mysql的token表
CREATE TABLE `subject_token` (
? `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
? `subject_id` int(11) NOT NULL DEFAULT '0' COMMENT '用戶id(用戶表的id)',
? `token` varchar(255) NOT NULL DEFAULT '' COMMENT 'token值',
? `express_at` datetime DEFAULT NULL COMMENT '有效期',
? `state` varchar(4) NOT NULL DEFAULT '1001' COMMENT '狀態(tài):1001 正常; 1002 過期;',
? `created_at` datetime DEFAULT NULL COMMENT '創(chuàng)建時間',
? `updated_at` datetime DEFAULT NULL COMMENT '更新時間',
? `deleted_at` datetime DEFAULT NULL COMMENT '刪除時間',
? PRIMARY KEY (`id`) USING BTREE,
? KEY `subject_id` (`subject_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='微信小程序用戶token表';
主要的實現(xiàn)邏輯
一、微信小程序登錄退出,訪問后端接口
1.微信小程序請求的后端登錄接口(不需要token驗證)
(1)控制器controller

(2)服務(wù)service
(2.1)登錄授權(quán)





(2.2)獲取生成的token

2.微信小程序請求的后端退出接口(需要token驗證)
(1)中間件



(2)控制器controller

(3)服務(wù)service
(3.1)退出

(3.2)中間件校驗token


二、生成微信小程序二維碼的接口,掃微信小程序二維碼,請求后端接口



注意:
1.微信小程序,需要發(fā)布后,才能掃
2.重要的參數(shù):path,scene
3. $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . $appID . '&secret=' . $secret;
(1)需要用get請求
(2)將 appid,secret 參數(shù)放在postman的Params中
grant_type:client_credential
appid:登錄小程序官網(wǎng),到自己相應(yīng)的小程序中獲取
secret:登錄小程序官網(wǎng),到自己相應(yīng)的小程序中獲取,該值需要管理員才能獲取

4. $codeurl = 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=' . $result['access_token'];
(1)需要用post請求,getwxacodeunlimit 該接口生成的小程序碼,永久有效,數(shù)量暫無限制
(2)將 access_token 參數(shù)放在postman的Params中
(3)在body中,選擇raw (提交的內(nèi)容要json格式,不能form格式提交),獲取scene的之后請求的接口,根據(jù)自己的業(yè)務(wù)需要,看是否需要加token驗證,若需要,就把相應(yīng)的接口路由,放在中間件下進(jìn)行校驗
{
? ? "path": "pages/shanghai/shanghai",
? ? "width": 430,
? ? "scene": "111",
? ? //"check_path": false,
? ? //"env_version": "release"
}

