å®å ¨æ¦è¿°
åé¢ç« è讲解çæ¥å£æ¯è£¸é²çãä¸å®å ¨çï¼ä½¿ç¨postãget模æå¯ä»¥è½»æ¾å¯¹apiè¿è¡è¯·æ±ï¼æç®åçæ»å»å°±å¯ä»¥ç¬é´å®æè¿ä¸ä¼åç注åï¼
æ以å¨è¿è¡apiæ¥å£é讯çåæ¶æ们åºè¯¥è¿è¡æ°æ®çéªè¯å·¥ä½ï¼
å å¯åçåæµç¨
1ãä»æå¡å¨ç«¯è·åä¸ä¸ªå¯ä¸æ§çtokenï¼æ们称ä¹ä¸º accessToken;
2ãå端对accessTokenè¿è¡éæºæ§æååmd5å å¯,产çç¾åï¼ä¿åå¨æ¬å°åå¨ä¸ï¼;
3ãå端å¨ä¸å端è¿è¡äº¤äºæ¶ä¼ éç¾å;
4ãå端æ¥æ¶æ°æ®æ¯éªè¯ç¾åã
ç¾ååå¤
1ãå¨ commons æ件夹å å建
1.1 md5.js //js md5 å å¯ [ å¨è¯¾ç¨å è·åæ¤ jsæ件 ]
1.2 sign.js // ç¾åå½æ°
sign.js
var md5 = require('./md5.js');
module.exports = {
sign : function(apiServer){
// ç¯å¢å¤æéuniç¯å¢ä¸æ¯æ
if(!uni){return '...';}
// è¿æ¥æå¡å¨è·åä¸ä¸ªä¸´æ¶çaccessToken
uni.request({
url: apiServer+'getAccessToken',
method: 'GET',
success: res => {
if(res.data.status != 'ok'){return ;}
var data = res.data.data;
// 对 accessToken è¿è¡md5å å¯
var accessToken = md5.hex_md5(data.token + data.time);
// ç¾å = md5(accessToekn + time) + '-' + 'accessToekn';
var sign = accessToken + '-' + data.token;
//console.log(sign);
// è®°å½å¨æ¬å°
uni.setStorage({
key:"sign",
data:sign
});
}
});
}
}
æ°æ®åº
DROP TABLE IF EXISTS `yuedu_access_tokens`;
CREATE TABLE `yuedu_access_tokens` (
`token` varchar(30) NOT NULL,
`time` int(11) DEFAULT NULL,
PRIMARY KEY (`token`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
php 端代ç
<?php
//getAccessToken.php
namespace hsC;
class getAccessToken{
public function index(){
$db = \hsTool\db::getInstance('access_tokens');
$token = array(
'token' => uniqid(),
'time' => time()
);
$db->add($token);
exit(jsonCode('ok', $token));
}
}
使ç¨è¯´æ
å¨æ°æ®æ交页é¢æ交ä¹åè¿è¡é¢ç¾åï¼æ交æ°æ®æ¶æºå¸¦æ¤ç¾åï¼
æ´åççç¾åä¿å
å 为大家å端åºç¡ä¸ä¸æ ·ï¼æ¬è¯¾ç¨ä½¿ç¨æ°æ®åºä¿åäºaccessTokenï¼æ´å¥½çæ¹å¼æ¯ redis æ memcacheï¼å¯ä»¥è®¾ç½®åéæææ并è½èªå¨å¤±æï¼
å¨ç»å½ç¯è使ç¨ç¾åéªè¯çç¥
// ç¾åéªè¯
function checkSign(){
if(empty($_POST['sign'])){exit(jsonCode('error', 'sign error'));}
$sign = explode('-', $_POST['sign']);
if(count($sign) != 2){exit(jsonCode('error', 'sign error'));}
$db = \hsTool\db::getInstance('access_tokens');
$token = $db->where('token = ?', array($sign[1]))->fetch();
if(empty($token)){exit(jsonCode('error', 'sign error'));}
$signMd5 = md5($token['token'].$token['time']);
if($signMd5 != $sign[0]){exit(jsonCode('error', 'sign error'));}
// éªè¯æååå é¤
$db->where('token = ?', array($sign[1]))->delete();
}
<template>
<view>
<!-- #ifdef MP-WEIXIN -->
<button type="primary" open-type="getUserInfo" @getuserinfo="getUserInfo">使ç¨å¾®ä¿¡ç»å½</button>
<!-- #endif -->
</view>
</template>
<script>
var _self, pageOptions, session_key, openid;
var sign = require('../../commons/sign.js');
export default {
data() {
return {
};
},
methods:{
// #ifdef MP-WEIXIN
getUserInfo : (info) => {
info = info.mp.detail.userInfo;
//userInfo {"nickName":"深海","gender":1,...avatarUrl":"https://7tdPvkPaJlkaLFFbLAffGVApluZdanLkDVplNlAhq1EJA/132"}
// ä¸æå¡å¨äº¤äºå°æ°æ®æ交å°æå¡ç«¯æ°æ®åº
var sign = uni.getStorageSync('sign');
uni.request({
url: _self.apiServer+'member&m=login',
method: 'POST',
header: {'content-type' : "application/x-www-form-urlencoded"},
data: {
openid : openid,
name : info.nickName,
face : info.avatarUrl,
sign : sign
},
success: res => {
console.log(res);
res = res.data;
// ç»å½æå è®°å½ä¼åä¿¡æ¯å°æ¬å°
if(res.status == 'ok'){
uni.showToast({title:"ç»å½æå"});
uni.setStorageSync('SUID' , res.data.u_id + '');
uni.setStorageSync('SRAND', res.data.u_random + '');
uni.setStorageSync('SNAME', res.data.u_name + '');
uni.setStorageSync('SFACE', res.data.u_face + '');
// 跳转
if(pageOptions.backtype == 1){
uni.redirectTo({url:pageOptions.backpage});
}else{
uni.switchTab({url:pageOptions.backpage});
}
}else{
uni.showToast({title:res.data});
}
},
fail: (e) => {
console.log(JSON.stringify(e));
}
});
},
// #endif
},
onLoad:function(options){
// é¢å
ç¾å
sign.sign(this.apiServer);
_self = this;
pageOptions = options;
// #ifdef MP-WEIXIN
// è°ç¨ 微信 login è·å code
uni.login({
success: (res) => {
uni.request({
url:_self.apiServer+'member&m=codeToSession&code='+res.code,
success: (sessions) => {
// sessions.date æ°æ®æ ¼å¼
// expires_in:7200
// openid:"oS6of0V0rdp9nY_BuvCnQUasOHYc"
// session_key:"87sE2oDD8lc+aDJj0tB6+g=="
// è·å unionId
session_key = sessions.data.session_key;
openid = sessions.data.openid;
},
});
}
});
// #endif
//app 端微信ç»å½
// æåä½ç½® https://uniapp.dcloud.io/api/plugins/login?id=getuserinfo
// #ifdef APP-PLUS
uni.login({
success: (res) => {
// res å¯¹è±¡æ ¼å¼
//{"code":"***",
//"authResult":{
//"openid":"***",
//"scope":"snsapi_userinfo",
//"refresh_token":"**",
//"code":"****",
//"unionid":"***",
//"access_token":"***",
//"expires_in":7200
//},
//"errMsg":"login:ok"}
uni.getUserInfo({
success: (info) => {
// info å¯¹è±¡æ ¼å¼
// {"errMsg":"getUserInfo:ok",
// "rawData":"...
// "userInfo":{
//"openId":"***",
//"nickName":"***",
//"gender":1,
// "city":"Xi'an",
// "province":"Shaanxi",
// "country":"China",
// "avatarUrl":"头å",
// "unionId":"oU5Yyt_agt547zWyA0v0eLfFPqxo"
//},"signature":""}
// ä¸æå¡å¨äº¤äºå°æ°æ®æ交å°æå¡ç«¯æ°æ®åº
var sign = uni.getStorageSync('sign');
uni.request({
url: _self.apiServer+'member&m=login',
method: 'POST',
header: {'content-type' : "application/x-www-form-urlencoded"},
data: {
openid : info.userInfo.openId,
uni.setStorageSync('SRAND', res.data.u_random + '');
uni.setStorageSync('SNAME', res.data.u_name + '');
face : info.userInfo.avatarUrl,
sign : sign
},
success: res => {
console.log(JSON.stringify(res));
res = res.data;
// ç»å½æå è®°å½ä¼åä¿¡æ¯å°æ¬å°
if(res.status == 'ok'){
uni.showToast({title:"ç»å½æå"});
uni.setStorageSync('SUID' , res.data.u_id + '');
uni.setStorageSync('SRAND', res.data.u_name + '');
uni.setStorageSync('SFACE', res.data.u_face + '');
// 跳转
if(options.backtype == 1){
uni.redirectTo({url:options.backpage});
}else{
uni.switchTab({url:options.backpage});
}
}else{
uni.showToast({title:res.data});
}
},
fail: (e) => {
console.log(JSON.stringify(e));
}
});
},
fail: () => {
uni.showToast({title:"微信ç»å½ææ失败"});
}
})
},
fail: () => {
uni.showToast({title:"微信ç»å½ææ失败"});
uni.hideLoading();
}
})
// #endif
}
}
</script>
<style>
</style>