ホームページ  >  記事  >  ウェブフロントエンド  >  ユーザーの詳細を取得するための WeChat アプレット認証の例

ユーザーの詳細を取得するための WeChat アプレット認証の例

小云云
小云云オリジナル
2018-05-15 11:09:1117418ブラウズ

この記事は主に、ユーザーの詳細 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(&#39;/Http/Controllers/Admin/PHP/wxBizDataCrypt.php&#39;);


 // 获取微信用户信息
  public function getWxLogin(Request $request)
  {
   // require_once ROOTPATH . "./PHP/wxBizDataCrypt.php";

    $code  =  $request->get(&#39;code&#39;);
    $encryptedData  =  $request->get(&#39;encryptedData&#39;);
    $iv  =  $request->get(&#39;iv&#39;);
    $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,&#39;wwwwwwww&#39;,$apiData[&#39;errscode&#39;]);
    //   $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[&#39;errcode&#39;])){
      $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アプレットの実装方法

以上がユーザーの詳細を取得するための WeChat アプレット認証の例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。