摘要:重新整理做過的功能,以及過程遇到問題,溫故而知新官方文檔一準備工作接入配置修改添加業務域名網頁授權域名授權回調域名不加協議頭綁定時微信要求將文件上傳根目錄,需要將文件添加到我項目許可中確保文件可被訪問,否則綁定不通過公眾平臺參數二功能流程結
重新整理做過的功能,以及過程遇到問題,溫故而知新一 準備工作 (a.接入 b.配置)
官方文檔
a) 修改/添加 業務域名、網頁授權域名; 授權回調域名 不加 http:// 協議頭
綁定時微信要求將 *.txt文件上傳根目錄,需要將文件 添加到我項目.htaccess許可中 確保文件可被訪問,否則綁定不通過
b) 公眾平臺 參數
appid
secret
流程
結合項目實現以下功能:
a) 首次授權獲取userData存庫 openid/unionid 關系對應
b) openid/unionid session緩存
c) session有效期內 延時
d) access_token緩存、刷新;
簡單畫一個流程圖:
access_token 緩存/刷新 感覺沒必要;因為openid過期,也要重新獲取的;
code獲取需要重定向,所以可以寫在父類;
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緩存 刷新 緩存時間 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. 驗證token // 4. 如果首次授權請求微信,否則查庫獲取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
/*----------------------------------------------------------* 微信公眾號授權登錄 *----------------------------------------------------------*/ // get wx code 公眾號 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貌似也沒什么用,如果session-openid過期,這里緩存token也是沒用的 public function get_wx_acctoken() { // a. 查詢有效 token // b. token過期 refresh token 刷新 // c. refresh token 過期 重新獲取 $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
// 請求微信 拉取用戶信息 返回 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"]; // 入庫 $this->load->model("Mwxuser"); $res = $this->Mwxuser->wx_user_add($userData); if (!$res) { die("error-page-todo-later add user-data error"); } return $userData; } }
不對的地方還請指教。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30785.html
摘要:淺析微信支付微信公眾號網頁授權本文是淺析微信支付系列文章的第四篇,主要講解微信支付前如何獲取獲取網頁授權及用戶信息獲取。淺析微信支付系列已經更新三篇了喲,沒有看過的朋友們可以看一下哦。 淺析微信支付:微信公眾號網頁授權 本文是【淺析微信支付】系列文章的第四篇,主要講解微信支付前如何獲取獲取網頁授權及用戶信息獲取。 淺析微信支付系列已經更新三篇了喲~,沒有看過的朋友們可以看一下哦。 淺...
摘要:微信登錄用戶可使用微信帳號快速登錄你的網站,同一用戶使用微信登錄你的不同應用和公眾帳號,會對應同一個,以便進行不同業務間的帳號統一微信授權登錄可分為掃碼登錄一般用于網頁微信開放平臺跳轉授權登錄第三方使用微信開放平臺微信內置瀏覽器內登錄一 微信登錄: 用戶可使用微信帳號快速登錄你的網站,同一用戶使用微信登錄你的不同應用和公眾帳號,會對應同一個UnionID,以便進行不同業務間的帳號統一 ...
摘要:微信網頁授權,基于適配方案,開發的微信授權方案。項目地址又又又一次來寫微信網頁授權,一年前寫過的微信授權解決方案。 vue微信網頁授權,基于vue-cli3.0+webpack 4+vant ui + sass+ rem適配方案+axios,開發的微信授權方案。項目地址:vue-wechat-auth 又又又一次來寫微信網頁授權,一年前寫過的 [vue 微信授權解決方案]。 參考了[v...
摘要:項目背景因為項目采用前后端完全分離方案,所以,無法使用常規的微信授權登錄作法,需要采用實現微信授權登錄。其實實現這個也麻煩,在實現之前,我們需要了解一下微信授權的整個流程。用戶微信登錄授權以后回調過來的會攜帶兩個參數,第一個是另一個就是。 項目背景 因為項目采用前后端完全分離方案,所以,無法使用常規的微信授權登錄作法,需要采用 ajax 實現微信授權登錄。 需求分析 因為本人是一個ph...
摘要:在實際開發中,無論是做端端還是微信公眾號等類型的項目的時候,或多或少都會涉及到微信相關的開發,最近公司項目要求實現微信網頁授權,并獲取微信用戶基本信息的功能及微信分享的功能,現在總算完成了,但開發過程中遇到好幾個坑。 在實際開發中,無論是做PC端、WebApp端還是微信公眾號等類型的項目的時候,或多或少都會涉及到微信相關的開發,最近公司項目要求實現微信網頁授權,并獲取微信用戶基本信息的...
摘要:在實際開發中,無論是做端端還是微信公眾號等類型的項目的時候,或多或少都會涉及到微信相關的開發,最近公司項目要求實現微信網頁授權,并獲取微信用戶基本信息的功能及微信分享的功能,現在總算完成了,但開發過程中遇到好幾個坑。 在實際開發中,無論是做PC端、WebApp端還是微信公眾號等類型的項目的時候,或多或少都會涉及到微信相關的開發,最近公司項目要求實現微信網頁授權,并獲取微信用戶基本信息的...
閱讀 2902·2023-04-26 02:14
閱讀 3751·2019-08-30 15:55
閱讀 1843·2019-08-29 16:42
閱讀 2757·2019-08-26 11:55
閱讀 2846·2019-08-23 13:38
閱讀 480·2019-08-23 12:10
閱讀 1308·2019-08-23 11:44
閱讀 2791·2019-08-23 11:43