整體實(shí)現(xiàn)思路:
一歉眷、微信小程序登錄退出牺六,訪問(wèn)后端接口
1.后端的登錄接口不需要token驗(yàn)證
2.后端的退出接口,用戶信息的接口汗捡,需要token驗(yàn)證
3.該token是專門給小程序用的淑际,不能和管理后臺(tái)的token共用,因此需要?jiǎng)?chuàng)建一個(gè) token表扇住,存儲(chǔ)微信小程序 用戶的id春缕、token、token過(guò)期時(shí)間艘蹋、記錄的創(chuàng)建時(shí)間锄贼、記錄的修改時(shí)間、記錄的刪除時(shí)間 等信息
4.用戶每次訪問(wèn)小程序簿训,就要把用戶對(duì)應(yīng)的舊token刪除咱娶,增加一個(gè)新的token米间,并返回用戶信息+token給負(fù)責(zé)小程序的前端
5.根據(jù)token强品,去請(qǐng)求小程序其它的需要token驗(yàn)證的后端接口
6.需要token驗(yàn)證的后端接口,都需要放在中間件下面屈糊,由中間件來(lái)校驗(yàn)token的有效性
二的榛、生成微信小程序二維碼的接口,掃微信小程序二維碼逻锐,跳到前端指定的頁(yè)面夫晌,獲取scene參數(shù)的值,訪問(wèn)后端接口
1.后端在管理后臺(tái)昧诱,提供接口晓淀,為每一個(gè)項(xiàng)目生成一個(gè)小程序二維碼
2.將生成的小程序二維碼(請(qǐng)求微信小程序官方提供的接口,返回base64圖片編碼盏档,可以將內(nèi)容放到 img 的 src 中進(jìn)行展示)凶掰,將內(nèi)容保存為圖片文件
3.將該圖片文件上傳到oss,將oss返回的圖片路徑,保存到數(shù)據(jù)表中懦窘,某個(gè)項(xiàng)目有二維碼前翎,直接讀取,沒(méi)有再請(qǐng)求接口生成畅涂,避免每次都要請(qǐng)求接口生成
4.掃描微信小程序二維碼港华,請(qǐng)求到前端提供的頁(yè)面中,前端根據(jù)scene的值(后端提供的某個(gè)項(xiàng)目的id值)午衰,請(qǐng)求相應(yīng)的接口立宜,獲取相應(yīng)的數(shù)據(jù),相應(yīng)的接口不要加token驗(yàn)證
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 過(guò)期商模;',
? `created_at` datetime DEFAULT NULL COMMENT '創(chuàng)建時(shí)間',
? `updated_at` datetime DEFAULT NULL COMMENT '更新時(shí)間',
? `deleted_at` datetime DEFAULT NULL COMMENT '刪除時(shí)間',
? PRIMARY KEY (`id`) USING BTREE,
? KEY `subject_id` (`subject_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='微信小程序用戶token表';
主要的實(shí)現(xiàn)邏輯
一、微信小程序登錄退出蜘澜,訪問(wèn)后端接口
1.微信小程序請(qǐng)求的后端登錄接口(不需要token驗(yàn)證)
(1)控制器controller
(2)服務(wù)service
(2.1)登錄授權(quán)
(2.2)獲取生成的token
2.微信小程序請(qǐng)求的后端退出接口(需要token驗(yàn)證)
(1)中間件
(2)控制器controller
(3)服務(wù)service
(3.1)退出
(3.2)中間件校驗(yàn)token
二施流、生成微信小程序二維碼的接口,掃微信小程序二維碼鄙信,請(qǐng)求后端接口
注意:
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請(qǐng)求
(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請(qǐng)求,getwxacodeunlimit 該接口生成的小程序碼渔伯,永久有效顶霞,數(shù)量暫無(wú)限制
(2)將 access_token 參數(shù)放在postman的Params中
(3)在body中,選擇raw (提交的內(nèi)容要json格式锣吼,不能form格式提交)选浑,獲取scene的之后請(qǐng)求的接口,根據(jù)自己的業(yè)務(wù)需要玄叠,看是否需要加token驗(yàn)證古徒,若需要,就把相應(yīng)的接口路由读恃,放在中間件下進(jìn)行校驗(yàn)
{
? ? "path": "pages/shanghai/shanghai",
? ? "width": 430,
? ? "scene": "111",
? ? //"check_path": false,
? ? //"env_version": "release"
}