標簽:
應用場景
(1)點擊菜單直接鏈接跳轉,這樣直接跳是獲取不到用戶的openid的,需要用到這個
(2)獲取用戶的一些基本信息,頭像,呢稱,需要用到這個
准備
需要在公衆號裏面配置一個應用域名,不配置這個的話,跳轉後就是空白頁面
步驟
(一)
//$callback="一個回調的網址比如http://www.baidu.com/auth.php"; $param [‘redirect_uri‘] = $callback . ‘&getOpenId=1‘;
//&getOpenId=1 这个参数是自己加着用的,跟微信无关 $param [‘response_type‘] = ‘code‘; $param [‘scope‘] = ‘snsapi_userinfo‘; $param [‘state‘] = 123; $param [‘appid‘] = $info [‘appid‘]; //拼凑出一个url 请求此url $url = ‘https://open.weixin.qq.com/connect/oauth2/authorize?‘ . http_build_query ( $param ) . ‘#wechat_redirect‘; /*url大致的样子如下 https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxxxxxxx8xx9b9&redirect_uri=http%3A%2F%2Fxxxn.xingames.com%2Fweiphp%2Fixxxex.php%3Fs%3D%2Faddon%2FMxxber%2FMexxxber%2Findex%26getOpenId%3D1&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect */ redirect ( $url );
***$param [‘scope‘] = ‘snsapi_userinfo‘諸如這樣的參數什麽意思,可以查詢微信的手冊
地址:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
(二) 跳转到上面的url后,微信会返回给你这个url 大致如下
http://weixin.xxxxs.com/weiphp/index.php?s=/addon/Memxxx/Mxxxber/ixxdex&getOpenId=1&code=021f5ed2e0e52421c27450565a5176aS&state=123
因为 这里可以通过 $_GET 获取一个叫code的东西 $code=$_GET[‘code‘];
(三)根据这个code 获取openid
$param [‘secret‘] = $info [‘secret‘]; $param [‘code‘] = I ( ‘code‘ ); $param [‘grant_type‘] = ‘authorization_code‘; $url = ‘https://api.weixin.qq.com/sns/oauth2/access_token?‘ . http_build_query ( $param ); $content = file_get_contents ( $url ); $content = json_decode ( $content, true );
/***这个$content 大概内容下
{
"access_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5AI1bw2uqN--2jXoBLIM5d6L9RImvm8Vg8cBAiLpWA8Vw",
"expires_in": 7200,
"refresh_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5CZPAwZksiuz_6x_TfkLoXLU7kdKM2232WDXB3Msuzq1A",
"openid": "oLVPpjqs9BhvzwPj5A-vTYAX3GLc",
"scope": "snsapi_userinfo,"
}
**********/
redirect ( $callback . ‘&openid=‘ . $content [‘openid‘] );
/**
最後跳轉的url大概如下
http://weixin.xixxxxxxs.com/weiphp/index.php?s=/addon/Mexx/Mexxr/indxex&getOpenId=1&code=021f5edxxxxxxx0565a5176aS&state=123 &openid=oV6rHt3zxxxxhIi24
這樣openid就能獲取到了
还有个access_token 是获取用户信息要用到的,
*/
(四)能得到openid,基本就能標示用戶的身份了,這樣很多功能就ok了
這裏就獲取到openid了,
然後這裏有個access_token稱呼爲授權token
还有一个access_token称呼为全局token =》是使用AppID和AppSecret获取
這倆都能獲取到一些用戶信息
區別就是授權的那個,如果是認證服務號使用的話,就不需要彈出微信的授權登陸確認,給用戶的體驗更好一些
=====》
先看授權token,這個能接上面第三步
第三步獲取到授權的access_token和openid後
繼續請求這個地址
$param2 [‘access_token‘] = $access_token; $param2 [‘openid‘] = $openid; $param2 [‘lang‘] = ‘zh_CN‘; $url = ‘https://api.weixin.qq.com/sns/userinfo?‘ . http_build_query ( $param2 ); /**url大体这个样子 https://api.weixin.qq.com/sns/userinfo?access_token=OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5AI1bw2uqN--2jXoBLIM5d6L9RImvm8Vg8cBAiLpWA8Vw&openid=oLVPpjqs9BhvzwPj5A-vTYAX3GLc */ $content = file_get_contents ( $url ); $content = json_decode ( $content, true ); /** content大体这个样子 { "openid": "oLVPpjqs9BhvzwPj5A-vTYAX3GLc", "nickname": "sb", "sex": 1, "language": "zh_CN", "city": "深圳", "province": "广东", "country": "中国", "headimgurl": "http://wx.qlogo.cn/mmopen/utpKYf69VAbCRDRlbUsPsdQN38DoibCkrU6SAMCSNx558eTaLVM8PyM6jlEGzOrH67hyZibIZPXu4BK1XNWzSXB3Cs4qpBBg18/0", "privilege": [] } */ return $content;
這樣就獲取到了
這裏基本就完了
=====》使用全局access_token獲取用戶信息
(一)獲取access_token
直接上一个函数 weiphp的函数
// 獲取access_token,自動帶緩存功能 function get_access_token($token = ‘‘) { empty ( $token ) && $token = get_token (); $key = ‘access_token_‘ . $token; $res = S ( $key ); if ($res !== false) return $res; $info = get_token_appinfo ( $token ); if (empty ( $info [‘appid‘] ) || empty ( $info [‘secret‘] )) { S ( $key, 0, 7200 ); return 0; } $url = ‘https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=‘ . $info [‘appid‘] . ‘&secret=‘ . $info [‘secret‘]; $tempArr = json_decode ( file_get_contents ( $url ), true ); if (@array_key_exists ( ‘access_token‘, $tempArr )) { S ( $key, $tempArr [‘access_token‘], 7200 ); //S是thinkphp的緩存函數,這個要緩存,有請求次數限制 return $tempArr [‘access_token‘]; } else { return 0; } }
简单来说 就是使用appid和appsecret请求下面这个地址
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
(二)結合access_token和openid來獲取用戶信息
這裏比較郁悶的就是需要openid,如果是推送消息方式,比如用戶發送抽獎,微信推送一個抽獎頁面過去的方式,這種在用戶發送消息的xml內容中就包含openid了,好說
如果是直接點擊鏈接菜單跳轉,那麽還是需要先走最上面的方法,來獲取openid
$param [‘scope‘] = ‘snsapi_userinfo‘这个改为snsapi_base 就能获取openid,是未认证的公众号也能使用的
有了openid之後
再來一個函數
function getWeixinUserInfo($openid, $token) { $access_token = get_access_token ( $token ); if (empty ( $access_token )) { return false; } $param2 [‘access_token‘] = $access_token; $param2 [‘openid‘] = $openid; $param2 [‘lang‘] = ‘zh_CN‘; $url = ‘https://api.weixin.qq.com/cgi-bin/user/info?‘ . http_build_query ( $param2 ); $content = file_get_contents ( $url ); $content = json_decode ( $content, true ); return $content; }
也就是用access_token和openid來請求
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID
最後也能獲取到用戶的信息
標簽:
原文地址:http://www.cnblogs.com/dk1988/p/4604113.html