PHP網站應用程式微信登入的方法

來源:互聯網
上載者:User


近期進行 PC 端的網站開發,需要用到授權登入,考慮到前期手機端已經獲得了大量的使用者群,現在想著進行資源整合,滿足同一個使用者的資料同步。

一、開發須知

1.概念區分

因為接觸到開發的知識,必然會接觸 OpenID 與UnionID 的使用,以下為官方文檔的的介紹,請注意區分:

  • 在粉絲與公眾號產生訊息互動後,公眾號可獲得粉絲的 OpenID(加密後的號,每個使用者對每個公眾號的 OpenID 是唯一的。對於不同公眾號,同一使用者的 OpenID 不同)。公眾號可通過相應介面來根據 OpenID 擷取使用者基本資料,包括暱稱、頭像、性別、所在城市、語言和關注時間。

  • 請注意,如果開發人員有在多個公眾號,或在公眾號、行動裝置 App之間統一使用者帳號的需求,需要前往開放平台(open.weixin.qq.com)綁定公眾號後,才可利用 UnionID 機制來滿足上述需求。

簡單概括來講:

  • OpenID 是普通使用者的標識,對當前開發人員帳號唯一。一個 OpenID 對應一個公眾號。

  • UnionID 是使用者統一標識。針對一個開放平台帳號下的應用,同一使用者的 UnionID 是唯一的。

2.歸納整理

繞了這個圈,也就是說,公眾號開發與開發平台開發是有差別的,想讓同一個使用者使用不同平台(如PC端、app、小程式等)的網站登入,需要進行帳號綁定,而這個綁定的帳號不能以 OpenID 區分,而需要用 UnionID 區分。

3.典型問題

附錄一個常見的設計問題,主要在於開發前的知識使用不夠全面,而造成後續拓展的影響,當然,這也是我遇到的問題,希望可以給各位敲個警鐘。

二、開放平台操作

1.簡要引導

根據在下的需求,選擇了“網站應用程式開發”的建立,然後按照官方提示進行材料的申請,一般需要三天以上。

當應用建立通過後,必須還要滿足介面許可權的擷取,會有工作人員主動聯絡,一般一天就能完成。

2.官方提供的情境參考

3.綁定公眾帳號/小程式

為了保證同一個開發帳號下對應使用者的 UnionID 綁定使用,需要在下面的列表中綁定對應的公眾號/服務號,文檔中介紹一般要滿足支付功能

4.授權擷取access_token時序圖

三、代碼實現

其實,主要的時間都花費在了前期的申請操作上,而真正的代碼實現卻是極為簡單,以下是我的實現方式,敬請指摘。

1、公用檔案配置

習慣主要的配置資訊同意放在了設定檔中,‘\Application\Common\Conf\config.php’。

'WEIXIN_LOGIN' => array(        // 開放平台 使用帳號登入App或者網站 配置資訊        'OPEN_APPID' => 'wxbd961b2a6b7b2963', //應用 AppID        'OPEN_APPSECRET' => 'e6xxxxxxxxxxxxxxxxxxxxe90',//應用 AppSecret        'OPEN_CALLBACKURL' => 'http://www.52zhenmi.com/Home/Login/wxBack', //使用者使用掃描二維碼並且確認登入後,PC端跳轉路徑    ),
2.核心代碼
public function wxIndex(){        //--登入-----產生唯一隨機串防CSRF攻擊        $state  = md5(uniqid(rand(), TRUE));        $_SESSION["wx_state"]    =   $state; //存到SESSION        $callback = urlencode($this->callBackUrl);        'https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect';        $wxurl = "https://open.weixin.qq.com/connect/qrconnect?appid="                .$this->appID."&redirect_uri="                .$callback."&response_type=code&scope=snsapi_login&state="                .$state."#wechat_redirect";        header("Location: $wxurl");    }    public function wxBack(){        if($_GET['state']!=$_SESSION["wx_state"]){            echo 'sorry,網路請求失敗...';            exit("5001");        }        $url='https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$this->appID.'&secret='.$this->appSecret.'&code='.$_GET['code'].'&grant_type=authorization_code';        $arr = curl_get_contents($url);        //得到 access_token 與 openid        $url='https://api.weixin.qq.com/sns/userinfo?access_token='.$arr['access_token'].'&openid='.$arr['openid'].'&lang=zh_CN';        $user_info = curl_get_contents($url);        $this->dealWithWxLogin($user_info);    }    /**     * 根據授權使用者的資訊 進行下一步的梳理     * @param $user_info     */    public function dealWithWxLogin($user_info){        //TODO 資料處理        var_dump($user_info);        die;    }
3.最上層顯示

根據官方文檔的介紹,既可以直接存取授權掃碼介面,也可以進行自訂設計,估計本人腦抽,嵌套登入掃碼的功能整了半天也沒實現,在此只好使用預設跳轉。

顯示效果如下:

掃描登入成功後進行頁面跳轉

四、總結

  • 1.根據上面功能實現的最後,可以擷取登入使用者的資訊,而其中的openID 和 UnionID 可儲存資料庫進行後期業務的處理.

  • 2.在下闡述能力有限,建議多參考官方開發文檔,Google前輩的乾貨經驗…

  • 3.網上看到一篇不錯的文章,建議參考:公眾號使用者與網站使用者的綁定方案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.