ホームページ > バックエンド開発 > PHPチュートリアル > PHP は WeChat Web ページのログイン認証開発を実装します

PHP は WeChat Web ページのログイン認証開発を実装します

不言
リリース: 2023-03-24 12:36:01
オリジナル
14806 人が閲覧しました

この記事では、PHP を使用した WeChat Web ページのログイン認証開発の実装を主に紹介します。必要な友人はそれを参照できるようにしました。

WeChat オープン プラットフォームとパブリック プラットフォームの違い。

1. パブリック プラットフォームは、セルフ メディアやメディアなどの一般ユーザー向けであり、企業の公式 WeChat パブリック アカウントの運営者によって使用されます。もちろん、チームや会社にコンテンツを開発する力がある場合は、カスタマイズメニュー、自動応答、クエリ機能などのパブリックプラットフォームのインターフェースを呼び出すこともできます。現在、ほとんどの WeChat は認証に合格した後にこれを行っています。

mp.weixin.qq.com

2. オープン プラットフォームは、開発者およびサードパーティの独立系ソフトウェア開発者向けです。開発プラットフォームの最大のオープン性は WeChat ログインだと思います。 Tencent は当時、統合ログインの実装に大きな努力をしていなかったので、現在は各 Web サイトがログイン メカニズムを開発する必要があります。幸いなことに、彼らは今では状況を理解しています。開発者またはソフトウェア開発者は、WeChat が提供するプラットフォームとインターフェイスを通じて、企業に適した電子商取引 Web サイトを開発し、QR コードをスキャンしてゲーム インターフェイスに入り、商品を購入できます。もちろん、その後のオープンプラットフォームでは決済インターフェースがオープンになるため、Pocket Tongなどのソフトウェア開発者は大企業や中小企業向けにWeChatストアなどのサービスやソフトウェアを提供できるようになる。

open.weixin.qq.com

パブリック プラットフォームは、サービス アカウントのサブスクリプション アカウントの管理および開発のバックエンドです。

簡単に言うと、開発プラットフォームは、携帯電話にインストールされているソフトウェアのコンテンツをワンクリックで友人のサークルに共有することを実現するものです。

以下のサードパーティのログインは、オープン プラットフォーム (open.weixin.qq.com)

準備作業

ウェブサイト アプリケーション WeChat ログインは、OAuth2.0 プロトコル標準に基づいて構築された WeChat OAuth2.0 認証ログイン システムです。

WeChat OAuth2を実行する前に、WeChat OAuth2.0認証ログインアクセスを実行する前に、WeChatオープンプラットフォームに開発者アカウントを登録し、承認されたWebサイトアプリケーションを取得し、対応するAppIDとAppSecretを取得し、WeChatログインを申請し、審査に合格した後、にアクセスすると、アクセスプロセスを開始できます。

認証プロセスの説明

WeChat OAuth2.0 認証ログインにより、WeChat ユーザーは認証され、認証されたサードパーティ アプリケーションにログインした後、WeChat ID を使用してサードパーティ アプリケーションまたは Web サイトに安全にログインできます。 WeChat OAuth2.0 に接続すると、サードパーティはユーザーのインターフェイス呼び出し資格情報 (access_token) を使用して WeChat オープン プラットフォーム承認関係インターフェイスを呼び出すことができます。これにより、WeChat ユーザーの基本的なオープン情報を取得し、ユーザーが基本的なオープン機能を実装できるようになります。

WeChat OAuth2.0 認証ログインは現在、サーバー側でのアプリケーション認証に適した authorization_code モードをサポートしています。このモデルの全体的なプロセスは次のとおりです:

1. サードパーティが WeChat 承認ログイン要求を開始し、WeChat ユーザーがサードパーティ アプリケーションの承認を許可した後、WeChat はアプリケーションを起動するか、サードパーティ Web サイトにリダイレクトします。認可一時チケット コード パラメータを持ち込む

2. コード パラメータを通じて AppID と AppSecret を追加し、API を通じて access_token を交換する

3. ユーザーの基本的なデータ リソースを取得するか、ユーザーが基本的な実装を行うのを支援します。オペレーション。

access_token シーケンス図の取得:


ステップ 1: CODE のリクエスト
サードパーティが Web サイトアプリケーション認証を使用してログインする前に、対応する Web ページ認証スコープ (scope=snsapi_login) を取得していることに注意してください。 、PC からアクセスできます。次のリンクを開きます:

https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

「リンクにアクセスできません」というメッセージが表示された場合は、redirect_uri のドメイン名がレビュー中に入力された承認済みのドメイン名と一致しない、スコープが snsapi_login ではないなど、パラメータの入力エラーがないか確認してください。

アプリケーションの一意の識別子redirect_uri response_typescope

パラメータ

は必要ですか?

リダイレクトアドレスとニーズですUrlEncode

コードを入力してください

アプリケーションの認可スコープが複数ある場合は分けてください。 Web アプリケーションの場合、現時点では snsapi_login

state
No

のみを入力する必要があります。

リクエストとコールバックのステータスを維持し、リクエストを承認した後にそれらをそのままの状態でサードパーティに戻すために使用されます。このパラメータは、CSRF 攻撃 (クロスサイト リクエスト フォージェリ攻撃) を防ぐために使用できます。このパラメータは、検証用に単純な乱数とセッションを設定することが推奨されます

戻りの説明
ユーザー 承認が許可されると、code パラメーターと state パラメーターを使用して redirect_uri URL にリダイレクトされます

redirect_uri?code=CODE&state=STATE

redirect_uri?code=CODE&state=STATE

若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数

redirect_uri?state=STATEユーザーが承認を禁止した場合、リダイレクトはありません code パラメータを取得します。state パラメータのみが取得されます

redirect_uri?state=STATE

リクエストの例

Yihaodian Web サイト アプリケーションにログインします

https://passport .yhd.com/wechat /login.do
開くと、Yihaodian は状態パラメータを生成し、https://open.weixin.qq.com/connect/qrconnect?appid=wxbdc5610cc59c1631&redirect_uri=https%3A%2F にジャンプします。 %2Fpassport.yhd .com%2Fwechat%2Fcallback.do&response_type=code&scope=

snsapi_login

&state=3d6be0a4035d839573b04816624a415e#wechat_redirect

https://open.weixin.qq.com/connect/qrconnect?appid=wxb dc5610 cc59c1631&redirect_uri=https%3A% 2F%2Fpassport.yhd .com%2Fwechat%2Fcallback.do&response_type=code&scope=snsapi_login&state=eb407f95fbc413185209fd85931761c2#wechat_redirect

WeChat ユーザーが WeChat を使用して QR コードをスキャンし、ログインを確認すると、PC は

にジャンプします。

https://パスポート。コードを取得する 2 番目の方法では、Web サイトが WeChat ログイン QR コードを独自のページに埋め込むことができます。ユーザーは WeChat を使用してコードをスキャンします。コードを承認し、JS を通じて Web サイトに返します。

JS WeChat ログインの主な目的: Web サイトは、ユーザーが WeChat ドメインにジャンプしてログインして戻ってくることなく、Web サイト内でログインを完了できるようにして、WeChat ログインの流暢さと成功率を向上させることを望んでいます。 Web サイトに埋め込まれた QR コード WeChat ログイン用の JS を実装する方法:

ステップ 1: まず、次の JS ファイルをページに導入します (https をサポート):

ステップ 2: WeChat ログインが必要な次の JS オブジェクトをインスタンス化します:

   varobj = new WxLogin({
                            id:"login_container", 
                            appid: "", 
                            scope: "", 
                            redirect_uri: "",
                            state: "",
                            style: "",
                            href: ""
                          });
ログイン後にコピー

Parameters必要ですか説明id。

はい

サードパーティのページに表示されるQRコードのコンテナID

アプリ

です
アプリケーションの一意の識別子は、WeChatオープンプラットフォームでレビューのためにアプリケーションを送信した後に取得されます

スコープ
アプリケーションの作成者です。複数のスコープ。 Web ページ アプリケーションは現在、snsapi_login

redirect_uri

を入力するだけで済み、UrlEncode

state

である必要があります。

保留リクエストとコールバックステータスはNo

。認可リクエスト後にそのまま第三者に返されます。このパラメータは、CSRF 攻撃 (クロスサイト リクエスト フォージェリ攻撃) を防ぐために使用できます。サードパーティがこのパラメータを検証用に単純な乱数とセッションに設定することをお勧めします

スタイル

いいえ

「黒」と「白」があり、デフォルトは黒のテキスト説明です。詳細については、ドキュメントの下部にある FAQ を参照してください

href

いいえ

カスタム スタイル リンク。サードパーティは実際のニーズに応じてデフォルト スタイルをオーバーライドできます。詳細については、文書の下部にあるよくある質問をご覧ください

パラメータの説明
ステップ 2: コードを通じて access_token を取得する コードを通じて access_token を取得する

コードを通じて access_token を取得する

https://api.weixin.qq.com/sns/oauth2/access_token?appid= APPID&secret=SECRET&code =CODE&grant_type=authorization_code

パラメータの説明
はい最初のステップで取得したコードパラメータを入力しますはいauthorization_codeを入力してください正しいreturn:{ &lt;br/&gt;"access_token":"ACCESS_TOKEN", &lt;br/&gt;"expires_in" ":7200, &lt;br/&gt;"refresh_token":"REFRESH_TOKEN",<br/>"openid":"OPENID" , &lt;br/&gt;"scope":"SCOPE","unionid":"o6_bmasdasdsad6_2sgVt7hMZOPfL"}</コード><td><p style="text-align:left;"></p></td><td><p style="text-align:left;"></p>パラメータ</td><td><p style="text-align:left;"></p></td></tr>説明</tbody></table><h6></h6> <p></p><p>access_token<code>{ &lt;br/&gt;"access_token":"ACCESS_TOKEN", &lt;br/&gt;"expires_in":7200, &lt;br/&gt;"refresh_token":"REFRESH_TOKEN",<br/>"openid":"OPENID", &lt;br/&gt;"scope":"SCOPE","unionid":"o6_bmasdasdsad6_2sgVt7hMZOPfL"}

パラメータ

必要ですか

説明

appid

は唯一です

アプリ 審査のために申請を送信し、WeChatオープンプラットフォームで審査に合格すると、ロゴが取得されます

。 grant_type

返品手順

参数

说明

access_token

接口调用凭证

expires_in

access_token接口调用凭证超时时间,单位(秒)

refresh_token

用户刷新access_token

openid

授权用户唯一标识

scope

用户授权的作用域,使用逗号(,)分隔

unionid

只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。

错误返回样例:

{"errcode":40029,"errmsg":"invalidcode"}

インターフェース呼び出し資格情報

expires_in

access_token インターフェース呼び出し資格情報タイムアウト、単位(2 番目)

refresh_tokenaccess_tokenは認可への呼び出しです関係インターフェイスの資格情報。access_token の有効期間が短いため (現在 2 時間)、access_token がタイムアウトした場合、refresh_token を使用して更新できます。 access_token がタイムアウトした場合、次に、refresh_token は新しい access_token、新しい timeout を取得します。 パラメータアプリケーションの一意の識別子です
ユーザー更新アクセス_token

openid

許可されたユーザーの一意の識別子

スコープ
によって承認されたスコープユーザー、カンマ (,) で区切る このフィールドは、プラットフォーム アカウントが開設された後にのみ表示されます。

エラー戻り例:
{"errcode":40029,"errmsg":"invalidcode"}

access_tokenの有効期間を更新します
2. access_token の有効期限が切れていない場合、refresh_token は access_token を変更しませんが、タイムアウトは更新されます。これは、access_token を更新するのと同じです。

refresh_token の有効期間は長く (30 日間)、refresh_token の有効期限が切れると、ユーザーは再認証する必要があります。
リクエスト方法

最初のステップのコードを取得したら、refresh_token の次のリンクをリクエストします:
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

パラメータの説明

は、

🎜🎜🎜🎜 🎜grant_type🎜🎜🎜🎜はい🎜🎜🎜🎜 Refresh_tokenを入力します🎜🎜🎜🎜🎜🎜refresh_token🎜🎜🎜🎜Yes🎜🎜🎜🎜access_tokenで取得したrefresh_tokenパラメータを入力します🎜🎜🎜🎜🎜
返品手順

正しい返品:

{ &lt;br/&gt;"access_token":"ACCESS_TOKEN", &lt;br/&gt;"expires_in":7200, &lt;br/&gt;"refresh_token":"REFRESH_TOKEN", < br/> />"openid":"OPENID", &lt;br/&gt;"scope":"SCOPE" &lt;br/&gt;}{ &lt;br/&gt;"access_token":"ACCESS_TOKEN", &lt;br/&gt;"expires_in":7200, &lt;br/&gt;"refresh_token":"REFRESH_TOKEN", &lt;br/&gt;"openid":"OPENID", &lt;br/&gt;"scope":"SCOPE" &lt;br/&gt;}

参数

说明

access_token

接口调用凭证

expires_in

access_token接口调用凭证超时时间,单位(秒)

refresh_token

用户刷新access_token

openid

授权用户唯一标识

scope

用户授权的作用域,使用逗号(,)分隔

错误返回样例:

{"errcode":40030,"errmsg":"invalidrefresh_token"}

パラメータ

説明

access_token

インターフェイスコールバウチャー

expires_inopenid認可されたユーザーの一意の識別子 ユーザー認可の範囲(カンマ(,)で区切る){"errcode":40030,"errmsg":"invalidrefresh_token"}注: 3 は長期的なものです。ユーザーがサードパーティのアプリケーションを承認するための認証情報。access_token を更新するためにのみ使用されますが、漏洩は access_token の漏洩と同等であり、リスクは上記と同じです。 1. access_token が有効であり、期限切れになっていない。サードパーティアプリケーションに認可されたアカウントに対応するインターフェイススコープ(スコープ)。 認可スコープ(scope)

access_tokenインターフェイスコールバウチャータイムアウト、単位(秒))

refresh_token

ユーザー更新 access_token

scope

エラーリターン例:

1 はアプリケーション インターフェイスで使用されるキーであり、漏洩はアプリケーション データの漏洩につながる可能性があります。 、アプリケーション ユーザー データの漏洩やその他のリスクの高い結果がクライアントに保存されるため、悪意を持って盗まれる可能性が非常に高くなります (Appsecret を取得するための逆コンパイルなど)。インターフェイス呼び出しを開始するため (ユーザーのログイン ステータスに相当)、クライアントに保存される、ユーザー データが不正に access_token を取得した後に漏洩する可能性がある、ユーザーの WeChat 関連のインターフェイス関数が悪意を持って開始される可能性がある、など

シークレットとユーザーデータ (access_token など) をアプリクラウドサーバーに置き、クラウド転送インターフェイスがリクエストを呼び出すことをお勧めします。

ステップ 3: access_token を介してインターフェイスを呼び出す

access_token を取得した後、次の前提条件でインターフェイス呼び出しを実行します。

インターフェーススコープ(scope)の場合、呼び出すことができるインターフェースは以下の通りです:

🎜🎜🎜🎜インターフェース🎜🎜🎜🎜🎜🎜インターフェースの説明🎜 🎜🎜🎜 🎜 🎜snsapi_base🎜🎜🎜🎜/sns/oauth2/access_token🎜🎜🎜🎜access_token、refresh_token、および承認されたスコープの交換コード🎜🎜🎜🎜🎜🎜/sns/oauth2/refresh_token🎜 🎜 🎜🎜access_token の使用状況を更新または更新します🎜 🎜 🎜🎜🎜🎜/sns/auth🎜🎜🎜🎜access_tokenの有効性を確認🎜🎜🎜🎜🎜🎜snsapi_userinfo🎜🎜🎜🎜/sns/userinfo🎜🎜🎜🎜ユーザーの個人情報を取得する🎜 🎜🎜🎜🎜

このうち、snsapi_base は基本インターフェイスに属します。アプリケーションがすでに他のスコープの権限を持っている場合、デフォルトで snsapi_base の権限を持ちます。 snsapi_base を使用すると、モバイル Web ページの認証で、ユーザーの認証を要求するために認証ログイン ページにジャンプするアクションをバイパスし、認証一時チケット (コード) を使用してサードパーティの Web ページに直接ジャンプできますが、これによりユーザーの認証が行われなくなります。スコープ (スコープ) は snsapi_base のみであるため、ユーザーの承認が必要なデータや基本的な機能を取得できなくなります。

よくある質問
1. 正規の一時チケット(コード)とは何ですか?

回答: サードパーティはコードを使用して access_token を取得する必要があります。コードのタイムアウトは 10 分です。コードは 1 回だけ正常に access_token と交換できます。その後、コードは無効になります。コードの一時的かつ 1 回限りの性質により、WeChat 承認ログインのセキュリティが確保されます。サードパーティは、https および state パラメータを使用して、独自の承認されたログインのセキュリティをさらに強化できます。

2. 認可範囲とは何ですか?

回答: 承認スコープ (スコープ) は、ユーザーがサードパーティに許可するインターフェイスのアクセス許可を表し、サードパーティのアプリケーションは、対応するスコープの使用許可を WeChat オープン プラットフォームに適用してから、説明されている方法を使用する必要があります。ユーザーが認可した後は、対応する access_token を取得した後でのみインターフェイスを呼び出すことができます。

3. Web サイトに QR コードが埋め込まれた WeChat ログイン用の JS コードのスタイル フィールドの役割は何ですか?

回答: サードパーティのページの色のスタイルは、明るい場合もあれば暗い場合もあります。サードパーティのページの背景が明るい場合は、スタイル フィールドに「黒」の値を指定する必要があります (または指定しない場合は、黒がデフォルトです)。値)の場合、対応する WeChat ログイン テキストのスタイルは黒になります。関連する効果は次のとおりです。

「白」値が指定されている場合、対応するテキストの説明が白で表示され、暗い背景に適しています。関連する効果は次のとおりです:

4. Web サイトに埋め込まれた QR コードを含む WeChat ログイン JS コードの href フィールドの役割は何ですか?

回答: WeChat チームが提供するデフォルト スタイルが自社のページ スタイルと一致しないと第三者が判断した場合、独自のスタイル ファイルを提供してデフォルト スタイルをオーバーライドできます。たとえば、サードパーティがデフォルトの QR コードが大きすぎると感じた場合、関連する CSS スタイル ファイルを提供し、リンク アドレスを href フィールドに入力できます

.impowerBox .qrcode {width:200px;}<br/>.impowerBox .title {display: none;}<br/>.impowerBox .info {width: 200px;}<br/>.status_icon {displaynone}<br/>.impowerBox .status {text-align: center;}

関連する効果は次のとおりです:

ユーザーの個人情報を取得する (UnionID メカニズム)
インターフェースの説明

このインターフェースは、ユーザーの個人情報を取得するために使用されます。開発者は、OpenID を通じて基本的なユーザー情報を取得できます。特に重要なのは、開発者が複数のモバイル アプリケーション、Web サイト アプリケーション、パブリック アカウントを持っている場合、同じ WeChat 内のモバイル アプリケーションである限り、ユーザーの基本情報の UnionID を取得することでユーザーを一意に区別できることです。オープン プラットフォーム アカウント、Web サイト アプリケーション、パブリック アカウントでは、ユーザーの UnionID は一意です。言い換えれば、同じユーザーの場合、同じ WeChat オープン プラットフォーム上の異なるアプリケーションの UnionID は同じです。

リクエストの説明

httpリクエストメソッド: GET

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

パラメータの説明

パラメータ

必要ですか

手順

access_token

呼び出し資格情報です

openid

の ID です一般ユーザー、現在の開発者アカウントに固有

返却手順

正しい Json 返却結果:

{ &lt;br/&gt;"openid":"OPENID",<br/>"nickname":"NICKNAME",<br/>"sex":1 , &lt;br/&gt;"province":"PROVINCE",<br/>"city":"CITY",<br/>"country":"COUNTRY",<br/>"headimgurl":"http:// wx .qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibXXSCfHe/0",<br/>"privilege":[<br/>"PRIVILEGE1", < br/>"PRIVILEGE2"<br/>]、<br/>"unionid" : " o6_bmasdasdsad6_2sgVt7hMZOPfL"<br/><br/>}{ &lt;br/&gt;"openid":"OPENID",<br/>"nickname":"NICKNAME",<br/>"sex":1,<br/>"province":"PROVINCE",<br/>"city":"CITY",<br/>"country":"COUNTRY",<br/>"headimgurl":"http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",<br/>"privilege":[<br/>"PRIVILEGE1", &lt;br/&gt;"PRIVILEGE2"<br/>],<br/>"unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"<br/><br/>}

参数

说明

openid

普通用户的标识,对当前开发者帐号唯一

nickname

普通用户昵称

sex

普通用户性别,1为男性,2为女性

province

普通用户个人资料填写的省份

city

普通用户个人资料填写的城市

country

国家,如中国为CN

headimgurl

用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空

privilege

用户特权信息,json数组,如微信沃卡用户为(chinaunicom)

unionid

用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的。

错误的Json返回示例:

{ &lt;br/&gt;"errcode":40003,"errmsg":"invalid openid"<br/>}

パラメータ説明 openid ニックネーム性別県

一般ユーザーの識別、そうですよね現在の開発者アカウントには、

一般ユーザーのニックネーム

があり、1は男性、2は女性です

🎜🎜一般ユーザーの個人データが入力された州🎜🎜🎜🎜🎜🎜city🎜🎜🎜🎜一般ユーザーの個人データが入力された市🎜🎜🎜🎜🎜🎜country🎜🎜🎜🎜国CNです🎜🎜 🎜🎜🎜🎜 headimgurl🎜🎜🎜🎜ユーザー アバター、最後の値は正方形のアバター サイズを表します (0、46、64、96、132 の値が利用可能、0 は 640*640 の正方形のアバターを表します)、このアイテムユーザーがアバターを持たない場合は空です🎜🎜🎜 🎜🎜🎜privilege🎜🎜🎜🎜WeChat Woka ユーザー (chinaunicom) などの json 配列統一された識別。 WeChat オープン プラットフォーム アカウント下のアプリケーションの場合、同じユーザーの UnionID は一意です。 🎜🎜🎜🎜🎜🎜間違った Json 戻り例: 🎜🎜{ &lt;br/&gt;"errcode":40003,"errmsg":"invalid openid"<br/>}🎜🎜呼び出し頻度制限🎜 🎜🎜🎜🎜🎜🎜インターフェース名🎜🎜🎜🎜🎜🎜頻度制限🎜🎜🎜🎜🎜🎜🎜access_tokenの交換コード🎜🎜🎜🎜10,000/分🎜 🎜 🎜🎜🎜🎜アクセストークンを更新🎜🎜🎜🎜50,000 /分🎜 🎜🎜🎜🎜🎜基本的なユーザー情報を取得🎜🎜🎜🎜50,000/分🎜🎜🎜🎜🎜

代码示例:

第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;

通过code参数加上AppID和AppSecret等,通过API换取access_token;

通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

Login.php如下:

/*
ログイン後にコピー
返回  code state*/
ログイン後にコピー
$appid = &#39;wxea1xxxxxxxx20cb62&#39;;
ログイン後にコピー
$url = "https://open.weixin.qq.com/connect/qrconnect?appid=$appid&redirect_uri=http://zhiliaoke.com.cn/weixin.php&response_type=code&scope=snsapi_login&state=1&connect_redirect=1#wechat_redirect";
ログイン後にコピー

header('location:'.$url);

验证处理如下:

<?php
ログイン後にコピー
$code = $_GET[&#39;code&#39;];
ログイン後にコピー
$state = $_GET[&#39;state&#39;];//换成自己的接口信息
ログイン後にコピー
$appid = &#39;XXXXX&#39;;
ログイン後にコピー
$appsecret = &#39;XXXXX&#39;;
ログイン後にコピー
if (empty($code)) $this->error(&#39;授权失败&#39;);
ログイン後にコピー
 <br/>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
$token_url = &#39;https://api.weixin.qq.com/sns/oauth2/access_token?appid=&#39;.$appid.&#39;&secret=&#39;.$appsecret.&#39;&code=&#39;.$code.&#39;&grant_type=authorization_code&#39;;
ログイン後にコピー
$token = json_decode(file_get_contents($token_url));
ログイン後にコピー
if (isset($token->errcode)) {
ログイン後にコピー
    echo &#39;<h1>错误:</h1>&#39;.$token->errcode;
ログイン後にコピー
    echo &#39;<br/><h2>错误信息:</h2>&#39;.$token->errmsg;
ログイン後にコピー
    exit;
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
 <br/>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
$access_token_url = &#39;https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=&#39;.$appid.&#39;&grant_type=refresh_token&refresh_token=&#39;.$token->refresh_token;//转成对象
ログイン後にコピー
$access_token = json_decode(file_get_contents($access_token_url));
ログイン後にコピー
if (isset($access_token->errcode)) {
ログイン後にコピー
    echo &#39;<h1>错误:</h1>&#39;.$access_token->errcode;
ログイン後にコピー
    echo &#39;<br/><h2>错误信息:</h2>&#39;.$access_token->errmsg;
ログイン後にコピー
    exit;
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
 <br/>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
 <br/>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
$user_info_url = &#39;https://api.weixin.qq.com/sns/userinfo?access_token=&#39;.$access_token->access_token.&#39;&openid=&#39;.$access_token->openid.&#39;&lang=zh_CN&#39;;//转成对象
ログイン後にコピー
$user_info = json_decode(file_get_contents($user_info_url));
ログイン後にコピー
if (isset($user_info->errcode)) {
ログイン後にコピー
    echo &#39;<h1>错误:</h1>&#39;.$user_info->errcode;
ログイン後にコピー
    echo &#39;<br/><h2>错误信息:</h2>&#39;.$user_info->errmsg;
ログイン後にコピー
    exit;
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
$rs =  json_decode(json_encode($user_info),true);//返回的json数组转换成array数组
ログイン後にコピー
//打印用户信息echo &#39;<pre class="brush:php;toolbar:false">&#39;;
ログイン後にコピー
 <br/>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
print_r($rs);echo &#39;
';
ログイン後にコピー
 <br/>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
?>
ログイン後にコピー

 

微信第三方登录(静默授权和非静默授权)

用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。

微信的授权登录在日常应用中应用的非常广泛,越来越多的平台支持用户使用微信进行授权第三方登录

 使用微信授权登录有哪些优势/好处;

 1、用户量足够大,基本所有用户都会有微信,登录起来比较方便快捷;

 2、微信作为一个开放平台,为众多公众号/服务开放了许多服务接口,让公众号能够为自己的用户提供更加个性、更加优质的产品服务;

open id 和 union id ,这两个id有什么区别;

1、openid:在关注者与公众号产生消息交互后,公众号可获得关注者的openid,同一个用户,在不同公众号或移动应用下对应有不同open id标识;

2、union id:同一个用户,在不同公众号或移动应用下unionID相同;前提是,如若需要做多个公众号以及移动应用账户互通,得到唯一身份标识union id,则需要将多个公众号或移动应用在微信开放平台进行绑定,然后我们才能给拿到unionid;

所以,如果某个应用或者服务,有联合登录甚至多个公众应用多账户互通,可以采用union id来进行账户体系的用户识别与合并;即微信平台可以通过union id 来进行基于多个公众号之间的账户体系互通与识别合并;

 微信联合登录是怎么登录的,有几种登录方式;微信联合登录和微信授权登录【授权登录(非静默授权)与静默授权】

微信联合登录;也就是我们常用的微信移动端/PC端之间的扫码登录,PC端用微信扫码登录,微信移动端确认授权登录后,应用可以从微信拿到用户的open id或union id,将微信获取的用户信息与自己账户体系中的用户身份进行关联;

授权登录:需要用户确认登录,这样可以通过用户的个人确认,获取用户全面的信息,无论是否关注相关微信公众号等都可以获取。

静默授权不需要用户确认,只需要用户访问某个网页,属于嵌套在普通网页里的授权形式,但是只能获取到用户的唯一标示openid和union id,无法拿到用户的微信头像、微信名称等个人信息,对于用户的简单认证还是很有用的。

如何通过微信账户体系来做多应用、多平台之间的账户互通体系;如果某个服务同时分布在多个公众号中,账户体系如何建立;如何做到用户身份唯一识别;

1)、同一用户不同公众号/应用下open id不同,同一用户不同公众号/应用下unionid相同;

2)、建立应用账户体系时,通过union来进行多应用/平台之间的用户账户体系识别与合并;

3)、多应用/平台建立账户体系时,需要做到唯一user id对应唯一union id;

特定のサービスには、モバイル アプリ、PC Web ページ、パブリック アカウント サービスが含まれます。ユーザーが WeChat を使用してログインを認証するためのデータ フロー プロセスは何ですか?

1. ユーザーは、WeChat を通じてモバイル アプリ サービスを認証します。このとき、ユーザーのユニオン ID がデータベースに見つからない場合は、新しいユーザーとして識別され、ユニオン ID に対応するユーザー ID が直接作成されます。 ;

2 、ユーザーは WeChat を通じて PC 上の QR コードをスキャンして、PC サービスを取得するための共同ログインを許可できます。このとき、この ID がインターフェースを通じてアプリケーションサービスによって取得されます。データベースでは、PC ログイン アカウントが前に作成した固有のユーザー ID アカウントに統合されます。ユーザーは、WeChat を使用して、アプリケーション サーバーへのログインを認証します。この時点で、インターフェースを通じてユーザーのユニオン ID がデータベース内で検出されます。この ID を使用すると、公式アカウントからログインしたアカウントは、以前に作成した固有のユーザー ID アカウントに統合されます。 Web ページ認証の 2 つのスコープ

1. 認証されたログインは snsapi_base です。スコープによって開始された Web ページ認証は、ページに入るユーザーの openid を取得するために使用され、サイレントに認証され、自動的にコールバック ページにジャンプします。ユーザーは、コールバック ページ (多くの場合、ビジネス ページ) に直接アクセスすると認識します。 特徴: ユーザーは、ユーザーの基本情報を取得するために snsapi_userinfo を使用して開始されるサイレント認証。 。ただし、この種の認可はユーザーが手動で同意する必要があり、ユーザーは同意しているため特に注意する必要はなく、認可後にユーザーの基本情報を取得できます。

特別なシナリオでのサイレント認証:

公式アカウントをフォローしているユーザーの場合、ユーザーが公式アカウントのセッションまたはカスタムメニューから公式アカウントのWeb認証ページに入ると、スコープが snsapi_userinfo であっても、サイレント認証となり、ユーザーは認識されません。

Web ページの認証プロセス:

1

、認証に同意するために認証ページに入るようにユーザーをガイドし、コードを取得します

WeChat 公開アカウントに認可スコープの権限(スコープパラメータ) 次にユーザーを認可ページに誘導します参考リンク:スコープはsnsapi_base注:appid、redirect_uri、stateはバックエンドとネゴシエートする必要があります

https://open .weixin.qq.com/connect/oauth2/authorize ?appid="+wx_appid+"&redirect_uri="+api.wx_reg+"&response_type=code&scope=

snsapi_login,snsapi_userinfo

&state=1,0#wechat_redirect

スコープは snsapi_userinfo です

https://open.weixin.qq.com/connect/oauth2/authorize?appid="+wx_appid+"&redirect_uri="+api.wx_reg+"&response_type=code&scope=snsapi_base,snsapi_userinfo&state=1,0#wechat_redirect

ユーザーが認可に同意した後

ユーザーが認可に同意すると、ページはredirect_uri/?code=CODE&state=STATEにジャンプします。


2

、Web ページ認証 access_token (バックグラウンド操作) のコード

を交換します

ページは、URL の redirect_uri/?code=CODE&state=STATE に戻ります。 code

Web ページ認可の access_token のコードが交換されます。Web ページ認可のスコープが snsapi_base の場合、このステップでは、Web ページ認可 access_token を取得すると同時に、snsapi_base スタイルの Web ページ認可プロセスも終了します。 3: 個人情報は必須です。バックグラウンドはコードを通じて値を取得し、操作のためにフロントエンドに返します関連する推奨事項: WeChat テンプレート メッセージ プッシュを実装するための

php

以上がPHP は WeChat Web ページのログイン認証開発を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート