위 챗 애플 릿 권한 부여 사용자 상세 정보 openid 의 인 스 턴 스 상세 설명

7082 단어 애플 릿openid
애플 릿 에서 사용자 의 프로필 닉네임 openid 를 가 져 옵 니 다.

첫 번 째 는 wx.getUserInfo 를 사용 하여 위 챗 프로필 사진,닉네임 을 직접 가 져 옵 니 다.

wx.getUserInfo({
   success: function (res) {
   that.setData({
     nickName: res.userInfo.nickName,
     avatarUrl: res.userInfo.avatarUrl,
   })
   },
})
두 번 째
저 희 는 애플 릿 wx.login API 를 사용 하여 로그 인 할 때 wx.getUser Info 를 직접 사용 하면 더 많은 정 보 를 얻 을 수 없습니다.예 를 들 어 위 챗 사용자 의 openid.
공식 알림 에 따 르 면 가 져 온 code 를 보 내 위 챗 의 백 엔 드 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 프레임 워 크 입 니 다.laravel 5.4 버 전 입 니 다.
공식 문서:
https://mp.weixin.qq.com/debug/wxadoc/dev/api/signature.html
위 챗 공식 은 다양한 프로 그래 밍 언어의 예제 코드 를 제공 합 니 다(다운로드 클릭).모든 언어 유형의 인터페이스 이름 이 일치 합 니 다.호출 방식 은 예 시 를 참조 할 수 있다.
다운로드 후 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 . "
"); } else { return false; } } }
공식 문서 의 로그 인 절차 도,전체 로그 인 절 차 는 기본적으로 다음 그림 과 같다.

궁금 한 점 이 있 으 시 면 메 시 지 를 남기 거나 본 사이트 의 커 뮤 니 티 에 가서 토론 을 교류 하 세 요.읽 어 주 셔 서 감사합니다. 도움 이 되 셨 으 면 좋 겠 습 니 다.본 사이트 에 대한 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기