当前位置:首页 > PHP教程 > php高级应用 > 列表

php获取微信openid方法总结

发布:smiling 来源: PHP粉丝网  添加日期:2021-12-30 11:17:07 浏览: 评论:0 

在本篇文章里小编给大家整理了关于php获取微信openid方法总结,有需要的朋友们参考学习下。

使用微信接口,无论是自动登录还是微信支付我们首先需要获取的就是openid,获取openid的方式有两种,一种是在关注的时候进行获取,这种订阅号就可以获取的到,第二种是通过网页授权获取,这种获取需要的是认证服务号。

今天我要说的是第二种网页授权获取openid。下面是我写的一个关于获取openid的类

  1. <?php 
  2.  
  3. /** 
  4.  
  5.  * 微信授权相关接口 
  6.  
  7.  *  
  8.  
  9.  * @link http://www.phpfensi.com 
  10.  
  11.  */ 
  12.  
  13. class Wchat 
  14.  
  15.  
  16.    private $app_id = 'wx444444444444'
  17.  
  18.    private $app_secret = '77777777'
  19.  
  20.    private $state='aaaa'
  21.  
  22.   /** 
  23.  
  24.    * 获取微信授权链接 
  25.  
  26.    *  
  27.  
  28.    * @param string $redirect_uri 跳转地址 
  29.  
  30.    * @param mixed $state 参数 
  31.  
  32.    */ 
  33.  
  34.   public function get_authorize_url($redirect_uri = ''$state = ''
  35.  
  36.   { 
  37.  
  38.     $redirect_uri = urlencode($redirect_uri); 
  39.  
  40.     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"
  41.  
  42.   } 
  43.  
  44.    /** 
  45.  
  46.    * 获取微信openid 
  47.  
  48.    */ 
  49.  
  50.   public function getOpenid($turl
  51.  
  52.   { 
  53.  
  54.     if (!isset($_GET['code'])){ 
  55.  
  56.       //触发微信返回code码 
  57.  
  58.          
  59.  
  60.        $url=$this->get_authorize_url($turl$this->state); 
  61.  
  62.          
  63.  
  64.       Header("Location: $url"); 
  65.  
  66.       exit(); 
  67.  
  68.     } else { 
  69.  
  70.       //获取code码,以获取openid 
  71.  
  72.       $code = $_GET['code']; 
  73.  
  74.       $access_info = $this->get_access_token($code); 
  75.  
  76.       return $access_info
  77.  
  78.     } 
  79.  
  80.        
  81.  
  82.   } 
  83.  
  84.   /** 
  85.  
  86.    * 获取授权token网页授权 
  87.  
  88.    *  
  89.  
  90.    * @param string $code 通过get_authorize_url获取到的code 
  91.  
  92.    */ 
  93.  
  94.   public function get_access_token($code = ''
  95.  
  96.   { 
  97.  
  98.    $appid=$this->app_id; 
  99.  
  100.    $appsecret=$this->app_secret; 
  101.  
  102.       
  103.  
  104.     $token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$appsecret."&code=".$code."&grant_type=authorization_code"
  105.  
  106.     //echo $token_url; 
  107.  
  108.     $token_data = $this->http($token_url); 
  109.  
  110.     // var_dump( $token_data); 
  111.  
  112.     if($token_data[0] == 200) 
  113.  
  114.     { 
  115.  
  116.       $ar=json_decode($token_data[1], TRUE); 
  117.  
  118.       return $ar
  119.  
  120.     } 
  121.  
  122.        
  123.  
  124.     return $token_data[1]; 
  125.  
  126.   } 
  127.  
  128.      
  129.  
  130.      
  131.  
  132.   public function http($url$method=''$postfields = null, $headers = array(), $debug = false) 
  133.  
  134.   { 
  135.  
  136.     $ci = curl_init(); 
  137.  
  138.     /* Curl settings */ 
  139.  
  140.     curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 
  141.  
  142.     curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30); 
  143.  
  144.     curl_setopt($ci, CURLOPT_TIMEOUT, 30); 
  145.  
  146.     curl_setopt($ci, CURLOPT_RETURNTRANSFER, true); 
  147.  
  148.    
  149.  
  150.     switch ($method) { 
  151.  
  152.       case 'POST'
  153.  
  154.         curl_setopt($ci, CURLOPT_POST, true); 
  155.  
  156.         if (!emptyempty($postfields)) { 
  157.  
  158.           curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); 
  159.  
  160.           $this->postdata = $postfields
  161.  
  162.         } 
  163.  
  164.         break
  165.  
  166.     } 
  167.  
  168.     curl_setopt($ci, CURLOPT_URL, $url); 
  169.  
  170.     curl_setopt($ci, CURLOPT_HTTPHEADER, $headers); 
  171.  
  172.     curl_setopt($ci, CURLINFO_HEADER_OUT, true); 
  173.  
  174.    
  175.  
  176.     $response = curl_exec($ci); 
  177.  
  178.     $http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); 
  179.  
  180.    
  181.  
  182.     if ($debug) { 
  183.  
  184.       echo "=====post data======\r\n"
  185.  
  186.       var_dump($postfields); 
  187.  
  188.    
  189.  
  190.       echo '=====info=====' . "\r\n"
  191.  
  192.       print_r(curl_getinfo($ci)); 
  193.  
  194.    
  195.  
  196.       echo '=====$response=====' . "\r\n"
  197.  
  198.       print_r($response); 
  199.  
  200.     } 
  201.  
  202.     curl_close($ci); 
  203.  
  204.     return array($http_code$response); 
  205.  
  206.   } 
  207.  
  208.    
  209.  
  210.  
  211. ?> 

getOpenid($turl)这个方法就是获取openid的方法,前端调用代码如下:

  1. $openid=isset($_COOKIE['openid'])?$_COOKIE['openid']:''
  2.  
  3.    if(emptyempty($openid)) 
  4.  
  5.    { 
  6.  
  7.      $wchat=new wchat(); 
  8.  
  9.      $t_url='http://'.$_SERVER['HTTP_HOST'].'/user.php?act=register'
  10.  
  11.      $info=$wchat->getOpenid($t_url); 
  12.  
  13.      if($info){ 
  14.  
  15.         $openid=$info['openid']; 
  16.  
  17.       setcookie('openid',$openid,time()+86400*30);   
  18.  
  19.      } 
  20.  
  21.    } 

以上就是我总结的获取openid的方法啦。

Tags: php获取微信openid

分享到: