PHP erhält die WeChat-OpenID

藏色散人
Freigeben: 2023-04-07 14:30:01
nach vorne
3965 Leute haben es durchsucht

Über die WeChat-Schnittstelle müssen wir zunächst die OpenID erhalten, unabhängig davon, ob es sich um eine automatische Anmeldung oder eine WeChat-Zahlung handelt. Eine Möglichkeit besteht darin, sie beim Bezahlen zu erhalten Die zweite Möglichkeit besteht darin, sie über eine Webseitenautorisierung zu erhalten, für die eine Authentifizierungsdienstnummer erforderlich ist.

Worüber ich heute sprechen werde, ist die zweite Art der Webseitenautorisierung, um OpenID zu erhalten. Unten ist eine Klasse, die ich über das Abrufen von openid

<?php
/**
 * 微信授权相关接口
 * 
 * @link http://www.phpddt.com
 */
class Wchat
{
      private $app_id = &#39;wx444444444444&#39;;
      private $app_secret = &#39;77777777&#39;;
     private $state=&#39;aaaa&#39;;
   /**
     * 获取微信授权链接
     * 
     * @param string $redirect_uri 跳转地址
     * @param mixed $state 参数
     */
    public function get_authorize_url($redirect_uri = &#39;&#39;, $state = &#39;&#39;)
    {
        $redirect_uri = urlencode($redirect_uri);
        return "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$this->app_id}&redirect_uri={$redirect_uri}&response_type=code&scope=snsapi_userinfo&state={$state}#wechat_redirect";
    }
     /**
     * 获取微信openid
     */
    public function getOpenid($turl)
    {
        if (!isset($_GET[&#39;code&#39;])){
            //触发微信返回code码
            
             $url=$this->get_authorize_url($turl, $this->state);
            
            Header("Location: $url");
            exit();
        } else {
            //获取code码,以获取openid
            $code = $_GET[&#39;code&#39;];
            $access_info = $this->get_access_token($code);
            return $access_info;
        }
        
    }
    /**
     * 获取授权token网页授权
     * 
     * @param string $code 通过get_authorize_url获取到的code
     */
    public function get_access_token($code = &#39;&#39;)
    {
      $appid=$this->app_id;
      $appsecret=$this->app_secret;
      
        $token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$appsecret."&code=".$code."&grant_type=authorization_code";
        //echo $token_url;
        $token_data = $this->http($token_url);
       // var_dump( $token_data);
        if($token_data[0] == 200)
        {
            $ar=json_decode($token_data[1], TRUE);
            return $ar;
        }
        
        return $token_data[1];
    }
    
    
    public function http($url, $method=&#39;&#39;, $postfields = null, $headers = array(), $debug = false)
    {
        $ci = curl_init();
        /* Curl settings */
        curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30);
        curl_setopt($ci, CURLOPT_TIMEOUT, 30);
        curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);
 
        switch ($method) {
            case &#39;POST&#39;:
                curl_setopt($ci, CURLOPT_POST, true);
                if (!empty($postfields)) {
                    curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
                    $this->postdata = $postfields;
                }
                break;
        }
        curl_setopt($ci, CURLOPT_URL, $url);
        curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ci, CURLINFO_HEADER_OUT, true);
 
        $response = curl_exec($ci);
        $http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
 
        if ($debug) {
            echo "=====post data======\r\n";
            var_dump($postfields);
 
            echo &#39;=====info=====&#39; . "\r\n";
            print_r(curl_getinfo($ci));
 
            echo &#39;=====$response=====&#39; . "\r\n";
            print_r($response);
        }
        curl_close($ci);
        return array($http_code, $response);
    }
 
}
?>
Nach dem Login kopieren

getOpenid($turl) geschrieben habe. Diese Methode ist die Methode zum Abrufen von openid. Der Front-End-Aufrufcode lautet wie folgt:

      $openid=isset($_COOKIE[&#39;openid&#39;])?$_COOKIE[&#39;openid&#39;]:&#39;&#39;;
        
            if(empty($openid))
            {
                $wchat=new wchat();
                $t_url=&#39;http://&#39;.$_SERVER[&#39;HTTP_HOST&#39;].&#39;/user.php?act=register&#39;;
                
                $info=$wchat->getOpenid($t_url);
                
                if($info){
                     $openid=$info[&#39;openid&#39;];
                  setcookie(&#39;openid&#39;,$openid,time()+86400*30);    
                    
                }
                
            }
Nach dem Login kopieren

Das Obige ist die Methode, die ich zusammengefasst habe, um die OpenID zu erhalten.

Das obige ist der detaillierte Inhalt vonPHP erhält die WeChat-OpenID. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
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