摘要:重新整理做過(guò)的功能,以及過(guò)程遇到問(wèn)題,溫故而知新官方文檔一準(zhǔn)備工作接入配置修改添加業(yè)務(wù)域名網(wǎng)頁(yè)授權(quán)域名授權(quán)回調(diào)域名不加協(xié)議頭綁定時(shí)微信要求將文件上傳根目錄,需要將文件添加到我項(xiàng)目許可中確保文件可被訪問(wèn),否則綁定不通過(guò)公眾平臺(tái)參數(shù)二功能流程結(jié)
重新整理做過(guò)的功能,以及過(guò)程遇到問(wèn)題,溫故而知新一 準(zhǔn)備工作 (a.接入 b.配置)
官方文檔
a) 修改/添加 業(yè)務(wù)域名、網(wǎng)頁(yè)授權(quán)域名; 授權(quán)回調(diào)域名 不加 http:// 協(xié)議頭
綁定時(shí)微信要求將 *.txt文件上傳根目錄,需要將文件 添加到我項(xiàng)目.htaccess許可中 確保文件可被訪問(wèn),否則綁定不通過(guò)
b) 公眾平臺(tái) 參數(shù)
appid
secret
流程
結(jié)合項(xiàng)目實(shí)現(xiàn)以下功能:
a) 首次授權(quán)獲取userData存庫(kù) openid/unionid 關(guān)系對(duì)應(yīng)
b) openid/unionid session緩存
c) session有效期內(nèi) 延時(shí)
d) access_token緩存、刷新;
簡(jiǎn)單畫(huà)一個(gè)流程圖:
access_token 緩存/刷新 感覺(jué)沒(méi)必要;因?yàn)閛penid過(guò)期,也要重新獲取的;
code獲取需要重定向,所以可以寫(xiě)在父類(lèi);
ci框架
class WX_Controller extends CI_Controller { public $wx_code; public $wx_openid; public $wx_unionid; public $access_token; public function __construct() { parent::__construct(); $this->load->library("session"); // 存在session緩存 刷新 緩存時(shí)間 if (isset($_SESSION["openid"])) { $this->session->mark_as_temp("openid", WX_USER_TEMPTIME); $this->session->mark_as_temp("unionid", WX_USER_TEMPTIME); $this->session->mark_as_temp("userData", WX_USER_TEMPTIME); }else { // 1. code $this->get_wx_code(); // 2. token and openid $this->get_wx_acctoken(); // 3. 驗(yàn)證token // 4. 如果首次授權(quán)請(qǐng)求微信,否則查庫(kù)獲取userData $this->load->model("Mwxuser"); $where = array("openid"=>$this->wx_openid); $userData = $this->Mwxuser->wx_user_list(0, 1, $where); if (!$userData) { $userData = $this->get_wx_user_data(); } // 5. 緩存openid unionid userData $sessionData = array("openid"=>$this->wx_openid, "unionid"=>$this->wx_unionid, "userData"=>$userData); $this->session->set_userdata($sessionData); } } }
code
/*----------------------------------------------------------* 微信公眾號(hào)授權(quán)登錄 *----------------------------------------------------------*/ // get wx code 公眾號(hào) scope:snsapi_userinfo同樣靜默 public function get_wx_code() { $code = $this->input->get("code"); if ($code) { $this->wx_code = $code; }else { $wx_get_code = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".WX_APP_ID."&redirect_uri=".urlencode(UNION_INDEX)."&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"; $this->load->helper("url"); redirect($wx_get_code); } }
acc-token
// get wx access token // FIXME.jtwang: 這里緩存token貌似也沒(méi)什么用,如果session-openid過(guò)期,這里緩存token也是沒(méi)用的 public function get_wx_acctoken() { // a. 查詢有效 token // b. token過(guò)期 refresh token 刷新 // c. refresh token 過(guò)期 重新獲取 $this->load->library("mycurl"); $wx_get_token = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".WX_APP_ID."&secret=".WX_SECRET."&code=".$this->wx_code."&grant_type=authorization_code"; $returnContent = $this->mycurl->curl_get($wx_get_token); $returnContent = json_decode($returnContent, true); if (!isset($returnContent["access_token"])) { die("error-page-todo-later-token".$returnContent["errcode"]); } $access_token = $returnContent["access_token"]; $refresh_token = $returnContent["refresh_token"]; $this->wx_openid = $returnContent["openid"]; //openid $this->wx_unionid = $returnContent["unionid"]; //unionid $token_tempdate = time()+7200; $refresh_tempdate = time()+30*24*60*60; $this->access_token = $access_token; }
拉取userData
// 請(qǐng)求微信 拉取用戶信息 返回 userData public function get_wx_user_data() { $wx_get_userinfo = "https://api.weixin.qq.com/sns/userinfo?access_token=".$this->access_token."&openid=".$this->wx_openid."&lang=zh_CN"; $returnContent = $this->mycurl->curl_get($wx_get_userinfo); $returnContent = json_decode($returnContent, true); if (!isset($returnContent["openid"])) { die("error-page-todo-later-userdata".$returnContent["errcode"]); } $userData = array(); $userData["openid"] = $returnContent["openid"]; $userData["unionid"] = $returnContent["unionid"]; $userData["nickname"] = $returnContent["nickname"]; // $userData["sex"] = $returnContent["sex"]; $userData["province"] = $returnContent["province"]; $userData["city"] = $returnContent["city"]; $userData["country"] = $returnContent["country"]; $userData["headimgurl"] = $returnContent["headimgurl"]; // $userData["privilege"] = $returnContent["privilege"]; // 入庫(kù) $this->load->model("Mwxuser"); $res = $this->Mwxuser->wx_user_add($userData); if (!$res) { die("error-page-todo-later add user-data error"); } return $userData; } }
不對(duì)的地方還請(qǐng)指教。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30785.html
摘要:淺析微信支付微信公眾號(hào)網(wǎng)頁(yè)授權(quán)本文是淺析微信支付系列文章的第四篇,主要講解微信支付前如何獲取獲取網(wǎng)頁(yè)授權(quán)及用戶信息獲取。淺析微信支付系列已經(jīng)更新三篇了喲,沒(méi)有看過(guò)的朋友們可以看一下哦。 淺析微信支付:微信公眾號(hào)網(wǎng)頁(yè)授權(quán) 本文是【淺析微信支付】系列文章的第四篇,主要講解微信支付前如何獲取獲取網(wǎng)頁(yè)授權(quán)及用戶信息獲取。 淺析微信支付系列已經(jīng)更新三篇了喲~,沒(méi)有看過(guò)的朋友們可以看一下哦。 淺...
摘要:微信登錄用戶可使用微信帳號(hào)快速登錄你的網(wǎng)站,同一用戶使用微信登錄你的不同應(yīng)用和公眾帳號(hào),會(huì)對(duì)應(yīng)同一個(gè),以便進(jìn)行不同業(yè)務(wù)間的帳號(hào)統(tǒng)一微信授權(quán)登錄可分為掃碼登錄一般用于網(wǎng)頁(yè)微信開(kāi)放平臺(tái)跳轉(zhuǎn)授權(quán)登錄第三方使用微信開(kāi)放平臺(tái)微信內(nèi)置瀏覽器內(nèi)登錄一 微信登錄: 用戶可使用微信帳號(hào)快速登錄你的網(wǎng)站,同一用戶使用微信登錄你的不同應(yīng)用和公眾帳號(hào),會(huì)對(duì)應(yīng)同一個(gè)UnionID,以便進(jìn)行不同業(yè)務(wù)間的帳號(hào)統(tǒng)一 ...
摘要:微信網(wǎng)頁(yè)授權(quán),基于適配方案,開(kāi)發(fā)的微信授權(quán)方案。項(xiàng)目地址又又又一次來(lái)寫(xiě)微信網(wǎng)頁(yè)授權(quán),一年前寫(xiě)過(guò)的微信授權(quán)解決方案。 vue微信網(wǎng)頁(yè)授權(quán),基于vue-cli3.0+webpack 4+vant ui + sass+ rem適配方案+axios,開(kāi)發(fā)的微信授權(quán)方案。項(xiàng)目地址:vue-wechat-auth 又又又一次來(lái)寫(xiě)微信網(wǎng)頁(yè)授權(quán),一年前寫(xiě)過(guò)的 [vue 微信授權(quán)解決方案]。 參考了[v...
摘要:項(xiàng)目背景因?yàn)轫?xiàng)目采用前后端完全分離方案,所以,無(wú)法使用常規(guī)的微信授權(quán)登錄作法,需要采用實(shí)現(xiàn)微信授權(quán)登錄。其實(shí)實(shí)現(xiàn)這個(gè)也麻煩,在實(shí)現(xiàn)之前,我們需要了解一下微信授權(quán)的整個(gè)流程。用戶微信登錄授權(quán)以后回調(diào)過(guò)來(lái)的會(huì)攜帶兩個(gè)參數(shù),第一個(gè)是另一個(gè)就是。 項(xiàng)目背景 因?yàn)轫?xiàng)目采用前后端完全分離方案,所以,無(wú)法使用常規(guī)的微信授權(quán)登錄作法,需要采用 ajax 實(shí)現(xiàn)微信授權(quán)登錄。 需求分析 因?yàn)楸救耸且粋€(gè)ph...
摘要:在實(shí)際開(kāi)發(fā)中,無(wú)論是做端端還是微信公眾號(hào)等類(lèi)型的項(xiàng)目的時(shí)候,或多或少都會(huì)涉及到微信相關(guān)的開(kāi)發(fā),最近公司項(xiàng)目要求實(shí)現(xiàn)微信網(wǎng)頁(yè)授權(quán),并獲取微信用戶基本信息的功能及微信分享的功能,現(xiàn)在總算完成了,但開(kāi)發(fā)過(guò)程中遇到好幾個(gè)坑。 在實(shí)際開(kāi)發(fā)中,無(wú)論是做PC端、WebApp端還是微信公眾號(hào)等類(lèi)型的項(xiàng)目的時(shí)候,或多或少都會(huì)涉及到微信相關(guān)的開(kāi)發(fā),最近公司項(xiàng)目要求實(shí)現(xiàn)微信網(wǎng)頁(yè)授權(quán),并獲取微信用戶基本信息的...
摘要:在實(shí)際開(kāi)發(fā)中,無(wú)論是做端端還是微信公眾號(hào)等類(lèi)型的項(xiàng)目的時(shí)候,或多或少都會(huì)涉及到微信相關(guān)的開(kāi)發(fā),最近公司項(xiàng)目要求實(shí)現(xiàn)微信網(wǎng)頁(yè)授權(quán),并獲取微信用戶基本信息的功能及微信分享的功能,現(xiàn)在總算完成了,但開(kāi)發(fā)過(guò)程中遇到好幾個(gè)坑。 在實(shí)際開(kāi)發(fā)中,無(wú)論是做PC端、WebApp端還是微信公眾號(hào)等類(lèi)型的項(xiàng)目的時(shí)候,或多或少都會(huì)涉及到微信相關(guān)的開(kāi)發(fā),最近公司項(xiàng)目要求實(shí)現(xiàn)微信網(wǎng)頁(yè)授權(quán),并獲取微信用戶基本信息的...
閱讀 2918·2023-04-26 02:14
閱讀 3770·2019-08-30 15:55
閱讀 1851·2019-08-29 16:42
閱讀 2766·2019-08-26 11:55
閱讀 2853·2019-08-23 13:38
閱讀 494·2019-08-23 12:10
閱讀 1319·2019-08-23 11:44
閱讀 2821·2019-08-23 11:43