記事ディレクトリ
プロセス
例証する
- wx.login()を呼び出して、一時的な、それを開発者サーバーに送り返します。
- ユーザーの一意の識別子 OpenID 、WeChat オープン プラットフォーム アカウント(現在のミニ プログラムが WeChat オープン プラットフォーム アカウントにバインドされている場合) でのユーザーの一意の識別子 UnionID 、およびセッションキー session_key と引き換えに、 auth.code2Sessionインターフェイスを呼び出します。
その後、開発者サーバーは、ユーザー ID に従ってカスタム ログイン ステータスを生成できます。このユーザー ID は、後続のビジネス ロジックでフロントエンドとバックエンドの対話中にユーザーの ID を識別するために使用されます。
予防
- セッション キー session_key は、ユーザー データに暗号署名するためのキーです。アプリケーション自体のデータを保護するために、開発者サーバーはセッション キーをアプレットに配信したり、このキーを外部に提供したりしないでください。
- 一時的なログイン資格情報コードは 1 回だけ使用できます
wx.login()
インターフェイスを呼び出して、ログイン資格情報 (コード) を取得します。資格情報を使用して、現在のミニ プログラムでのユーザーの一意の識別子 (openid)、WeChat オープン プラットフォーム アカウントの一意の識別子 (現在のミニ プログラムが WeChat オープン プラットフォームにバインドされている場合は unionid) を含む、ユーザーのログイン ステータス情報を交換します。アカウント) とこのログイン セッション キー (session_key) など。ユーザー データの暗号化と復号化の通信は、セッション キーに依存して完了する必要があります。
パラメータ
属性 | タイプ | デフォルト | 必要 | 例証する |
---|---|---|---|---|
タイムアウト | 番号 | いいえ | タイムアウト時間、単位 ms タイムアウト時間、単位 ms | |
成功 | 関数 | いいえ | インターフェイス呼び出しを成功させるためのコールバック関数 | |
失敗 | 関数 | いいえ | インターフェイス呼び出し失敗のコールバック関数 | |
完了 | 関数 | いいえ | インターフェイス呼び出しの終了のコールバック関数 (呼び出しは成功または失敗のいずれかで実行されます) |
成功コールバック関数
属性 | タイプ | 例証する |
---|---|---|
コード | 弦 | ユーザーのログイン資格情報 ( 5 分間有効)。開発者は、開発者サーバーのバックグラウンドで auth.code2Session を呼び出し、コードを使用して openid、unionid、session_key およびその他の情報を交換する必要があります。 |
wx.login({
success (res) {
if (res.code) {
//发起网络请求
wx.request({
url: 'https://example.com/onLogin',//开发的后台地址,传输code获取openid登录信息
data: {
code: res.code
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
auth.code2Session
ログイン資格証明の検証。wx.loginインターフェイスを介して一時的なログイン資格情報コードを取得し、開発者サーバーに渡してこのインターフェイスを呼び出し、ログイン プロセスを完了します。
リクエストアドレス
GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
リクエストパラメータ
属性 | タイプ | デフォルト | 必要 | 例証する |
---|---|---|---|---|
アピッド | 弦 | はい | ミニプログラム appId | |
ひみつ | 弦 | はい | アプレット appSecret | |
js_code | 弦 | はい | ログイン時に取得したコード | |
grant_type | 弦 | はい | 承認タイプ。ここに authorization_code を入力してください |
アプレットの appId とアプレットの appSecret は、開発管理で見つけることができます
戻り値
属性 | タイプ | 例証する |
---|---|---|
openid | 弦 | 一意のユーザー ID |
session_key | 弦 | セッションキー |
組合 | 弦 | オープン プラットフォーム上のユーザーの一意の識別子。現在のミニ プログラムが WeChat オープン プラットフォーム アカウントにバインドされている場合は、返されます。 |
エラーコード | 番号 | エラーコード |
エラーメッセージ | 弦 | エラーメッセージ |
errcode の正当な値
価値 | 例証する |
---|---|
-1 | システムがビジーです。しばらくしてからもう一度お試しください |
0 | 成功したリクエスト |
40029 | コード無効 |
45011 | 頻度制限、1 ユーザーあたり 1 分あたり 100 回 |
40226 | リスクの高いユーザーの場合、アプレットのログイン傍受。 |
戦闘
フロントエンドコード
WeChat アプレットのフロントエンドがコードを取得し、バックグラウンドに送信します。
wx.login({
success (res) {
if (res.code) {
//发起网络请求
wx.request({
url: 'https://example.com/onLogin',//开发的后台地址,传输code获取openid登录信息
data: {
code: res.code
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
バックエンド コード
バックグラウンドがコードを受け取り、コードを通じてユーザーの openid を取得します。
バックグラウンドがコードを受け取った後、WeChat バックグラウンド サーバーにアクセスしてユーザーの openid を取得するための http 要求を作成します. すべてが正常であれば、アプレットに対応するユーザーの openid とユーザーの個人的な Access_token を取得します.
使用される 2 つの依存関係:
<!-- json数据格式依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.79</version>
</dependency>
<!-- http请求工具包依赖 -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
/**
* 获取微信的openid和session_key
* @param code wx.login的code
* @return 返回JSON:openid和session_key
*/
public static JSONObject gainWxLogin(String code){
String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + AppID + "&secret=" + AppSecret + "&js_code=" + code + "&grant_type=authorization_code";
JSONObject jsonObject = null;
try {
HttpClient client = HttpClientBuilder.create().build();//构建一个Client
HttpGet get = new HttpGet(url.toString()); //构建一个GET请求
HttpResponse response = client.execute(get);//提交GET请求
HttpEntity result = response.getEntity();//拿到返回的HttpResponse的"实体"
String content = EntityUtils.toString(result);
System.out.println(content);//打印返回的信息
jsonObject = JSONObject.parseObject(content);//把信息封装为json
} catch (Exception e) {
e.printStackTrace();
}
return jsonObject;
}
バックエンドが取得する情報:
このようにして WeChat の openid が取得されます. 次のステップは、openid がデータベースに既に存在するかどうかを確認することです. 存在する場合はログインします. 存在しない場合は登録します.