この記事は主に、ユーザーの詳細 openid を取得するための WeChat アプレット認証の詳細な例についての関連情報を紹介します。この記事が、お困りの皆様の参考になれば幸いです。
アプレットはユーザーのアバター、ニックネーム、openidなどを取得します
最初の方法は、wx.getUserInfoを使用してWeChatアバターとニックネームを直接取得することです
wx.getUserInfo({ success: function (res) { that.setData({ nickName: res.userInfo.nickName, avatarUrl: res.userInfo.avatarUrl, }) }, })
2番目の方法
小さなプログラムを使用しています。 wx.login APIプログラムを使用してログインする場合、wx.getUserInfoを直接使用してWeChatユーザーのopenidなどの詳細情報を取得することはできません。
公式リマインダー、取得する前に、取得したコードを送信して WeChat のバックエンド API をリクエストし、ユーザーの復号化などの操作を実行する必要があります
ドキュメントによると、get リクエストを行うだけで済みます。次のアドレスに:
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code appid和secret在微信小程序后台可以看到,js_code为使用wx.login登录时获取到的code参数数据,grant_type这个不用改动。
js ファイル
var openId = (wx.getStorageSync('openId')) if (openId) { wx.getUserInfo({ success: function (res) { that.setData({ nickName: res.userInfo.nickName, avatarUrl: res.userInfo.avatarUrl, }) }, fail: function () { // fail console.log("获取失败!") }, complete: function () { // complete console.log("获取用户信息完成!") } }) } else { wx.login({ success: function (res) { console.log(res.code) if (res.code) { wx.getUserInfo({ withCredentials: true, success: function (res_user) { wx.request({ //后台接口地址 url: 'https://....com/wx/login', data: { code: res.code, encryptedData: res_user.encryptedData, iv: res_user.iv }, method: 'GET', header: { 'content-type': 'application/json' }, success: function (res) { // this.globalData.userInfo = JSON.parse(res.data); that.setData({ nickName: res.data.nickName, avatarUrl: res.data.avatarUrl, }) wx.setStorageSync('openId', res.data.openId); } }) }, fail: function () { wx.showModal({ title: '警告通知', content: '您点击了拒绝授权,将无法正常显示个人信息,点击确定重新获取授权。', success: function (res) { if (res.confirm) { wx.openSetting({ success: (res) => { if (res.authSetting["scope.userInfo"]) {////如果用户重新同意了授权登录 wx.login({ success: function (res_login) { if (res_login.code) { wx.getUserInfo({ withCredentials: true, success: function (res_user) { wx.request({ url: 'https://....com/wx/login', data: { code: res_login.code, encryptedData: res_user.encryptedData, iv: res_user.iv }, method: 'GET', header: { 'content-type': 'application/json' }, success: function (res) { that.setData({ nickName: res.data.nickName, avatarUrl: res.data.avatarUrl, }) wx.setStorageSync('openId', res.data.openId); } }) } }) } } }); } }, fail: function (res) { } }) } } }) }, complete: function (res) { } }) } } }) } }, globalData: { userInfo: null }
バックグラウンドは PHP、フレームワークは laravel5.4 バージョンです
公式ドキュメント:
https://mp.weixin.qq.com/debug/wxadoc/ dev/api/signature.html
WeChat 公式では、複数のプログラミング言語のサンプルコードが提供されています (クリックしてダウンロード)。インターフェース名は言語タイプごとに一貫しています。呼び出しメソッドは例を参照できます。
ダウンロード後、php ファイルに導入します:
<?php namespace App\Http\Controllers\Admin; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\Models\User; use App\Models\Wechatuser; include_once app_path('/Http/Controllers/Admin/PHP/wxBizDataCrypt.php'); // 获取微信用户信息 public function getWxLogin(Request $request) { // require_once ROOTPATH . "./PHP/wxBizDataCrypt.php"; $code = $request->get('code'); $encryptedData = $request->get('encryptedData'); $iv = $request->get('iv'); $appid = "***" ; $secret = "***"; $URL = "https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&js_code=$code&grant_type=authorization_code"; $apiData=file_get_contents($URL); // var_dump($code,'wwwwwwww',$apiData['errscode']); // $ch = curl_init(); // curl_setopt($ch, CURLOPT_URL, $URL); // curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // curl_setopt($ch, CURLOPT_HEADER, 0); // $output = curl_exec($ch); // curl_close($ch) if(!isset($apiData['errcode'])){ $sessionKey = json_decode($apiData)->session_key; $userifo = new \WXBizDataCrypt($appid, $sessionKey); $errCode = $userifo->decryptData($encryptedData, $iv, $data ); if ($errCode == 0) { return ($data . "\n"); } else { return false; } } }
公式ドキュメントのログイン フロー チャート全体は基本的に次のとおりです:
関連する推奨事項:
Thinkphp5 WeChat アプレットの方法ユーザー情報を取得するインターフェース
ユーザー情報を取得するWeChatアプレットのインスタンスメソッド
以上がユーザーの詳細を取得するための WeChat アプレット認証の例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。