Maison >développement back-end >tutoriel php >Comment obtenir l'interface d'informations utilisateur dans l'applet Thinkphp5 WeChat

Comment obtenir l'interface d'informations utilisateur dans l'applet Thinkphp5 WeChat

小云云
小云云original
2018-01-31 13:34:482376parcourir

Cet article présente principalement des informations pertinentes sur l'explication détaillée d'exemples de l'interface d'informations utilisateur de l'applet Thinkphp5 WeChat. J'espère que cet article pourra aider tout le monde. Les amis dans le besoin pourront s'y référer.

Exemple détaillé de l'applet Thinkphp5 WeChat obtenant l'interface d'informations utilisateur

Téléchargez d'abord l'exemple de code sur le site officiel, choisissez PHP,

Il y a un trou ici

Le fichier php officiel est codé en UTF-8+, vous devez donc changer le fichier en UTF-8

puis ajouter dans le dossier d'extension Thinkphp5 Créez l'espace de noms Wxxcx et placez-y plusieurs fichiers de classe officiels (notez ici que le nom du dossier, le nom de l'espace de noms, le nom de la classe et la casse doivent être les mêmes. Le nom du fichier officiel et le nom de la classe ont une casse différente)

Ensuite, il y a votre propre code d'interface thinkphp :


<?php 
/** 
 * Created by PhpStorm. 
 * User: leeoo 
 * Date: 2017/9/14 0014 
 * Time: 10:43 
 */ 
 
namespace app\api\controller\v1; 
 
 
use think\Loader; 
use think\Request; 
use Workerman\Protocols\Http; 
use Wxxcx\WXBizDataCrypt; 
use first\second\Foo; 
 
class Index 
{ 
  public function index($id) 
  { 
 
    return json([&#39;msg&#39; => $id]); 
  } 
 
  public function dologin() 
  { 
    $code = Request::instance()->param(&#39;code&#39;); 
    $encryptedData = Request::instance()->param(&#39;encryptedData&#39;); 
    $iv = Request::instance()->param(&#39;iv&#39;); 
 
    $appid = "你的小程序appid"; 
    $secret = "你的小程序secret"; 
    //appid={$appid}&secret={$secret}&js_code={$code}&grant_type=authorization_code 
    $param = array( 
      &#39;appid&#39; => $appid, 
      &#39;secret&#39; => $secret, 
      &#39;js_code&#39; => $code, 
      &#39;grant_type&#39; => &#39;authorization_code&#39; 
    ); 
  //http函数为封装的请求函数 
    $res = http("https://api.weixin.qq.com/sns/jscode2session", $param, &#39;post&#39;); 
 
    $arr = json_decode($res, true); 
 
    $result = $this->wxdecode($encryptedData, $iv, $arr[&#39;session_key&#39;], $appid); 
 
    //return json($result); 
    if ($result) { 
      return json([&#39;code&#39; => 1]); 
    } else { 
      return json([&#39;code&#39; => -1]); 
    } 
 
  } 
 
  public function wxdecode($encryptedData, $iv, $sessionKey, $appid) 
  { 
    //Loader::import(&#39;Wxxcx\WXBizDataCrypt&#39;, EXTEND_PATH); 
    $pc = new WXBizDataCrypt($appid, $sessionKey); 
    $data = null; 
    $errCode = $pc->decryptData($encryptedData, $iv, $data); 
    //echo $data; 
    //return json([&#39;data&#39;=>$data]); 
    $data = json_decode($data); 
 
    if ($errCode == 0) { 
      //print($data . "\n"); 
      //dump($data); 
      return $data; 
    } else { 
      //print($errCode . "\n"); 
      //dump($errCode); 
      return $errCode; 
    } 
 
  } 
}

Fonction wrapper http :


/** 
 * 发送HTTP请求方法 
 * @param string $url  请求URL 
 * @param array $params 请求参数 
 * @param string $method 请求方法GET/POST 
 * @return array $data  响应数据 
 */ 
function http($url, $params, $method = &#39;GET&#39;, $header = array(), $multi = false){ 
  $opts = array( 
    CURLOPT_TIMEOUT    => 30, 
    CURLOPT_RETURNTRANSFER => 1, 
    CURLOPT_SSL_VERIFYPEER => false, 
    CURLOPT_SSL_VERIFYHOST => false, 
    CURLOPT_HTTPHEADER   => $header 
  ); 
  /* 根据请求类型设置特定参数 */ 
  switch(strtoupper($method)){ 
    case &#39;GET&#39;: 
      $opts[CURLOPT_URL] = $url . &#39;?&#39; . http_build_query($params); 
      break; 
    case &#39;POST&#39;: 
      //判断是否传输文件 
      $params = $multi ? $params : http_build_query($params); 
      $opts[CURLOPT_URL] = $url; 
      $opts[CURLOPT_POST] = 1; 
      $opts[CURLOPT_POSTFIELDS] = $params; 
      break; 
    default: 
      throw new Exception(&#39;不支持的请求方式!&#39;); 
  } 
  /* 初始化并执行curl请求 */ 
  $ch = curl_init(); 
  curl_setopt_array($ch, $opts); 
  $data = curl_exec($ch); 
  $error = curl_error($ch); 
  curl_close($ch); 
  if($error) throw new Exception(&#39;请求发生错误:&#39; . $error); 
  return $data; 
}

Puis le code du mini programme :


// 获取用户信息 
  wx.getSetting({ 
   success: res => { 
    if (res.authSetting[&#39;scope.userInfo&#39;]) { 
     // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框 
     wx.getUserInfo({ 
      success: res => { 
       console.log(res); 
       var encryptedData = res.encryptedData 
       var iv = res.iv 
       wx.request({ 
        url: "https://你的服务器地址/dologin",//dologin是访问后端的方法 
        method: "post", 
        data: { 
         code: code, 
         encryptedData: encryptedData, 
         iv: iv 
        }, 
        success: function (ret) { 
         console.log(ret); 
        } 
       }) 
        
        
       // 可以将 res 发送给后台解码出 unionId 
       this.globalData.userInfo = res.userInfo 
 
       // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回 
       // 所以此处加入 callback 以防止这种情况 
       if (this.userInfoReadyCallback) { 
        this.userInfoReadyCallback(res) 
       } 
      } 
     }) 
    } 
   } 
  }) 
 },

S'il y a une erreur, déboguez recherchez-le vous-même et voyez où il se trouve. Il y a un problème avec la variable. Trouvez la raison

Recommandations associées :

Connexion autorisée à WeChat et obtenez l'interface d'informations utilisateur<.>

Interface d'informations utilisateur php WeChat

Interface d'informations

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn