この記事では、PHP を使用した WeChat Web ページのログイン認証開発の実装を主に紹介します。必要な友人はそれを参照できるようにしました。
WeChat オープン プラットフォームとパブリック プラットフォームの違い。
1. パブリック プラットフォームは、セルフ メディアやメディアなどの一般ユーザー向けであり、企業の公式 WeChat パブリック アカウントの運営者によって使用されます。もちろん、チームや会社にコンテンツを開発する力がある場合は、カスタマイズメニュー、自動応答、クエリ機能などのパブリックプラットフォームのインターフェースを呼び出すこともできます。現在、ほとんどの WeChat は認証に合格した後にこれを行っています。 mp.weixin.qq.com2. オープン プラットフォームは、開発者およびサードパーティの独立系ソフトウェア開発者向けです。開発プラットフォームの最大のオープン性は WeChat ログインだと思います。 Tencent は当時、統合ログインの実装に大きな努力をしていなかったので、現在は各 Web サイトがログイン メカニズムを開発する必要があります。幸いなことに、彼らは今では状況を理解しています。開発者またはソフトウェア開発者は、WeChat が提供するプラットフォームとインターフェイスを通じて、企業に適した電子商取引 Web サイトを開発し、QR コードをスキャンしてゲーム インターフェイスに入り、商品を購入できます。もちろん、その後のオープンプラットフォームでは決済インターフェースがオープンになるため、Pocket Tongなどのソフトウェア開発者は大企業や中小企業向けにWeChatストアなどのサービスやソフトウェアを提供できるようになる。
2. コード パラメータを通じて AppID と AppSecret を追加し、API を通じて access_token を交換する 3. ユーザーの基本的なデータ リソースを取得するか、ユーザーが基本的な実装を行うのを支援します。オペレーション。 access_token シーケンス図の取得:
https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
パラメータ |
は必要ですか? | アプリケーションの一意の識別子|
は |
リダイレクトアドレスとニーズですUrlEncode |
response_type |
は |
コードを入力してください |
scope |
は |
アプリケーションの認可スコープが複数ある場合は分けてください。 Web アプリケーションの場合、現時点では snsapi_login |
state |
No のみを入力する必要があります。 |
リクエストとコールバックのステータスを維持し、リクエストを承認した後にそれらをそのままの状態でサードパーティに戻すために使用されます。このパラメータは、CSRF 攻撃 (クロスサイト リクエスト フォージェリ攻撃) を防ぐために使用できます。このパラメータは、検証用に単純な乱数とセッションを設定することが推奨されます |
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=
&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 をサポート):varobj = new WxLogin({ id:"login_container", appid: "", scope: "", redirect_uri: "", state: "", style: "", href: "" });
| 必要ですか||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
はい | サードパーティのページに表示される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 パラメータの説明
错误返回样例:
返品手順正しい返品:
错误返回样例:
このうち、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 フィールドに入力できます
関連する効果は次のとおりです:
ユーザーの個人情報を取得する (UnionID メカニズム)インターフェースの説明このインターフェースは、ユーザーの個人情報を取得するために使用されます。開発者は、OpenID を通じて基本的なユーザー情報を取得できます。特に重要なのは、開発者が複数のモバイル アプリケーション、Web サイト アプリケーション、パブリック アカウントを持っている場合、同じ WeChat 内のモバイル アプリケーションである限り、ユーザーの基本情報の UnionID を取得することでユーザーを一意に区別できることです。オープン プラットフォーム アカウント、Web サイト アプリケーション、パブリック アカウントでは、ユーザーの UnionID は一意です。言い換えれば、同じユーザーの場合、同じ WeChat オープン プラットフォーム上の異なるアプリケーションの UnionID は同じです。 リクエストの説明httpリクエストメソッド: GET https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID パラメータの説明
返却手順正しい Json 返却結果:
错误的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"; ログイン後にコピー
验证处理如下: <?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>错误:</h1>'.$token->errcode; ログイン後にコピー echo '<br/><h2>错误信息:</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>错误:</h1>'.$access_token->errcode; ログイン後にコピー echo '<br/><h2>错误信息:</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>错误:</h1>'.$user_info->errcode; ログイン後にコピー echo '<br/><h2>错误信息:</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 を交換します ページは、URL の redirect_uri/?code=CODE&state=STATE に戻ります。 codeWeb ページ認可の access_token のコードが交換されます。Web ページ認可のスコープが snsapi_base の場合、このステップでは、Web ページ認可 access_token を取得すると同時に、snsapi_base スタイルの Web ページ認可プロセスも終了します。 3: 個人情報は必須です。バックグラウンドはコードを通じて値を取得し、操作のためにフロントエンドに返します関連する推奨事項: WeChat テンプレート メッセージ プッシュを実装するための php 以上がPHP は WeChat Web ページのログイン認証開発を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。 このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
URL パラメータから取得した PHP 配列が期待どおりに動作しない
カテゴリ ID を含む URL パラメータがあり、それを次のような配列として扱いたいと考えています: http://example.com?cat[]=3,9,13 PHP では、...
から 2024-04-06 22:09:02
0
1
1428
戻り値の変数の形式は何ですか?
私はphpの初心者です。コードを見つけました: if($x<time()){return[false,'error'];} ロジックや変数は重要ではありませんが、[false...
から 2024-04-06 21:55:20
0
1
778
ループするために MySQL の結果を ID ごとにグループ化する
mysqlにフライトデータを含むテーブルがあります。 codeigniter3Journey_idair_idFlightDurationout_or_inflightdurati...
から 2024-04-06 17:27:56
0
1
406
関連トピック
詳細>
|