最初のステップ:AppID AppSecretを取得します(説明はありません。WeChatパブリックプラットフォームにアクセスして適用してください)
ステップ2:QRコードを生成してスキャンし、コード
https://open.weixin.qq.com/connect/qrconnect?appid=AppID&redirect_uri=http://www.baidu.com&response_type=code&scope=snsapi_login&state=2014#wechat_redirectを取得します
ステップ3:コード
https://api.weixin.qq.com/sns/oauth2/access_token?appid=AppID&secret=AppSecret&code=00294221aeb06261d5966&grant_type=authorization_codeからaccess_tokenを取得します
ステップ4:インターフェイスの頻度には回数に制限があるため、必要に応じてaccess_tokenを更新します
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=AppID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
ステップ5:アバター、ニックネーム、性別、地域など、access_tokenとopenidを介して基本的なユーザー情報を取得します
https://api.weixin.qq.com/sns/userinfo?access_token=bezXEiiBSKSxW0eoblIewFNHqAG-PyW9OqI_L81E4ZCi2cFpfoJTyQc0xKlPPCtqK1kLJfiRbVrpoOVLw7fjpqh52
これは、インターフェイスのオンラインデバッグツールです。http://mp.weixin.qq.com/debug/
これはエラーコードの説明ドキュメントです。
http://mp.weixin.qq.com/wiki/17/fa4e1434e57290788bde25603fa2fcbd.html
さらに、特別な注意を払う必要があります。開発者が複数の公式アカウント間、または公式アカウントとモバイルアプリケーション間でユーザーアカウントを統合する必要がある場合は、WeChatオープンプラットフォーム(open.weixin.qq.com)にアクセスして公式アカウントをバインドします。UnionIDメカニズムを使用して、上記の要件を満たすことができます。ドキュメント:
http ://mp.weixin.qq.com/wiki/14/bb5031008f1494a59c6f71fa0f319c66.html
WeChatWebページでのサードパーティログインの原則
WeChatオープンプラットフォームとパブリックプラットフォームの違い
1.パブリックプラットフォームは、メディアやメディアなどの一般ユーザー向けであり、企業の公式WeChatパブリックアカウントオペレーターが使用します。もちろん、チームや会社にはコンテンツを開発する力があり、電話をかけることもできます。カスタムメニュー、自動応答、クエリ機能などのパブリックプラットフォームのインターフェイス。現在、ほとんどのWeChatアカウントは、認証に合格した後にこれを行っています。
mp.weixin.qq.com
2.オープンプラットフォームは、開発者およびサードパーティの独立したソフトウェア開発者向けです。開発プラットフォームの最大の開放性はWeChatログインだと思います。当時、Tencentは統合ログインを行うために多大な努力をしていなかったため、各Webサイトに一連のログインメカニズムが導入されました。幸いなことに、彼らは今状況を認識しています。開発者やソフトウェア開発者は、WeChatが提供するプラットフォームやインターフェースを介して企業に適したeコマースWebサイトを開発し、QRコードをスキャンしてゲームインターフェースに入り、商品の購入などに行くことができます。もちろん、その後のオープンプラットフォームは支払いインターフェースを開く必要があるため、Pockettongなどのソフトウェア開発ベンダーはWeChatストアなどのサービスやソフトウェアを大中規模の企業に提供できます。
open.weixin.qq.com
パブリックプラットフォームは、サービスアカウントサブスクリプションアカウントの管理および開発バックエンドです。
開発プラットフォームの人気のポイントは、携帯電話にインストールされているソフトウェアのコンテンツを友達の輪の中でワンクリックで共有できるようにすることです。
次のサードパーティのログインは、オープンプラットフォーム(open.weixin.qq.com)の機能に基づいています。
準備オーケー
WebサイトアプリケーションWeChatログインは、OAuth2.0プロトコル標準に基づくWeChatOAuth2.0認定ログインシステムです。
WeChatOAuth2を実行する前に。WeChatOAuth2.0認証ログインアクセスを実行する前に、WeChatオープンプラットフォームに開発者アカウントを登録し、承認されたWebサイトアプリケーションを取得し、対応するAppIDとAppSecretを取得し、WeChatログインを申請してレビューに合格します。 、アクセスプロセスを開始できます。
承認プロセスの説明
WeChat OAuth2.0承認済みログインにより、WeChatユーザーはWeChat IDを使用して、サードパーティのアプリケーションまたはWebサイトに安全にログインできます。WeChatユーザーが、サードパーティのWeChatOAuth2.0にアクセスできるサードパーティアプリケーションへのログインを承認された後ユーザーのインターフェース呼び出し資格情報(access_token)を取得できます)、access_tokenを介して、WeChatオープンプラットフォームの承認関係インターフェースを呼び出して、WeChatユーザーの基本的なオープン情報を取得し、ユーザーが基本的なオープン機能を実現できるようにします。
WeChat OAuth2.0認証ログインは現在、サーバー側でのアプリケーション認証に適したauthorization_codeモードをサポートしています。このモデルの全体的なプロセスは次のとおりです。
1.サードパーティがWeChat認証ログインリクエストを開始します。WeChatユーザーがサードパーティアプリケーションの認証を許可すると、WeChatはアプリケーションを起動するか、サードパーティのWebサイトにリダイレクトし、認証一時チケットコードパラメータを取得します。
2. codeパラメーターを介してAppIDとAppSecretを追加し、APIを介してaccess_tokenと交換します。
3. access_tokenを使用してインターフェイスを呼び出し、ユーザーの基本的なデータリソースを取得するか、ユーザーが基本的な操作を実行できるようにします。
access_tokenシーケンス図を取得します。
ステップ1:コードをリクエストする
サードパーティが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ではありません。
パラメータの説明
パラメータ | あなたはする必要がありますか | 説明 |
---|---|---|
appid | はい | アプリケーションの一意の識別子 |
リダイレクト | はい | リダイレクトアドレス、UrlEncodeが必要です |
response_type | はい | コードを入力してください |
範囲 | はい | コンマ(、)で区切られた複数のスコープを持つアプリケーション承認スコープ、Webアプリケーションは現在、snsapi_loginに入力するだけで済みます |
状態 | 番号 | リクエストとコールバックのステータスを維持し、承認リクエスト後にそのままサードパーティに戻すために使用されます。このパラメーターは、csrf攻撃(クロスサイトリクエストフォージェリ攻撃)を防ぐために使用できます。サードパーティがこのパラメーターを持参することをお勧めします。このパラメーターは、検証のために単純な乱数とセッションに設定できます。 |
説明を返す
ユーザーが認証を許可すると、コードと状態のパラメーターを使用してredirect_uriのURLにリダイレクトされます
redirect_uri?code=CODE&state=STATE
ユーザーが認証を禁止している場合、リダイレクト後にコードパラメーターは取得されず、状態パラメーターのみが取得されます
redirect_uri?state=STATE
リクエスト例
Yihaodianウェブサイトアプリケーションにログインします
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
WeChatユーザーがWeChatを使用してQRコードをスキャンし、ログインを確認すると、PCは次の場所にジャンプします。
https://passport.yhd.com/wechat/callback.do?code=CODE&state=3d6be0a4035d839573b04816624a415e
よりカスタマイズされたWebサイトのニーズを満たすために、コードを取得する2番目の方法も提供します。これは、WebサイトがWeChatログインQRコードを独自のページに埋め込むことをサポートし、ユーザーはWeChatを使用してコードをスキャンして承認します。次に、JSを介してコードをWebサイトに返します。
JS WeChatログインの主な目的:Webサイトは、ユーザーがWeChatドメインにジャンプしてログインしてから戻ることなく、Webサイトでログインを完了できることを望んでおり、WeChatログインの流暢さと成功率を向上させます。ウェブサイトに埋め込まれたQRコードを使用したWeChatログインJSの実装:
ステップ1:まず、ページに次のJSファイル(httpsをサポート)を導入します。
<script src = "http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"> </ script>
ステップ2:WeChatでログインする必要がある次のJSオブジェクトをインスタンス化します。
var obj = new WxLogin({
id: "login_container"、
appid: ""、
スコープ: ""、
redirect_uri: ""、
状態: ""、
スタイル: ""、
href: ""
});
パラメータの説明
パラメータ | あなたはする必要がありますか | 説明 |
---|---|---|
id | はい | サードパーティのページに表示されるQRコードのコンテナID |
appid | はい | アプリケーションがWeChatオープンプラットフォームでレビューおよび承認された後に取得される、アプリケーションの一意のID |
範囲 | はい | コンマ(、)で区切られた複数のスコープを持つアプリケーション承認スコープ、Webアプリケーションは現在、snsapi_loginに入力するだけで済みます |
リダイレクト | はい | リダイレクトアドレス、UrlEncodeが必要です |
状態 | 番号 | リクエストとコールバックのステータスを維持し、承認リクエスト後にそのままサードパーティに戻すために使用されます。このパラメーターは、csrf攻撃(クロスサイトリクエストフォージェリ攻撃)を防ぐために使用できます。サードパーティがこのパラメーターを持参することをお勧めします。このパラメーターは、検証のために単純な乱数とセッションに設定できます。 |
スタイル | 番号 | オプションで「黒」、「白」を指定します。デフォルトは黒のテキスト説明です。詳細については、ドキュメントの下部にあるFAQを参照してください |
href | 番号 | カスタムスタイルのリンク、サードパーティは実際のニーズに応じてデフォルトのスタイルを上書きできます。詳細については、ドキュメントの下部にあるFAQを参照してください |
ステップ2:コードを介してaccess_tokenを取得する
コードを介してaccess_tokenを取得する
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
パラメータの説明
パラメータ | あなたはする必要がありますか | 説明 |
---|---|---|
appid | はい | アプリケーションがWeChatオープンプラットフォームでレビューおよび承認された後に取得される、アプリケーションの一意のID |
秘密の | はい | アプリシークレットAppSecret、WeChatオープンプラットフォームでのレビューと承認のためにアプリケーションを送信した後に取得 |
コード | はい | 最初のステップで取得したコードパラメータを入力します |
grant_type | はい | 承認認証コード |
説明を返す
正しい返品:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE","unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
パラメータ | 説明 |
---|---|
アクセストークン | インターフェイス呼び出しの資格情報 |
expires_in | Access_tokenインターフェイス呼び出し資格情報のタイムアウト時間、単位(秒) |
refresh_token | ユーザー更新access_token |
openid | 許可されたユーザーの一意のID |
範囲 | カンマ(、)で区切られたユーザー認証の範囲 |
組合 | このフィールドは、ユーザーが公式アカウントをWeChatオープンプラットフォームアカウントにバインドした後にのみ表示されます。 |
エラーリターンの例:
{"errcode":40029,"errmsg":"invalid code"}
access_tokenの有効期間を更新します
access_tokenは、承認関係インターフェースを呼び出すための呼び出し資格情報です。access_tokenの有効期間は短いため(現在2時間)、access_tokenがタイムアウトすると、refresh_tokenを使用して更新できます。access_tokenの更新結果には次の2種類があります。
-
1. access_tokenがタイムアウトした場合、refresh_tokenは新しいタイムアウト期間を持つ新しい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
パラメータの説明
パラメータ | あなたはする必要がありますか | 説明 |
---|---|---|
appid | はい | アプリケーションの一意の識別子 |
grant_type | はい | 填refresh_token |
refresh_token | はい | access_tokenから取得したrefresh_tokenパラメーターを入力します |
説明を返す
正しい返品:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}
パラメータ | 説明 |
---|---|
アクセストークン | インターフェイス呼び出しの資格情報 |
expires_in | Access_tokenインターフェイス呼び出し資格情報のタイムアウト時間、単位(秒) |
refresh_token | ユーザー更新access_token |
openid | 許可されたユーザーの一意のID |
範囲 | カンマ(、)で区切られたユーザー認証の範囲 |
エラーリターンの例:
{"errcode":40030,"errmsg":"invalid refresh_token"}
注意:
1、Appsecret 是应用接口使用密钥,泄漏后将可能导致应用数据泄漏、应用的用户数据泄漏等高风险后果;存储在客户端,极有可能被恶意窃取(如反编译获取Appsecret);
2、access_token 为用户授权第三方应用发起接口调用的凭证(相当于用户登录态),存储在客户端,可能出现恶意获取access_token 后导致的用户数据泄漏、用户微信相关接口功能被恶意发起等行为;
3、refresh_token 为用户授权第三方应用的长效凭证,仅用于刷新access_token,但泄漏后相当于access_token 泄漏,风险同上。
建议将secret、用户数据(如access_token)放在App云端服务器,由云端中转接口调用请求。
第三步:通过access_token调用接口
获取access_token后,进行接口调用,有以下前提:
-
1. access_token有效且未超时;
-
2. 微信用户已授权给第三方应用帐号相应接口作用域(scope)。
对于接口作用域(scope),能调用的接口有以下:
授权作用域(scope) | 接口 | 接口说明 |
---|---|---|
snsapi_base | /sns/oauth2/access_token | 通过code换取access_token、refresh_token和已授权scope |
/sns/oauth2/refresh_token | 刷新或续期access_token使用 | |
/sns/auth | 检查access_token有效性 | |
snsapi_userinfo | /sns/userinfo | 获取用户个人信息 |
其中snsapi_base属于基础接口,若应用已拥有其它scope权限,则默认拥有snsapi_base的权限。使用snsapi_base可以让移动端网页授权绕过跳转授权登录页请求用户授权的动作,直接跳转第三方网页带上授权临时票据(code),但会使得用户已授权作用域(scope)仅为snsapi_base,从而导致无法获取到需要用户授权才允许获得的数据和基础功能。
接口调用方法可查阅《微信授权关系接口调用指南》
F.A.Q
1. 什么是授权临时票据(code)?
答:第三方通过code进行获取access_token的时候需要用到,code的超时时间为10分钟,一个code只能成功换取一次access_token即失效。code的临时性和一次保障了微信授权登录的安全性。第三方可通过使用https和state参数,进一步加强自身授权登录的安全性。
2. 什么是授权作用域(scope)?
答:授权作用域(scope)代表用户授权给第三方的接口权限,第三方应用需要向微信开放平台申请使用相应scope的权限后,使用文档所述方式让用户进行授权,经过用户授权,获取到相应access_token后方可对接口进行调用。
3. 网站内嵌二维码微信登录JS代码中style字段作用?
答:第三方页面颜色风格可能为浅色调或者深色调,若第三方页面为浅色背景,style字段应提供"black"值(或者不提供,black为默认值),则对应的微信登录文字样式为黑色。相关效果如下:
若提供"white"值,则对应的文字描述将显示为白色,适合深色背景。相关效果如下:
4.网站内嵌二维码微信登录JS代码中href字段作用?
答:如果第三方觉得微信团队提供的默认样式与自己的页面样式不匹配,可以自己提供样式文件来覆盖默认样式。举个例子,如第三方觉得默认二维码过大,可以提供相关css样式文件,并把链接地址填入href字段
.impowerBox .qrcode {width: 200px;}
.impowerBox .title {display: none;}
.impowerBox .info {width: 200px;}
.status_icon {display:none}
.impowerBox .status {text-align: center;}
相关效果如下:
通过code获取access_token
接口说明
通过code获取access_token的接口。
请求说明
http请求方式: GET
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
appid | 是 | 应用唯一标识,在微信开放平台提交应用审核通过后获得 |
secret | 是 | 应用密钥AppSecret,在微信开放平台提交应用审核通过后获得 |
code | 是 | 填写第一步获取的code参数 |
grant_type | 是 | 填authorization_code |
返回说明
正确的返回:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}
参数 | 说明 |
---|---|
access_token | 接口调用凭证 |
expires_in | access_token接口调用凭证超时时间,单位(秒) |
refresh_token | 用户刷新access_token |
openid | 授权用户唯一标识 |
scope | 用户授权的作用域,使用逗号(,)分隔 |
错误返回样例:
{
"errcode":40029,"errmsg":"invalid code"
}
刷新或续期access_token使用
接口说明
access_token是调用授权关系接口的调用凭证,由于access_token有效期(目前为2个小时)较短,当access_token超时后,可以使用refresh_token进行刷新,access_token刷新结果有两种:
-
1. 若access_token已超时,那么进行refresh_token会获取一个新的access_token,新的超时时间;
-
2.若access_token未超时,那么进行refresh_token不会改变access_token,但超时时间会刷新,相当于续期access_token。
refresh_token拥有较长的有效期(30天),当refresh_token失效的后,需要用户重新授权。
请求方法
使用/sns/oauth2/access_token接口获取到的refresh_token进行以下接口调用:
http请求方式: GET
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
appid | 是 | 应用唯一标识 |
grant_type | 是 | 填refresh_token |
refresh_token | 是 | 填写通过access_token获取到的refresh_token参数 |
返回说明
正确的返回:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}
参数 | 说明 |
---|---|
access_token | 接口调用凭证 |
expires_in | access_token接口调用凭证超时时间,单位(秒) |
refresh_token | 用户刷新access_token |
openid | 授权用户唯一标识 |
scope | 用户授权的作用域,使用逗号(,)分隔 |
错误返回样例:
{
"errcode":40030,"errmsg":"invalid refresh_token"
}
接口说明
检验授权凭证(access_token)是否有效
请求说明
http请求方式: GET
https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
access_token | 是 | 调用接口凭证 |
openid | 是 | 普通用户标识,对该公众帐号唯一 |
返回说明
正确的Json返回结果:
{
"errcode":0,"errmsg":"ok"
}
错误的Json返回示例:
{
"errcode":40003,"errmsg":"invalid openid"
}
获取用户个人信息(UnionID机制)
接口说明
此接口用于获取用户个人信息。开发者可通过OpenID来获取用户基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用和公众帐号,
可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。
请求说明
http请求方式: GET
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
access_token | 是 | 调用凭证 |
openid | 是 | 普通用户的标识,对当前开发者帐号唯一 |
返回说明
正确的Json返回结果:
{
"openid":"OPENID",
"nickname":"NICKNAME",
"sex":1,
"province":"PROVINCE",
"city":"CITY",
"country":"COUNTRY",
"headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
"privilege":[
"PRIVILEGE1",
"PRIVILEGE2"
],
"unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
参数 | 说明 |
---|---|
openid | 普通用户的标识,对当前开发者帐号唯一 |
nickname | 普通用户昵称 |
sex | 普通用户性别,1为男性,2为女性 |
province | 普通用户个人资料填写的省份 |
city | 普通用户个人资料填写的城市 |
country | 国家,如中国为CN |
headimgurl | 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空 |
privilege | 用户特权信息,json数组,如微信沃卡用户为(chinaunicom) |
unionid | 用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的。 |
错误的Json返回示例:
{
"errcode":40003,"errmsg":"invalid openid"
}
调用频率限制
接口名 | 频率限制 |
---|---|
通过code换取access_token | 1万/分钟 |
刷新access_token | 5万/分钟 |
获取用户基本信息 | 5万/分钟 |