国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

(二)網(wǎng)頁授權(quán)獲取用戶基本信息,獲取基本信息_PHP教程

php中文網(wǎng)
發(fā)布: 2016-07-12 09:01:31
原創(chuàng)
1485人瀏覽過

(二)網(wǎng)頁授權(quán)獲取用戶基本信息,獲取基本信息

在公眾號的配置過程中,許多開發(fā)者會在菜單中加入html5頁面,有時在頁面內(nèi)需要訪問頁面的用戶信息,此時就需要網(wǎng)頁授權(quán)獲取用戶基本信息

PS:本博文所闡述的微信開發(fā)基于Yii2.0框架

?

1、設置授權(quán)回調(diào)域名:開發(fā) ---> 接口權(quán)限

  找到“網(wǎng)頁授權(quán)獲取用戶基本信息”,點擊后面對應的“修改”,在彈框響應位置填寫授權(quán)回調(diào)域名即可,此處的域名不需要加http:// ?(關于網(wǎng)頁授權(quán)回調(diào)域名的說明詳情可參考公眾平臺開發(fā)者文檔)

立即學習PHP免費學習筆記(深入)”;

?

?

2、獲取授權(quán)

  關于OAuth2.0博主參考的是方倍工作室的博文http://www.cnblogs.com/txw1958/p/weixin71-oauth20.html(PS:方倍是一個微信開發(fā)大神,其中的微信開發(fā)內(nèi)容還是比較詳細的,推薦參考),其中詳細剖析了微信官方文檔的相關內(nèi)容,也提供了獲取授權(quán)的更詳細思路和方案。

  實際上,獲取用戶信息的關鍵在于獲取用戶的openid。博主想要實現(xiàn)用戶點擊公眾號菜單打開頁面即可自動授權(quán),從而針對該用戶進行數(shù)據(jù)庫操作,于是有下面兩種方式: 

  (1)利用自定義菜單請求授權(quán)頁面

    自定義菜單后面會單獨寫一篇博文,在這里先簡述一下通過自定義菜單進行授權(quán),該方法需要高級接口權(quán)限,且局限于關注公眾號的用戶直接從菜單進入頁面。

<span> 1</span> <span>$menu</span> = '<span>{
</span><span> 2</span> <span>  "button":[
</span><span> 3</span> <span>    {
</span><span> 4</span> <span>      "type": "view",
</span><span> 5</span> <span>      "name": "商城",
</span><span> 6</span> <span>      "url": "https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxx&redirect_uri=http://tx.heivr.com/index.php&response_type=code&scope=snsapi_base&state=1#wechat_redirect"
</span><span> 7</span> <span>    },
</span><span> 8</span> 
<span> 9</span> <span>    {
</span><span>10</span> <span>      "name":"快遞服務",
</span><span>11</span> <span>      "sub_button":[
</span><span>12</span> <span>        {
</span><span>13</span> <span>           "type":"click",
</span><span>14</span> <span>           "name":"發(fā)快遞",
</span><span>15</span> <span>           "key":"express"
</span><span>16</span> <span>        },
</span><span>17</span> <span>        {
</span><span>18</span> <span>           "type":"click",
</span><span>19</span> <span>           "name":"快遞查詢",
</span><span>20</span> <span>           "key":"ww"
</span><span>21</span> <span>        }
</span><span>22</span> <span>      ]
</span><span>23</span> <span>    },
</span><span>24</span> <span>  ]
</span><span>25</span> }';
登錄后復制

  需要授權(quán)的view直接在url處填寫微信提供的授權(quán)請求地址,其中:

  • appid:填寫微信公眾平臺基本配置中的AppID;
  • redirect_uri:填寫授權(quán)完成后跳轉(zhuǎn)的頁面地址,即自己的html5頁面;
  • state:跳轉(zhuǎn)至回調(diào)頁面所帶參數(shù);
  • response_type:網(wǎng)頁授權(quán)的兩種scope,微信官方文檔中說明如下:
    1<span>、以snsapi_base為scope發(fā)起的網(wǎng)頁授權(quán),是用來獲取進入頁面的用戶的openid的,并且是靜默授權(quán)并自動跳轉(zhuǎn)到回調(diào)頁的。用戶感知的就是直接進入了回調(diào)頁(往往是業(yè)務頁面)
    </span>2、以snsapi_userinfo為scope發(fā)起的網(wǎng)頁授權(quán),是用來獲取用戶的基本信息的。但這種授權(quán)需要用戶手動同意,并且由于用戶同意過,所以無須關注,就可在授權(quán)后獲取該用戶的基本信息。
    登錄后復制

    按照此方法點擊“商城”即可接收到返回的openid,繼而進行下一步用戶信息的獲取。 

?

  (2)利用JS自動請求授權(quán)頁面

    這個方法相對而言比較笨拙,步驟略復雜,但目前能解決需求還沒有研究簡化方法,且由于頁面的跳轉(zhuǎn)多數(shù)情況下訪問頁面的時間會增加,但相比于前一個方法,該方法可以獲取到非關注用戶的基本信息。有些程序可能涉及到頁面分享,程序沒有強制關注但其他用戶通過分享直接進入頁面也需要記錄用戶信息,此時可以考慮該方法。(微信開發(fā)相關的代碼博主封裝成工具類調(diào)用,這里先貼用到的部分,以后整理完成會全部貼出來并附下載鏈接)

    該方法的思路為:js請求鏈接獲取code ---> 利用code換取openid ---> 得到用戶基本信息

? ? ? ? a. 編輯配置

? ? ? ? 為了方便把用到的一些微信參數(shù)單獨寫入一個類,方便修改添加及調(diào)用

<span> 1</span> <?<span>php
</span><span> 2</span> <span>namespace common\tools\wechat;
</span><span> 3</span> 
<span> 4</span> <span>/*</span><span>*
</span><span> 5</span> <span> * 微信請求相關配置類庫
</span><span> 6</span>  <span>*/</span>
<span> 7</span> <span>class</span><span> ConfigTool {
</span><span> 8</span> 
<span> 9</span>     <span>/*</span><span>*
</span><span>10</span> <span>     * 微信配置參數(shù)
</span><span>11</span> <span>     * @return array 配置參數(shù)
</span><span>12</span>      <span>*/</span>
<span>13</span>     <span>public</span> <span>function</span><span> setConfig() {
</span><span>14</span> 
<span>15</span>         <span>//</span><span> 用于驗證微信接口配置信息的Token,可以任意填寫</span>
<span>16</span>         <span>$config</span>['token'] = '自己的token'<span>;
</span><span>17</span>          
<span>18</span>         <span>//</span><span> appID</span>
<span>19</span>         <span>$config</span>['appid'] = '自己的appid'<span>;
</span><span>20</span>          
<span>21</span>         <span>//</span><span> appSecret</span>
<span>22</span>         <span>$config</span>['secret'] = '自己的secret'<span>;
</span><span>23</span>          
<span>24</span>         <span>//</span><span> 回調(diào)鏈接地址</span>
<span>25</span>         <span>$config</span>['redirect_uri'] = 'http://tx.heivr.com/index.php?'<span>;
</span><span>26</span>          
<span>27</span>         <span>//</span><span> 是否以 HTTPS 安全協(xié)議訪問接口</span>
<span>28</span>         <span>$config</span>['https_request'] = <span>false</span><span>;
</span><span>29</span>          
<span>30</span>         <span>//</span><span> 授權(quán)作用域,snsapi_base (不彈出授權(quán)頁面,直接跳轉(zhuǎn),只能獲取用戶openid),
</span><span>31</span> <span>        // snsapi_userinfo (彈出授權(quán)頁面,可通過openid拿到昵稱、性別、所在地。并且,
</span><span>32</span> <span>        // 即使在未關注的情況下,只要用戶授權(quán),也能獲取其信息)</span>
<span>33</span>         <span>$config</span>['scope'] = 'snsapi_userinfo'<span>;
</span><span>34</span>          
<span>35</span>         <span>//</span><span> 語言</span>
<span>36</span>         <span>$config</span>['lang'] = 'zh_CN'; <span>//</span><span> zh_CN 簡體,zh_TW 繁體,en 英語
</span><span>37</span>          
<span>38</span> <span>        // 微信公眾賬戶授權(quán)地址</span>
<span>39</span>         <span>$config</span>['mp_authorize_url'] = 'https://api.weixin.qq.com/cgi-bin/token'<span>;
</span><span>40</span>         <span>//</span><span> 微信公眾賬戶js臨時票據(jù)地址</span>
<span>41</span>         <span>$config</span>['jsapi_ticket_url'] = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket'<span>;
</span><span>42</span>         <span>//</span><span> 授權(quán)地址</span>
<span>43</span>         <span>$config</span>['authorize_url'] = 'https://open.weixin.qq.com/connect/oauth2/authorize'<span>;
</span><span>44</span>         <span>//</span><span> 獲取access token 的地址</span>
<span>45</span>         <span>$config</span>['access_token_url'] = 'https://api.weixin.qq.com/sns/oauth2/access_token'<span>;
</span><span>46</span>         <span>//</span><span> 刷新 token 的地址</span>
<span>47</span>         <span>$config</span>['refresh_token_url'] = 'https://api.weixin.qq.com/sns/oauth2/refresh_token'<span>;
</span><span>48</span>         <span>//</span><span> 獲取用戶信息地址</span>
<span>49</span>         <span>$config</span>['userinfo_url'] = 'https://api.weixin.qq.com/sns/userinfo'<span>;
</span><span>50</span>         <span>//</span><span> 驗證access token</span>
<span>51</span>         <span>$config</span>['valid_token_url'] = 'https://api.weixin.qq.com/sns/auth'<span>;
</span><span>52</span>         <span>//</span><span> 上傳臨時素材地址</span>
<span>53</span>         <span>$config</span>['media_temp_upload_url'] = 'https://api.weixin.qq.com/cgi-bin/media/upload?'<span>;
</span><span>54</span>         <span>//</span><span> 上傳永久素材地址</span>
<span>55</span>         <span>$config</span>['media_forever_upload_url'] = 'https://api.weixin.qq.com/cgi-bin/material/add_material?'<span>;
</span><span>56</span> 
<span>57</span>         <span>return</span> <span>$config</span><span>;
</span><span>58</span>         
<span>59</span> <span>    }
</span><span>60</span> }
登錄后復制

?

? ? ? ? ? ? b. https請求工具

<span> 1</span> <?<span>php
</span><span> 2</span> <span>namespace common\tools;
</span><span> 3</span> 
<span> 4</span> <span>/*</span><span>*
</span><span> 5</span> <span> * https請求相關類庫
</span><span> 6</span>  <span>*/</span>
<span> 7</span> <span>class</span><span> HttpsTool {
</span><span> 8</span> 
<span> 9</span>     <span>const</span> TIMEOUT = 5;                        <span>//</span><span> 設置超時時間</span>
<span>10</span> 
<span>11</span>     <span>private</span> <span>$ch</span>;                                <span>//</span><span> curl對象</span>
<span>12</span> 
<span>13</span>     <span>/*</span><span>*
</span><span>14</span> <span>     * 發(fā)送curl請求,并獲取請求結(jié)果
</span><span>15</span> <span>     * @param string 請求地址
</span><span>16</span> <span>     * @param array 如果是post請求則需要傳入請求參數(shù)
</span><span>17</span> <span>     * @param string 請求方法,get 或者 post, 默認為get
</span><span>18</span> <span>     * @param bool 是否以https協(xié)議請求
</span><span>19</span>      <span>*/</span>
<span>20</span>     <span>public</span> <span>function</span> send_request(<span>$requests</span>, <span>$params</span> = <span>null</span>, <span>$method</span> = 'get', <span>$https</span> = <span>true</span><span>) {
</span><span>21</span>         <span>//</span><span> 以get方式提交</span>
<span>22</span>         <span>if</span> (<span>$method</span> == 'get'<span>) {
</span><span>23</span>             <span>if</span>(<span>$params</span><span>){
</span><span>24</span>                 <span>$request</span> = <span>$requests</span> . <span>$this</span>->create_url(<span>$params</span><span>);
</span><span>25</span>             }<span>else</span><span>{
</span><span>26</span>                 <span>$request</span> = <span>$requests</span><span>;
</span><span>27</span> <span>            }
</span><span>28</span>         }<span>else</span><span>{
</span><span>29</span>             <span>$request</span> = <span>$requests</span><span>;
</span><span>30</span> <span>        }
</span><span>31</span> 
<span>32</span>         <span>$this</span>->ch = curl_init(<span>$request</span><span>);
</span><span>33</span>         curl_setopt(<span>$this</span>->ch, CURLOPT_RETURNTRANSFER, 1);<span>//</span><span> 設置不顯示結(jié)果,儲存入變量</span>
<span>34</span>         curl_setopt(<span>$this</span>->ch, CURLOPT_TIMEOUT, self::TIMEOUT); <span>//</span><span> 設置超時限制防止死循環(huán)
</span><span>35</span> 
<span>36</span> <span>        // 判斷是否以https方式訪問</span>
<span>37</span>         <span>if</span> (<span>$https</span><span>) {
</span><span>38</span>             curl_setopt(<span>$this</span>->ch, CURLOPT_SSL_VERIFYPEER, 0); <span>//</span><span> 對認證證書來源的檢查</span>
<span>39</span>             curl_setopt(<span>$this</span>->ch, CURLOPT_SSL_VERIFYHOST, 0); <span>//</span><span> 從證書中檢查SSL加密算法是否存在</span>
<span>40</span> <span>        }
</span><span>41</span> 
<span>42</span>         <span>if</span> (<span>$method</span> == 'post') {        <span>//</span><span> 以post方式提交
</span><span>43</span> <span>            //curl_setopt($this->ch, CURLOPT_SAFE_UPLOAD, false);     //php 5.6文件上傳必加內(nèi)容,5.4不需要</span>
<span>44</span>             curl_setopt(<span>$this</span>->ch, CURLOPT_POST, 1); <span>//</span><span> 發(fā)送一個常規(guī)的Post請求</span>
<span>45</span>             curl_setopt(<span>$this</span>->ch, CURLOPT_POSTFIELDS, <span>$params</span>); <span>//</span><span> Post提交的數(shù)據(jù)包</span>
<span>46</span>             curl_setopt(<span>$this</span>->ch, CURLOPT_RETURNTRANSFER, 1<span>);
</span><span>47</span> <span>        }
</span><span>48</span>         
<span>49</span>         <span>$tmpInfo</span> = curl_exec(<span>$this</span>->ch); <span>//</span><span> 執(zhí)行操作</span>
<span>50</span>         <span>if</span> (curl_errno(<span>$this</span>-><span>ch)) {
</span><span>51</span>             <span>echo</span> 'Errno:'.curl_error(<span>$this</span>->ch);<span>//</span><span>捕抓異常</span>
<span>52</span> <span>        }
</span><span>53</span>         curl_close(<span>$this</span>->ch); <span>//</span><span> 關閉CURL會話
</span><span>54</span> <span>        //var_dump($tmpInfo);exit;</span>
<span>55</span>         <span>return</span> <span>$tmpInfo</span>; <span>//</span><span> 返回數(shù)據(jù)</span>
<span>56</span> <span>    }
</span><span>57</span> 
<span>58</span>     <span>/*</span><span>*
</span><span>59</span> <span>     * 生成url
</span><span>60</span>      <span>*/</span>
<span>61</span>     <span>public</span> <span>function</span> create_url(<span>$data</span><span>) {
</span><span>62</span>         <span>$temp</span> = '?'<span>;
</span><span>63</span>         <span>foreach</span> (<span>$data</span> <span>as</span> <span>$key</span> => <span>$item</span><span>) {
</span><span>64</span>             <span>$temp</span> = <span>$temp</span> . <span>$key</span> . '=' . <span>$item</span> . '&'<span>;
</span><span>65</span> <span>        }
</span><span>66</span>         <span>return</span> <span>substr</span>(<span>$temp</span>, 0, -1<span>);
</span><span>67</span> <span>    }
</span><span>68</span> }
登錄后復制
<span>關于curl_setopt($this->ch, CURLOPT_SAFE_UPLOAD, false)會在微信圖片資源上傳博文中詳細講述它出現(xiàn)的心酸史,這里暫時用不到,不做解釋</span>
登錄后復制

?

?? ? ? ? ? ? c. 授權(quán)基類

<span> 1</span> <?<span>php  
</span><span> 2</span> <span>namespace common\tools\wechat;
</span><span> 3</span> 
<span> 4</span> <span>use</span><span> common\tools\wechat\ConfigTool;
</span><span> 5</span> <span>use</span><span> common\tools\HttpsTool;
</span><span> 6</span> <span>/*</span><span>*
</span><span> 7</span> <span>* Weixin_oauth 類庫
</span><span> 8</span> <span>*/</span>
<span> 9</span> <span>class</span><span> OauthTool {
</span><span>10</span> 
<span>11</span>     <span>public</span> <span>$conf</span><span>;
</span><span>12</span> 
<span>13</span>     <span>public</span> <span>function</span><span> __construct(){
</span><span>14</span>         <span>$re</span> = <span>new</span><span> ConfigTool;               
</span><span>15</span>         <span>$this</span>->conf = <span>$re</span>-><span>setConfig();
</span><span>16</span> <span>    } 
</span><span>17</span> 
<span>18</span>     <span>/*</span><span>*
</span><span>19</span> <span>     * 生成用戶授權(quán)的地址
</span><span>20</span> <span>     * @param string 自定義需要保持的信息
</span><span>21</span> <span>     * @param sting 請求的路由
</span><span>22</span> <span>     * @param bool 是否是通過公眾平臺方式認真
</span><span>23</span>      <span>*/</span>
<span>24</span>     <span>public</span> <span>function</span> authorize_addr(<span>$route</span>, <span>$state</span>='', <span>$mp</span>=<span>false</span><span>) {
</span><span>25</span> 
<span>26</span>         <span>if</span> (<span>$mp</span><span>) {
</span><span>27</span>             <span>$data</span> =<span> [
</span><span>28</span>                 'appid' => <span>$this</span>->conf['appid'],
<span>29</span>                 'secret' => <span>$this</span>->conf['token'],
<span>30</span>                 'grant_type' => 'client_credential'
<span>31</span> <span>            ];
</span><span>32</span>             <span>$url</span> = <span>$this</span>->conf['mp_authorize_url'<span>];
</span><span>33</span>         } <span>else</span><span> {
</span><span>34</span>             <span>$data</span> =<span> [
</span><span>35</span>                 'appid' => <span>$this</span>->conf['appid'],                                <span>//</span><span>公眾號唯一標識</span>
<span>36</span>                 'redirect_uri' => <span>urlencode</span>(<span>$this</span>->conf['redirect_uri'] . <span>$route</span>),       <span>//</span><span>授權(quán)后重定向的回調(diào)鏈接地址</span>
<span>37</span>                 'response_type' => 'code',                                      <span>//</span><span>返回類型,此處填寫code</span>
<span>38</span>                 'scope'=><span>$this</span>->conf['scope'],                                  <span>//</span><span>應用授權(quán)作用域</span>
<span>39</span>                 'state'=><span>$state</span>,                                                <span>//</span><span>重定向后帶上state參數(shù),開發(fā)者可以填寫任意參數(shù)</span>
<span>40</span>                 '#wechat_redirect'=>''                                          <span>//</span><span>直接在微信打開鏈接,可不填,做頁面302重定向時必須帶此參數(shù)</span>
<span>41</span> <span>            ];
</span><span>42</span>             <span>$url</span> = <span>$this</span>->conf['authorize_url'<span>];
</span><span>43</span> <span>        }
</span><span>44</span>         
<span>45</span>         <span>$send</span> = <span>new</span><span> HttpsTool;
</span><span>46</span>         <span>//</span><span>var_dump($url . $send->create_url($data));exit;</span>
<span>47</span>         <span>return</span>  <span>$url</span> . <span>$send</span>->create_url(<span>$data</span><span>);
</span><span>48</span> <span>    }
</span><span>49</span> 
<span>50</span>     <span>/*</span><span>*
</span><span>51</span> <span>     * 獲取 access token
</span><span>52</span> <span>     * @param string 用于換取access token的code,微信提供
</span><span>53</span>      <span>*/</span>
<span>54</span>     <span>public</span> <span>function</span> access_token(<span>$code</span><span>) {
</span><span>55</span> 
<span>56</span>         <span>$data</span> =<span> [
</span><span>57</span>             'appid' => <span>$this</span>->conf['appid'],
<span>58</span>             'secret' => <span>$this</span>->conf['secret'],
<span>59</span>             'code' => <span>$code</span>,
<span>60</span>             'grant_type' => 'authorization_code'
<span>61</span> <span>        ];
</span><span>62</span>         <span>//</span><span> 生成授權(quán)url</span>
<span>63</span>         <span>$url</span> = <span>$this</span>->conf['access_token_url'<span>];
</span><span>64</span>         
<span>65</span>         <span>$send</span> = <span>new</span><span> HttpsTool;
</span><span>66</span>         <span>return</span> <span>$send</span>->send_request(<span>$url</span>, <span>$data</span><span>);
</span><span>67</span> <span>    }
</span><span>68</span> 
<span>69</span>     <span>/*</span><span>*
</span><span>70</span> <span>     * 獲取用戶信息
</span><span>71</span> <span>     * @param string access token
</span><span>72</span> <span>     * @param string 用戶的open id
</span><span>73</span>      <span>*/</span>
<span>74</span>     <span>public</span> <span>function</span> userinfo(<span>$token</span>, <span>$openid</span><span>) {
</span><span>75</span> 
<span>76</span>         <span>$data</span> =<span> [
</span><span>77</span>             'access_token' => <span>$token</span>,
<span>78</span>             'openid' => <span>$openid</span>,
<span>79</span>             'lang' => <span>$this</span>->conf['lang'<span>]
</span><span>80</span> <span>        ];
</span><span>81</span>         <span>//</span><span> 生成授權(quán)url</span>
<span>82</span>         <span>$url</span> = <span>$this</span>->conf['userinfo_url'<span>];
</span><span>83</span> 
<span>84</span>         <span>$send</span> = <span>new</span><span> HttpsTool;
</span><span>85</span>         <span>return</span> <span>$send</span>->send_request(<span>$url</span>, <span>$data</span><span>);
</span><span>86</span> <span>    }
</span><span>87</span> 
<span>88</span> }
登錄后復制

? ? ? ? ? ? ?d. 授權(quán)基類調(diào)用及用戶數(shù)據(jù)處理(在控制器調(diào)用前,先對用戶數(shù)據(jù)存入或更新)

<span> 1</span> <?<span>php
</span><span> 2</span> <span>namespace wechat\controllers\classes;
</span><span> 3</span> 
<span> 4</span> <span>use</span><span> common\tools\wechat\OauthTool;
</span><span> 5</span> <span>use</span><span> common\models\User;
</span><span> 6</span> <span>use</span><span> common\tools\EmojiTool;
</span><span> 7</span> 
<span> 8</span> <span>/*</span><span>*
</span><span> 9</span> <span> * 微信用戶基本信息獲取
</span><span>10</span>  <span>*/</span>
<span>11</span> <span>class</span><span> UserinfoClass {
</span><span>12</span>  
<span>13</span>     <span>/*</span><span>*
</span><span>14</span> <span>     * 用戶授權(quán)并獲取code 
</span><span>15</span> <span>     * @return string 用戶code
</span><span>16</span>      <span>*/</span>
<span>17</span>     <span>public</span> <span>function</span> getCode(<span>$route</span>, <span>$state</span><span>){
</span><span>18</span> 
<span>19</span>         <span>$re</span> = <span>new</span><span> OauthTool;
</span><span>20</span>         <span>$request</span> = <span>$re</span>->authorize_addr(<span>$route</span>, <span>$state</span><span>);
</span><span>21</span>         <span>$code</span> = <span>isset</span>(<span>$_GET</span>['code']) ? <span>$_GET</span>['code'] : ''<span>;
</span><span>22</span>         
<span>23</span>         <span>return</span> [<span>$request</span>,<span>$code</span><span>];
</span><span>24</span> <span>    }
</span><span>25</span>     
<span>26</span>     <span>/*</span><span>*
</span><span>27</span> <span>     * 獲取用戶信息并寫入數(shù)據(jù)庫(之后加參數(shù)傳給code)
</span><span>28</span>      <span>*/</span>
<span>29</span>     <span>public</span> <span>function</span> info(<span>$code</span><span>) {
</span><span>30</span>         <span>$re</span> = <span>new</span><span> OauthTool;
</span><span>31</span>         <span>//</span><span>獲取access token</span>
<span>32</span>         <span>$access</span> = <span>$re</span>->access_token(<span>$code</span><span>);
</span><span>33</span>         <span>$token</span> = json_decode(<span>$access</span>,<span>true</span><span>);
</span><span>34</span>         <span>//</span><span>header("Content-type: text/html; charset=gbk"); 
</span><span>35</span> <span>        //獲取用戶信息</span>
<span>36</span>         <span>if</span>(<span>count</span>(<span>$token</span>) != 2<span>) {
</span><span>37</span>             <span>$response</span> = <span>$re</span>->userinfo(<span>$token</span>['access_token'], <span>$token</span>['openid'<span>]);
</span><span>38</span>             <span>$user</span> = json_decode(<span>$response</span>,<span>true</span><span>);
</span><span>39</span>             <span>//</span><span>用戶昵稱轉(zhuǎn)換
</span><span>40</span> <span>            //$user['nickname'] = EmojiTool::emoji_trans($user['nickname']);</span>
<span>41</span> 
<span>42</span>             <span>if</span>(<span>$model</span> = User::findOne(['openid' => <span>$user</span>['openid'] ])) {            <span>//</span><span>用戶已存在更新數(shù)據(jù)</span>
<span>43</span>                 <span>$model</span>->attributes = <span>$user</span><span>;
</span><span>44</span>                 <span>$model</span>->modify_time = <span>time</span><span>();
</span><span>45</span>                 <span>$model</span>->save(<span>false</span><span>);
</span><span>46</span>             }<span>else</span>{                                                                  <span>//</span><span>用戶不存在寫入</span>
<span>47</span>                 <span>$model</span> = <span>new</span><span> User;
</span><span>48</span>                 <span>$model</span>->attributes = <span>$user</span><span>;
</span><span>49</span>                 <span>$model</span>->create_time = <span>time</span><span>();
</span><span>50</span>                 <span>$model</span>->save(<span>false</span><span>);
</span><span>51</span> <span>            }
</span><span>52</span> <span>        }
</span><span>53</span>         <span>return</span> <span>isset</span>(<span>$model</span>->id) ? <span>$model</span>->id : ''<span>;
</span><span>54</span> <span>    }
</span><span>55</span>     
<span>56</span> }
登錄后復制

? ? ? ? ? ? ?e. 控制器調(diào)用(這里只貼其中一個方法)

<span> 1</span> <span>/*</span><span>*
</span><span> 2</span> <span>     * 產(chǎn)品列表
</span><span> 3</span> <span>     * @return object 所有可用產(chǎn)品信息
</span><span> 4</span>      <span>*/</span>
<span> 5</span>     <span>public</span> <span>function</span><span> actionIndex(){
</span><span> 6</span>         <span>//</span><span>判斷頁面是否自動刷新</span>
<span> 7</span>         <span>if</span>(<span>isset</span>(<span>$_GET</span>['state'<span>])) {
</span><span> 8</span>             <span>$refresh</span> = 0<span>;
</span><span> 9</span>         }<span>else</span><span>{
</span><span>10</span>             <span>$refresh</span> = 1<span>;
</span><span>11</span> <span>        }
</span><span>12</span> 
<span>13</span>         <span>//</span><span>獲取用戶code</span>
<span>14</span>         <span>$user</span> = <span>new</span><span> UserinfoClass;
</span><span>15</span>         <span>$request</span> = <span>$user</span>->getCode('r=store/index', 1<span>);
</span><span>16</span> 
<span>17</span>         <span>//</span><span>該用戶userid</span>
<span>18</span>         <span>$userid</span> = <span>$user</span>->info(<span>$request</span>[1<span>]);
</span><span>19</span> 
<span>20</span>         <span>$model</span> = <span>new</span><span> Product;
</span><span>21</span>         <span>$list</span> = <span>$model</span>->find()->where(['status' => 1])-><span>all();
</span><span>22</span> 
<span>23</span>         <span>return</span> <span>$this</span>->render('index',['list' => <span>$list</span>, 'refresh' => <span>$refresh</span>, 'userid' => <span>$userid</span>, 'request' => <span>$request</span><span>]);
</span><span>24</span>     }
登錄后復制

? ? ? ? ? ? ?程序要求用戶打開產(chǎn)品列表即獲取用戶信息并存入數(shù)據(jù)庫,其中設計了幾個變量作用如下:

? ? ? ? $refresh:判斷頁面是否刷新,由于首次打開頁面未進行oauth驗證時才自動請求驗證,避免反復刷新,這里用回調(diào)的state參數(shù)作為判斷依據(jù)且設state=1(若有特定參數(shù)需要可將state賦值為所需值);

? ? ? ? $request:即為驗證請求地址

? ? ? ? f. 視圖自動刷新

? ? ? ? 只需要在視圖中添加以下js代碼即可

<span> 1</span> <script type="text/javascript">
<span> 2</span> 
<span> 3</span>     <span>//</span><span>自動請求獲取code</span>
<span> 4</span>     $(<span>function</span><span>(){
</span><span> 5</span>         <span>var</span> refresh = <?= <span>$refresh</span>; ?><span>;
</span><span> 6</span>         <span>var</span> request = '<?= $request[0]; ?>'<span>;
</span><span> 7</span>         <span>if</span>(refresh == 1<span>){
</span><span> 8</span>             console.<span>log</span>(1<span>);
</span><span> 9</span>             location =<span> request;
</span><span>10</span> <span>        }
</span><span>11</span> <span>    });
</span><span>12</span> </script>
登錄后復制

?

特此聲明:相關文章均為查閱資料、閱讀大神博文后結(jié)合實際開發(fā)情況遇到的問題整理而成,能找到原博的必會署名,找不到原博而引用的內(nèi)容還望原博主海涵

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1089036.htmlTechArticle(二)網(wǎng)頁授權(quán)獲取用戶基本信息,獲取基本信息 在公眾號的配置過程中,許多開發(fā)者會在菜單中加入HTML5頁面,有時在頁面內(nèi)需要訪問頁...
PHP速學教程(入門到精通)
PHP速學教程(入門到精通)

PHP怎么學習?PHP怎么入門?PHP在哪學?PHP怎么學才快?不用擔心,這里為大家提供了PHP速學教程(入門到精通),有需要的小伙伴保存下載就能學習啦!

下載
來源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn
最新問題
開源免費商場系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關于我們 免責申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓,幫助PHP學習者快速成長!
關注服務號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學習
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號