我曾經在2012年的時候開始研究微信,那時微信的版本仍是處於1.0,當時給朋友幫忙作一個基於微信端的web應用,官方的文檔是至關少的,百度搜索出來的東西基本也沒有多少實用價值,不過是在官網的基礎上做了不多一些改動,就傲驕的發上去說是原創。目前的微信文檔已經完善了不少,不過就我我的而言,仍過於有些寬泛,應該詳細的地方未作補充,甚至是官方的SDK都有問題(其中有一個微信支付模塊下的單詞拼錯了),給開發者帶來很多困擾。php
趁着如今手上的事情很少,我打算作一期微信的開發專欄,把每一個步驟都儘量的記錄下來,固然,有不足的地方請你們糾正。html
開發者首先要在公衆號中配置好受權域名web
點擊接口權限,找到右邊欄裏的 網頁受權獲取用戶基本信息 點擊 修改輸入須要受權的域名信息,域名前綴不須要輸入http或httpsjson
點擊左側的基本配置,找到右邊的APPID項,截圖以下:api
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
連接中的APPID對應公衆號中的APPID,REDIRECT_URL對應受權後回調的域名,這個域名必須和配置的網頁回調域名一致,微信會有強制正則校驗微信
SCOPE有snsapi_base和snsapi_userinfo兩種類型,snsapi_base獲取用戶基本信息app
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
微信受權中有兩個access_token,一個全局token,可用來獲取用戶詳細信息、發送文字、圖片等,這個獲取到的access_token是臨時網頁受權token微信支付
正確返回的JSON格式以下:網站
{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE", "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" }
返回參數的詳細介紹參考官方文檔:url
http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
<?php $act = !empty($_REQUEST['act']) ? $_REQUEST['act'] : 'oauth'; $appid = 'XXX'; $secret = "XXX"; if($act=='oauth'){ $redirect_uri ='http%3a%2f%2fwww.XXX.com%2froute.php%3fact%3dcallback'; if(!empty($_REQUEST['redirect_uri'])) { $redirect_uri.=urlencode('&redirect_uri='.$_REQUEST['redirect_uri']); } $url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appid.'&redirect_uri='.$redirect_uri.'&response_type=code&scope=snsapi_userinfo&state=123&connect_redirect=1#wechat_redirect'; header('location:'.$url); } else{ $code = $_GET["code"]; $redirect_uri = $_GET['redirect_uri']; $get_token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$secret.'&code='.$code.'&grant_type=authorization_code'; $json_obj = json_decode(file_get_contents($get_token_url)); if(isset($json_obj->errcode)) { die('error'); } $openid = $json_obj->openid; if(!empty($redirect_uri)) { $symbol =preg_match('/.*((\.php)|\/)$/',$redirect_uri) ? '?' : '&'; $url =$redirect_uri.$symbol.'openid='.$openid; header('location:'.$url); die(); } header('location:https://www.XXX.com/mobile/index.php?source=weixin&openid='.$openid); }