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

この記事では、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:{ <br>"access_token":"ACCESS_TOKEN", <br>"expires_in" ":7200, <br>"refresh_token":"REFRESH_TOKEN",<br>"openid":"OPENID" , <br>"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>説明

パラメータ

必要ですか

説明

appid

は唯一です

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

。 grant_type

返品手順

access_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","unionid":"o6_bmasdasdsad6_2sgVt7hMZOPfL"}

参数

说明

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パラメータを入力します🎜🎜🎜🎜🎜
返品手順

正しい返品:

{ <br>"access_token":"ACCESS_TOKEN", <br>"expires_in":7200, <br>"refresh_token":"REFRESH_TOKEN", />"openid":"OPENID", <br>"scope":"SCOPE" <br>}{ &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 返却結果:

{ <br>"openid":"OPENID",<br>"nickname":"NICKNAME",<br>"sex":1 , <br>"province":"PROVINCE",<br>"city":"CITY",<br>"country":"COUNTRY",<br>"headimgurl":"http:// wx .qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibXXSCfHe/0",<br>"privilege":[<br>"PRIVILEGE1", "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 戻り例: 🎜🎜{ <br>"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 = 'wxea1xxxxxxxx20cb62';
$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['code'];
$state = $_GET['state'];//换成自己的接口信息
$appid = 'XXXXX';
$appsecret = 'XXXXX';
if (empty($code)) $this->error('授权失败');
 <br>
$token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$appsecret.'&code='.$code.'&grant_type=authorization_code';
$token = json_decode(file_get_contents($token_url));
if (isset($token->errcode)) {
    echo '<h1 id="错误">错误:</h1>'.$token->errcode;
    echo '<br><h2 id="错误信息">错误信息:</h2>'.$token->errmsg;
    exit;
}
 <br>
$access_token_url = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid='.$appid.'&grant_type=refresh_token&refresh_token='.$token->refresh_token;//转成对象
$access_token = json_decode(file_get_contents($access_token_url));
if (isset($access_token->errcode)) {
    echo '<h1 id="错误">错误:</h1>'.$access_token->errcode;
    echo '<br><h2 id="错误信息">错误信息:</h2>'.$access_token->errmsg;
    exit;
}
 <br>
 <br>
$user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token->access_token.'&openid='.$access_token->openid.'&lang=zh_CN';//转成对象
$user_info = json_decode(file_get_contents($user_info_url));
if (isset($user_info->errcode)) {
    echo '<h1 id="错误">错误:</h1>'.$user_info->errcode;
    echo '<br><h2 id="错误信息">错误信息:</h2>'.$user_info->errmsg;
    exit;
}
$rs =  json_decode(json_encode($user_info),true);//返回的json数组转换成array数组
//打印用户信息echo '<pre class="brush:php;toolbar:false">';
 <br>
print_r($rs);echo '
';
 <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 サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
セッションを保存するためにデータベースを使用することの利点は何ですか?セッションを保存するためにデータベースを使用することの利点は何ですか?Apr 24, 2025 am 12:16 AM

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでカスタムセッション処理をどのように実装しますか?PHPでカスタムセッション処理をどのように実装しますか?Apr 24, 2025 am 12:16 AM

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

セッションIDとは何ですか?セッションIDとは何ですか?Apr 24, 2025 am 12:13 AM

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

ステートレス環境(APIなど)でセッションをどのように処理しますか?ステートレス環境(APIなど)でセッションをどのように処理しますか?Apr 24, 2025 am 12:12 AM

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。

セッションに関連するクロスサイトスクリプティング(XSS)攻撃からどのように保護できますか?セッションに関連するクロスサイトスクリプティング(XSS)攻撃からどのように保護できますか?Apr 23, 2025 am 12:16 AM

セッション関連のXSS攻撃からアプリケーションを保護するには、次の測定が必要です。1。セッションCookieを保護するためにHTTPonlyとセキュアフラグを設定します。 2。すべてのユーザー入力のエクスポートコード。 3.コンテンツセキュリティポリシー(CSP)を実装して、スクリプトソースを制限します。これらのポリシーを通じて、セッション関連のXSS攻撃を効果的に保護し、ユーザーデータを確保できます。

PHPセッションのパフォーマンスを最適化するにはどうすればよいですか?PHPセッションのパフォーマンスを最適化するにはどうすればよいですか?Apr 23, 2025 am 12:13 AM

PHPセッションのパフォーマンスを最適化する方法は次のとおりです。1。遅延セッション開始、2。データベースを使用してセッションを保存します。これらの戦略は、高い並行性環境でのアプリケーションの効率を大幅に改善できます。

session.gc_maxlifetime構成設定とは何ですか?session.gc_maxlifetime構成設定とは何ですか?Apr 23, 2025 am 12:10 AM

thesession.gc_maxlifettinginttinginphpdethinesthelifsessessiondata、setinseconds.1)it'sconfiguredinphp.iniorviaini_set()。 2)AbalanceSneededToAvoidPerformanceIssues andunexpectedLogouts.3)php'sgarbagecollectionisisprobabilistic、影響を受けたBygc_probabi

PHPでセッション名をどのように構成しますか?PHPでセッション名をどのように構成しますか?Apr 23, 2025 am 12:08 AM

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境