사용자는 웹페이지에 제공되는 QR 코드를 스캔하여 얻을 수 있습니다. 스누피 클래스를 먼저 다운로드하세요. 코드는 다음과 같습니다. /* * * WeChat 공개 플랫폼 PHP-SDK * Wechatauth는 비공식 WeChat 로그인 API입니다. * 사용자는 웹페이지에 제공된 QR 코드를 스캔하여 로그인 정보를 얻을 수 있습니다. * 주로 다음 기능을 구현합니다. * get_login_code() 로그인 인증코드 받기, 인증코드를 통해 QR코드 획득 가능 * get_code_image($code='') 위에서 획득한 인증코드를 이미지 QR코드로 변환 * verify_code() 로그인에 성공하면 최종 인증 성공으로 200이 반환되는지 확인합니다. * get_login_cookie() 사용자의 기본 정보를 얻기 위해 인증 성공 후 이 메소드를 호출합니다. * sendNews($account ,$title,$summary,$content,$pic, $srcurl='') WeChat 계정으로 그래픽 정보 보내기 * get_avatar($url) 사용자 아바타 이미지 데이터 가져오기 * @author dodge * @link https://github.com/dodgepudding/wechat-php-sdk * @version 1.1 * */ include "snoopy.class.php"; class Wechatauth { private $cookiename; private $_cookieexpired = 3600; private $_datapath = './data/cookie_' private $_logcallback; 🎜> public $login_user; //현재 로그인 사용자, get_login_info를 호출하여 공개 함수 __construct($options) { $this->_account = isset($options['account '])?$options['account ']:''; $this->_datapath = isset($options['datapath'])?$options['datapath']:$this->_datapath ; $this-> 디버그 = isset($options['debug'])?$options['debug']:false ]:false; ;_datapath.$this->_account; ~ ; /* * * 캐시에 쿠키 쓰기 * @param string $filename 캐시 파일 이름 * @param string $content 파일 내용 * @return bool */ 공개 함수 getCookie($filename){ if (file_exists($filename)) { $mtime = 파일타임($파일이름) if ($mtime_cookieexpired) 반환 false; $data = file_get_contents($filename); if ($data) $this->cookie = $data; } return $this->cookie; } /* * 删除cookie */ 공개 함수 deleteCookie($filename) $this->쿠키 = ''; @unlink($filename); true를 반환합니다. } 비공개 함수 로그($log){ if ($this->debug && function_exists($this->_logcallback)) { if (is_array($log )) $log = print_r($log,true); return call_user_func($this->_logcallback,$log); } } /** * 로그인 QR코드에 해당하는 인증코드 획득 */ 공개 함수 get_login_code(){ if ($this-> ;_logincode) $this->_logincode를 반환합니다. ; $t = time().strval(mt_rand(100,999)); $codeurl = 'https://login.weixin.qq.com/jslogin?appid=wx782c26e4c19acffb&redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&fun=new&lang=zh_CN& _ ='.$t; $send_snoopy = 새로운 스누피; $send_snoopy->fetch($codeurl); $result = $send_snoopy->results; if ($result) { preg_match("/window.QRLogin.uuids+=s+"([^"]+)"/",$result,$matches); if(count($ 일치)>1) { $this->_logincode = $matches[1]; $_SESSION['login_step'] = 0; 🎜> $this->_logincode 반환; } } $result 반환; } /** * 인증코드를 통해 해당 QR코드 이미지 주소 가져오기 * @param string $code * @return string image url */ 공개 함수 get_code_image($code=''){ if ($code=='') $code = $this- >_logincode; (!$code)가 false를 반환하는 경우; return 'http://login.weixin.qq.com/qrcode/'.$this->_logincode.'?t=webwx'; } /** * QR코드에 해당하는 인증코드 설정 * * @param string $code * @return class $this */ 공개 함수 set_login_code($code) { $this->_logincode = $code; $this를 반환합니다. } /** * に维码登陆验证 * * @return status: * >=400: 잘못된 코드; 408: 인증하지 않고 대기함, 400,401: 유효하지 않거나 만료됨 * 201: 스캔만 했지만 확인하지 않음 * 200: 확인하면 사용자 정보를 얻을 수 있음 */ public function verify_code() { if (!$this->_logincode) return false; $t = time().strval(mt_rand(100,999)); $url = 'https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?uuid='.$this->_logincode.'&tip=1&_='. $t; $send_snoopy = 새로운 스누피; $send_snoopy->referer = "https://wx.qq.com/"; $send_snoopy->fetch($url); $result = $send_snoopy->results; $this->log('step1:'.$result); if ($result) { preg_match("/window.code=(d+)/",$result,$matches); if(count($matches)>1) { $status = intval($matches[1]); if ($status==201) $_SESSION['login_step'] = 1; [ 0-9a-z-_]+)&lang=zh_CN&scan=(d+)/",$result,$matches); $this->log('step2:'.print_r($matches,true)); if (count($matches)>1) $ticket = $matches[1]; $scan = $matches[2]; $loginurl = 'https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket='.$ticket.'&lang=zh_CN&scan='.$scan. '&재미=새'; $send_snoopy = 새로운 스누피; $send_snoopy->referer = "https://wx.qq.com/"; $send_snoopy->fetch($loginurl); $this->log('step3:'.print_r($send_snoopy->headers,true)); foreach ($send_snoopy->headers as $key => $value) { $value = Trim($value); if(strpos($value,'Set-Cookie: ') !== false){ $tmp = str_replace("쿠키 설정: ","",$value); $tmp = str_replace("Path=/","",$tmp); $tmp = str_replace("Domain=.qq.com; ","",$tmp); $cookie.=$tmp; } } $cookie .="Domain=.qq.com;"; $this->cookie = $cookie; $this->saveCookie($this->_cookiename,$this->쿠키); } } $status를 반환합니다. } } false를 반환합니다. } /** * 로그인 쿠키 가져오기 * * @param bool $is_array 숫자 형식으로 반환할지 여부, 기본값은 no, 반환 문자열 **/ 공개 함수 get_login_cookie($is_array = false){ if (!$is_array) return $this-> 쿠키; $c_arr = 폭발(';',$this->cookie); $cookie = array(); foreach($c_arr as $item) { $kitem =explod('=',trim($item)); if (count($kitem)>1) { $key = Trim($kitem[0]); $val = Trim($kitem[1]); if (!empty($val)) $cookie[$key] = $val; } } $cookie를 반환합니다. } /** * 인증된 로그인 후 사용자 로그인 정보 획득 */ 공개 함수 get_login_info(){ if (!$this->cookie) return false; $t = time().strval(mt_rand(100,999)); $send_snoopy = 새로운 스누피; $submit = 'https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r='.$t; $send_snoopy->rawheaders['쿠키']= $this->cookie; $send_snoopy->referer = "https://wx.qq.com/"; $send_snoopy->submit($submit,array()); $this->log('login_info:'.$send_snoopy->results); $result = json_decode($send_snoopy->results,true); if ($result['BaseResponse']['Ret']<0) return false; $this->_login_user = $result['User']; $result를 반환합니다. } /** * 아바타 가져오기 * * @param string $url 사용자 정보 인터페이스에서 얻은 아바타 주소 전달 */ 공개 함수 get_avatar($url) { if (!$this->cookie) return false; if (strpos($url, 'http')===false) { $url = 'http://wx.qq.com'.$url; } $send_snoopy = 새로운 스누피; $send_snoopy->rawheaders['쿠키']= $this->cookie; $send_snoopy->referer = "https://wx.qq.com/"; $send_snoopy->fetch($url); $result = $send_snoopy->results; if ($result) $result를 반환합니다. else false를 반환합니다. } /** * 현재 로그인된 사용자를 로그아웃합니다 */ 공개 함수 logout(){ if (!$this->cookie) return false; preg_match("/wxuin=(w+);/",$this->cookie,$matches); if (count($matches)>1) $uid = $matches[1]; preg_match("/wxsid=(w+);/",$this->cookie,$matches); if (count($matches)>1) $sid = $matches[1]; $this->log('logout: uid='.$uid.';sid='.$sid); $send_snoopy = 새로운 스누피; $submit = 'https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxlogout?redirect=1&type=1'; $send_snoopy->rawheaders['쿠키']= $this->cookie; $send_snoopy->referer = "https://wx.qq.com/"; $send_snoopy->submit($submit,array('uin'=>$uid,'sid'=>$sid)); $this->deleteCookie($this->_cookiename); true를 반환합니다. } }