Eine Fallstudie darüber, wie Thinkphp5 die Benutzerinformationsschnittstelle des WeChat-Applets implementiert

黄舟
Freigeben: 2023-03-16 12:02:01
Original
4072 Leute haben es durchsucht

In diesem Artikel werden hauptsächlich relevante Informationen zur detaillierten Erläuterung der Benutzeroberfläche des Thinkphp5 WeChat-Applets vorgestellt. Ich hoffe, dass dieser Artikel allen bedürftigen Freunden helfen kann.

Thinkphp5 WeChat Applet Detaillierte Erläuterung des Beispiels der Benutzerinformationsschnittstelle des Programms

Laden Sie zuerst den Beispielcode von der offiziellen Website herunter, wählen Sie PHP,

Hier gibt es eine Grube

Die offizielle PHP-Datei ist in UTF-8+ codiert, daher müssen Sie die Datei in UTF-8 ändern

und dann den Wxxcx-Namespace im Thinkphp5-Extend-Ordner erstellen und mehrere einfügen offizielle Klassendateien darin (Hier sollten Sie auf den Ordnernamen, den Namespace-Namen und den Klassennamen achten und die Groß-/Kleinschreibung muss identisch sein. Der offizielle Dateiname und der Klassenname haben unterschiedliche Groß-/Kleinschreibung)

Dann Ihre eigene thinkphp-Schnittstellencode:

<?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; 
    } 
 
  } 
}
Nach dem Login kopieren

http-Kapselungsfunktion:

/** 
 * 发送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; 
}
Nach dem Login kopieren

Dann der Code des Miniprogramms:

// 获取用户信息 
  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) 
       } 
      } 
     }) 
    } 
   } 
  }) 
 },
Nach dem Login kopieren

Wenn Wenn ein Fehler vorliegt, debuggen Sie ihn selbst und prüfen Sie, wo ein Problem mit der Variablen vorliegt, und finden Sie den Grund heraus.

Das obige ist der detaillierte Inhalt vonEine Fallstudie darüber, wie Thinkphp5 die Benutzerinformationsschnittstelle des WeChat-Applets implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage