PHP版微信第三方實(shí)現(xiàn)一鍵登錄及獲取用戶信息的方法
本文實(shí)例講述了PHP版微信第三方實(shí)現(xiàn)一鍵登錄及獲取用戶信息的方法。分享給大家供大家參考,具體如下:
注意,要使用微信在第三方網(wǎng)頁登錄是需要“服務(wù)號(hào)”才可以哦,所以必須到官方申請。
一開始你需要進(jìn)入微信公眾平臺(tái)開啟開發(fā)模式,并且填寫oauth2的回調(diào)地址,地址填寫你項(xiàng)目的域名就可以了.比如:www.baidu.com或zhidao.baidu.com.如果你的項(xiàng)目在二級域名就寫二級域名
前端url授權(quán)地址,在url中填寫appid與你項(xiàng)目中方法中的oauth的地址,具體在下面的代碼中可以看到.
再說后臺(tái)邏輯,首先調(diào)用微信接口的SDK.(后面會(huì)有)
include('./Card/Common/class_weixin_adv.php');
之后填入微信官方給的的appid與secret
$weixin=new class_weixin_adv("appid", "secret");
初始化SDK的類,取到code,利用獲取到的code在獲取出openid 看下面代碼注釋!
$url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=appid&secret=secret&code=".$_GET['code']."&grant_type=authorization_code"; $res = $weixin->https_request($url);//調(diào)用SDK方法獲取到res 從中可以得到openid $res=(json_decode($res, true));//轉(zhuǎn)換成array 方便調(diào)用openid
繼續(xù)調(diào)用SDK方法,獲取到用戶信息.此時(shí)$row已經(jīng)獲得用戶信息了 可以var_dump下看看鍵值方便存入數(shù)據(jù)庫
$row=$weixin->get_user_info($res['openid']);
獲取用戶信息就大功告成了,但這還不夠.我們需要的是無需注冊!所以需要利用openid,openid屬于唯一憑證,每個(gè)用戶對不同的公眾號(hào)都有不同的openid.可以理解成用戶賬號(hào)的感覺.我這里用的是把openid存入cookie的解決方案,類似用戶登陸的感覺,一些關(guān)鍵數(shù)據(jù)驗(yàn)證只需要與數(shù)據(jù)庫中的openid進(jìn)行對比.其他的一些利用方法可以發(fā)揮大家的想象!可以跟我留言交流!
關(guān)于之前的a鏈接的授權(quán),大家也可以判斷cookie是否存在openid,從而讓未授權(quán)用戶直接跳轉(zhuǎn)到該地址,省卻了用戶的一步操作.
下面是完整邏輯代碼,大家可以參考下!
public function oauth2(){
include('./Card/Common/class_weixin_adv.php');
$weixin=new class_weixin_adv("appid", "secret");
if (isset($_GET['code'])){
$url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=appid&secret=secret&code=".$_GET['code']."&grant_type=authorization_code";
$res = $weixin->https_request($url);
$res=(json_decode($res, true));
$row=$weixin->get_user_info($res['openid']);
if ($row['openid']) {
//這里寫上邏輯,存入cookie,數(shù)據(jù)庫等操作
cookie('weixin',$row['openid'],25920);
}else{
$this->error('授權(quán)出錯(cuò),請重新授權(quán)!');
}
}else{
echo "NO CODE";
}
$this->display();
}
SDK代碼:微信官方有手冊,我就不多講了,自己研究,很簡單的!
<?php
/**
* 微信SDK
* pan041ymail@gmail.com
*/
class class_weixin_adv
{
var $appid = "";
var $appsecret = "";
//構(gòu)造函數(shù),獲取Access Token
public function __construct($appid = NULL, $appsecret = NULL)
{
if($appid){
$this->appid = $appid;
}
if($appsecret){
$this->appsecret = $appsecret;
}
$this->lasttime = 1395049256;
$this->access_token = "nRZvVpDU7LxcSi7GnG2LrUcmKbAECzRf0NyDBwKlng4nMPf88d34pkzdNcvhqm4clidLGAS18cN1RTSK60p49zIZY4aO13sF-eqsCs0xjlbad-lKVskk8T7gALQ5dIrgXbQQ_TAesSasjJ210vIqTQ";
if (time() > ($this->lasttime + 7200)){
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->appid."&secret=".$this->appsecret;
$res = $this->https_request($url);
$result = json_decode($res, true);
$this->access_token = $result["access_token"];
$this->lasttime = time();
}
}
//獲取用戶基本信息
public function get_user_info($openid)
{
$url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$this->access_token."&openid=".$openid."&lang=zh_CN";
$res = $this->https_request($url);
return json_decode($res, true);
}
//https請求
public function https_request($url, $data = null)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)){
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
}
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP微信開發(fā)技巧匯總》、《PHP編碼與轉(zhuǎn)碼操作技巧匯總》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《PHP基本語法入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計(jì)有所幫助。
- 微信小程序 PHP生成帶參數(shù)二維碼
- php微信高級接口調(diào)用方法(自定義菜單接口、客服接口、二維碼)
- php微信開發(fā)之批量生成帶參數(shù)的二維碼
- PHP微信PC二維碼登陸的實(shí)現(xiàn)思路
- PHP后臺(tái)實(shí)現(xiàn)微信小程序登錄
- PHP Curl模擬登錄微信公眾平臺(tái)、新浪微博實(shí)例代碼
- php版微信自動(dòng)登錄并獲取昵稱的方法
- php的laravel框架快速集成微信登錄的方法
- PHP實(shí)現(xiàn)微信小程序人臉識(shí)別刷臉登錄功能
- PHP實(shí)現(xiàn)網(wǎng)站應(yīng)用微信登錄功能詳解
- PHP實(shí)現(xiàn)的微信公眾號(hào)掃碼模擬登錄功能示例
相關(guān)文章
php將字符串轉(zhuǎn)化成date存入數(shù)據(jù)庫的兩種方式
這篇文章主要介紹了php將字符串轉(zhuǎn)化成date存入數(shù)據(jù)庫的兩種方式,需要的朋友可以參考下2014-04-04
解析file_get_contents模仿瀏覽器頭(user_agent)獲取數(shù)據(jù)
本篇文章是對file_get_contents模仿瀏覽器頭(user_agent)獲取數(shù)據(jù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
PHPExcel實(shí)現(xiàn)表格導(dǎo)出功能示例【帶有多個(gè)工作sheet】
這篇文章主要介紹了PHPExcel實(shí)現(xiàn)表格導(dǎo)出功能,結(jié)合實(shí)例形式分析了PHPExcel針對帶有多個(gè)工作sheet的表格導(dǎo)出相關(guān)操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-06-06
利用PHP擴(kuò)展Xhprof分析項(xiàng)目性能實(shí)踐教程
XHProf是Facebook開發(fā)的性能調(diào)試工具,能幫助直觀的統(tǒng)計(jì)顯示PHP程序執(zhí)行中各方法函數(shù)調(diào)用次數(shù)和消耗時(shí)間,以方便我們排查性能瓶頸并進(jìn)行調(diào)優(yōu)。下面這篇文章主要給大家介紹了關(guān)于利用PHP擴(kuò)展Xhprof分析項(xiàng)目性能實(shí)踐的相關(guān)資料,需要的朋友可以參考下2018-09-09
PHP實(shí)現(xiàn)的DES加密解密實(shí)例代碼
這篇文章主要介紹了PHP實(shí)現(xiàn)的DES加密解密方法,結(jié)合完整實(shí)例形式分析了PHP實(shí)現(xiàn)DES加密解密的相關(guān)技巧,需要的朋友可以參考下2016-04-04

