現(xiàn)在我們正式的進(jìn)行微信端開發(fā),我們微信公共號(hào)測(cè)試號(hào)都有了豆巨,但是我們要再手機(jī)上打開剩辟,或者在微信開發(fā)者工具上打開,所有我們要把代碼放在線上才能使用
-
首先我們要有一個(gè)服務(wù)器往扔,我用的是新浪云服務(wù)器贩猎,下面簡(jiǎn)單的介紹一下使用方法與步驟
3吭服、創(chuàng)建新應(yīng)用
1、注冊(cè)登陸新浪云
2萍膛、在用戶中心找到控制臺(tái)中的云應(yīng)用SAE點(diǎn)擊進(jìn)去
4、點(diǎn)擊域名進(jìn)去找到應(yīng)用中的代碼管理 蝗罗,編輯代碼
5艇棕、現(xiàn)在就可以編輯代碼了
前面的基礎(chǔ)步驟已完成,現(xiàn)在我們要做的就是重中之重了代碼的編輯 -
微信網(wǎng)頁授權(quán)
1串塑、第一步:用戶同意授權(quán)沼琉,獲取code
2、第二步:通過code換取網(wǎng)頁授權(quán)access_token
3桩匪、第三步:刷新access_token(如果需要)
在確保微信公眾賬號(hào)擁有授權(quán)作用域(scope參數(shù))的權(quán)限的前提下(服務(wù)號(hào)獲得高級(jí)接口后打瘪,默認(rèn)擁有scope參數(shù)中的snsapi_base和snsapi_userinfo),尤其注意:由于授權(quán)操作安全等級(jí)較高,所以在發(fā)起授權(quán)請(qǐng)求時(shí)傻昙,微信會(huì)對(duì)授權(quán)鏈接做正則強(qiáng)匹配校驗(yàn)闺骚,如果鏈接的參數(shù)順序不對(duì),授權(quán)頁面將無法正常訪問
首先我們需要一個(gè)公共的PHP來進(jìn)行函數(shù)處理<?php //連接數(shù)據(jù)的函數(shù)妆档; function connect($arr){ $link = mysqli_connect($arr['DB_HOST'], $arr['DB_USER'], $arr['DB_PWD'], $arr['DB_NAME'],$arr['DB_PORT']); if(mysqli_errno($link)){ //echo mysqli_error($link); }else{ return $link; } } //操作數(shù)據(jù)庫的添加函數(shù)僻爽; function add($arr,$link=null,$table=null){ $keys = ""; $value = ""; foreach($arr as $k=>$v){ $keys.=$k.","; if(is_string($v)){ $v = "'".$v."'"; } $value.=$v.","; } $keys = substr($keys, 0,strlen($keys)-1); $value = substr($value, 0,strlen($value)-1); // echo $keys."<hr>".$value; $sql = "INSERT INTO {$table} ({$keys}) VALUES ({$value})"; //echo $sql;die; //設(shè)置編碼格式 mysqli_query($link, "set names utf8"); $res = mysqli_query($link, $sql); //添加數(shù)據(jù)的id值 ; $num = mysqli_insert_id($link); if($res && mysqli_affected_rows($link)){ return $num; }else{ return false; } } //操作數(shù)據(jù)庫的更新操作贾惦; function update($arr,$link=null,$table=null,$where=NULL){ $where = $where==NULL?"":" WHERE ".$where; $str = ""; foreach($arr as $k=>$v){ if(is_string($v)){ $v = "'".$v."'"; } $str .= $k."=".$v.","; } $str = substr($str, 0,strlen($str)-1); $sql = "UPDATE {$table} SET {$str}".$where; mysqli_query($link, "set names utf8"); $res = mysqli_query($link, $sql); if($res && mysqli_affected_rows($link)){ return true; }else{ return false; } } //刪除數(shù)據(jù)胸梆; function delete($table,$link=null,$where=null){ $where = $where==null?"":" WHERE ".$where; $sql = "DELETE FROM {$table}".$where; $res = mysqli_query($link, $sql); if($res && mysqli_affected_rows($link)){ return true; }else{ return false; } } //獲取多條數(shù)據(jù) function getlist($table,$link=null,$where=null){ $where = $where==null?"":" WHERE ".$where; $sql = "SELECT * FROM {$table}".$where; //設(shè)置編碼格式 mysqli_query($link, "set names utf8"); $res = mysqli_query($link, $sql); while($data = mysqli_fetch_assoc($res)){ $arr[] = $data; } if($res && mysqli_num_rows($res)){ return $arr; }else{ return false; } } //獲取一條數(shù)據(jù)敦捧; function getone($table,$link=null,$where=null){ //var_dump($link); $where = $where==null?"":" WHERE ".$where; $sql = "SELECT * FROM {$table}".$where; //設(shè)置編碼格式 mysqli_query($link, "set names utf8"); $res = mysqli_query($link, $sql); if($res && mysqli_num_rows($res)){ $data = mysqli_fetch_assoc($res); return $data; }else{ return false; } } //get請(qǐng)求方式 //1.初始化curl //2.設(shè)置curl //3.執(zhí)行curl //4.關(guān)閉curl function httpGet($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_TIMEOUT, 500); // 為保證第三方服務(wù)器與微信服務(wù)器之間數(shù)據(jù)傳輸?shù)陌踩裕形⑿沤涌诓捎胔ttps方式調(diào)用乳绕,必須使用下面2行代碼打開ssl安全校驗(yàn)绞惦。 // 如果在部署過程中代碼在此處驗(yàn)證失敗,請(qǐng)到 http://curl.haxx.se/ca/cacert.pem 下載新的證書判別文件洋措。 // curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); // curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true); curl_setopt($curl, CURLOPT_URL, $url); $res = curl_exec($curl); curl_close($curl); return $res; } //php里面請(qǐng)求post接口的函數(shù) function httpPost($data,$url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_AUTOREFERER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $tmpInfo = curl_exec($ch); if (curl_errno($ch)) { return curl_error($ch); } curl_close($ch); return $tmpInfo; } ?>
上面是封裝的系統(tǒng)济蝉,現(xiàn)在對(duì)數(shù)據(jù)進(jìn)行操作
include "common.php";
//用戶獲取code
$code = $_GET['code'];
//通過code獲取access_token;
$url = "https://api.weixin.qq.com/sns/oauth2 /access_token?appid=wxdb15cc03e3b842f0& secret=d2e266f71b96ee4bc92e0ed65bb8655e&code=$code& grant_type=authorization_code";
$res = httpGet($url);
$data = json_decode($res, true);
$token = $data['access_token'];
$openid = $data['openid'];
下圖為scope等于snsapi_userinfo時(shí)的授權(quán)頁面:
4、第四步:拉取用戶信息(需scope為 snsapi_userinfo)
如果網(wǎng)頁授權(quán)作用域?yàn)閟nsapi_userinfo菠发,則此時(shí)開發(fā)者可以通過access_token和openid拉取用戶信息了王滤。
http:GET(請(qǐng)使用https協(xié)議) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
access_token 網(wǎng)頁授權(quán)接口調(diào)用憑證,注意:此access_token與基礎(chǔ)支持的access_token不同
openid 用戶的唯一標(biāo)識(shí)
lang 返回國家地區(qū)語言版本,zh_CN 簡(jiǎn)體滓鸠,zh_TW 繁體雁乡,en 英語
下面是通過代碼執(zhí)行可以得到以上參數(shù)
$url2 = "https://api.weixin.qq.com/sns/userinfo?access_token=$token&openid=$openid&lang=zh_CN";
$res2 = httpGet($url2);
$userinfo = json_decode($res2, true);
$nickname = $userinfo['nickname'];
$headurl = $userinfo['headimgurl'];
$openid = $userinfo['openid'];
//隨機(jī)數(shù)
$score = mt_rand(1, 100);
下面進(jìn)行對(duì)數(shù)據(jù)庫進(jìn)行設(shè)置
首先找到數(shù)據(jù)與緩存服務(wù),如果不想花太多錢的話就選擇共享型MySQL進(jìn)行數(shù)據(jù)庫操作
//連接數(shù)據(jù)庫
//用戶名 : SAE_MYSQL_USER
//密 碼 : SAE_MYSQL_PASS
//主庫域名 : SAE_MYSQL_HOST_M
//從庫域名 : SAE_MYSQL_HOST_S
//端 口 : SAE_MYSQL_PORT
//數(shù)據(jù)庫名 : SAE_MYSQL_DB
$arr['DB_HOST'] = SAE_MYSQL_HOST_M;
$arr['DB_USER'] = SAE_MYSQL_USER;
$arr['DB_PWD'] = SAE_MYSQL_PASS;
$arr['DB_NAME'] = SAE_MYSQL_DB;
$arr['DB_PORT'] = SAE_MYSQL_PORT;
$link = connect($arr);
//var_dump($link);
$addArr['nickname'] = $nickname;
$addArr['headurl'] = $headurl;
$addArr['openid'] = $openid;
$addArr['score'] = $score;
//判斷數(shù)據(jù)庫里面有沒有相關(guān)數(shù)據(jù)
$result = getone("users", $link, "openid='{$openid}'");
if ($result) {
//已經(jīng)存了 更新分?jǐn)?shù)
$uparr["score"] = $score;
$re = update($uparr, $link, "users", "openid='{$openid}'");
if ($re) {
echo "更新成功";
} else {
echo "更新失敗";
}
} else {
//沒有存
$res = add($addArr, $link, "users");
if ($res) {
echo "添加成功";
} else {
echo "添加失敗";
}
}
運(yùn)行結(jié)果如下
數(shù)據(jù)庫資源如下
現(xiàn)在把數(shù)據(jù)展現(xiàn)在頁面上
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<table border="" >
<tr>
<th>昵稱</th>
<th>頭像</th>
<th>分?jǐn)?shù)</th>
</tr>
<?php foreach($list as $key =>$val){?>
<tr>
<td><?php echo $val['nickname'] ?></td>
<td><img src="<?php echo $val['headurl'] ?>"/></td>
<td><?php echo $val['score'] ?></td>
</tr>
<?php } ?>
</table>
</body>
</html>
運(yùn)行結(jié)果如下
以上只是簡(jiǎn)單地操作糜俗,后面要繼續(xù)進(jìn)行深究