您当前的位置: 首页 > 网站编程 > PHP教程 > 微信扫描二维码登录网站代码

微信扫描二维码登录网站代码

作者:不详 来源:网络 发布时间: 2014-08-09 22:52 点击:
用户通过扫描网页提供的二维码实现登陆信息获取,大家参考使用吧 请先下载 snoopy 类 代码如下: ?php /** * 微信公众平台PHP-SDK * Wechatauth为非官方微信登陆API * 用户通过扫描网页提供的二维码实现登陆信息获取 * 主要实现如下功能: * get_login_code() 获取登陆授

微信扫描二维码登录网站代码

  用户通过扫描网页提供的二维码实现登陆信息获取,大家参考使用吧

  请先下载 snoopy 类

  代码如下:

  <?php

  /**

  * 微信公众平台PHP-SDK

  * Wechatauth为非官方微信登陆API

  * 用户通过扫描网页提供的二维码实现登陆信息获取

  * 主要实现如下功能:

  * get_login_code() 获取登陆授权码, 通过授权码才能获取二维码

  * get_code_image($code='') 将上面获取的授权码转换为图片二维码

  * verify_code() 鉴定是否登陆成功,返回200为最终授权成功.

  * get_login_cookie() 鉴定成功后调用此方法即可获取用户基本信息

  * sendNews($account,$title,$summary,$content,$pic,$srcurl='') 向一个微信账户发送图文信息

  * get_avatar($url) 获取用户头像图片数据

  * @author dodge <dodgepudding@gmail.com>

  * @link https://github.com/dodgepudding/wechat-php-sdk

  * @version 1.1

  *

  */

  include "snoopy.class.php";

  class Wechatauth

  {

  private $cookie;

  private $_cookiename;

  private $_cookieexpired = 3600;

  private $_account = 'test';

  private $_datapath = './data/cookie_';

  private $debug;

  private $_logcallback;

  public $login_user; //当前登陆用户, 调用get_login_info后获取

  public function __construct($options)

  {

  $this->_account = isset($options['account'])?$options['account']:'';

  $this->_datapath = isset($options['datapath'])?$options['datapath']:$this->_datapath;

  $this->debug = isset($options['debug'])?$options['debug']:false;

  $this->_logcallback = isset($options['logcallback'])?$options['logcallback']:false;

  $this->_cookiename = $this->_datapath.$this->_account;

  $this->getCookie($this->_cookiename);

  }

  /**

  * 把cookie写入缓存

  * @param string $filename 缓存文件名

  * @param string $content 文件内容

  * @return bool

  */

  public function saveCookie($filename,$content){

  return file_put_contents($filename,$content);

  }

  /**

  * 读取cookie缓存内容

  * @param string $filename 缓存文件名

  * @return string cookie

  */

  public function getCookie($filename){

  if (file_exists($filename)) {

  $mtime = filemtime($filename);

  if ($mtime<time()-$this->_cookieexpired) return false;

  $data = file_get_contents($filename);

  if ($data) $this->cookie = $data;

  }

  return $this->cookie;

  }

  /*

  * 删除cookie

  */

  public function deleteCookie($filename) {

  $this->cookie = '';

  @unlink($filename);

  return true;

  }

  private function log($log){

  if ($this->debug && function_exists($this->_logcallback)) {

  if (is_array($log)) $log = print_r($log,true);

  return call_user_func($this->_logcallback,$log);

  }

  }

  /**

  * 获取登陆二维码对应的授权码

  */

  public function get_login_code(){

  if ($this->_logincode) return $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 = new Snoopy;

  $send_snoopy->fetch($codeurl);

  $result = $send_snoopy->results;

  if ($result) {

  preg_match("/window.QRLogin.uuids+=s+"([^"]+)"/",$result,$matches);

  if(count($matches)>1) {

  $this->_logincode = $matches[1];

  $_SESSION['login_step'] = 0;

  return $this->_logincode;

  }

  }

  return $result;

  }

  /**

  * 通过授权码获取对应的二维码图片地址

  * @param string $code

  * @return string image url

  */

  public function get_code_image($code=''){

  if ($code=='') $code = $this->_logincode;

  if (!$code) return false;

  return 'http://login.weixin.qq.com/qrcode/'.$this->_logincode.'?t=webwx';

  }

  /**

  * 设置二维码对应的授权码

  * @param string $code

  * @return class $this

  */

  public function set_login_code($code) {

  $this->_logincode = $code;

  return $this;

  }

  /**

  * 二维码登陆验证

  *

  * @return status:

  * >=400: invaild code; 408: not auth and wait, 400,401: not valid or expired

  * 201: just scaned but not confirm

  * 200: confirm then you can get user info

  */

  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 = new 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;

  if ($status==200) {

  preg_match("/ticket=([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.'&fun=new';

  $send_snoopy = new 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("Set-Cookie: ","",$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->cookie);

  }

  }

  return $status;

  }

  }

  return false;

  }

  /**

  * 获取登陆的cookie

  *

  * @param bool $is_array 是否以数值方式返回,默认否,返回字符串

  * @return string|array

  */

  public function get_login_cookie($is_array = false){

  if (!$is_array) return $this->cookie;

  $c_arr = explode(';',$this->cookie);

  $cookie = array();

  foreach($c_arr as $item) {

  $kitem = explode('=',trim($item));

  if (count($kitem)>1) {

  $key = trim($kitem[0]);

  $val = trim($kitem[1]);

  if (!empty($val)) $cookie[$key] = $val;

  }

  }

  return $cookie;

  }

  /**

  * 授权登陆后获取用户登陆信息

  */

  public function get_login_info(){

  if (!$this->cookie) return false;

  $t = time().strval(mt_rand(100,999));

  $send_snoopy = new Snoopy;

  $submit = 'https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r='.$t;

  $send_snoopy->rawheaders['Cookie']= $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'];

  return $result;

  }

  /**

  * 获取头像

  * @param string $url 传入从用户信息接口获取到的头像地址

  */

  public function get_avatar($url) {

  if (!$this->cookie) return false;

  if (strpos($url, 'http')===false) {

  $url = 'http://wx.qq.com'.$url;

  }

  $send_snoopy = new Snoopy;

  $send_snoopy->rawheaders['Cookie']= $this->cookie;

  $send_snoopy->referer = "https://wx.qq.com/";

  $send_snoopy->fetch($url);

  $result = $send_snoopy->results;

  if ($result)

  return $result;

  else

  return false;

  }

  /**

  * 登出当前登陆用户

  */

  public function 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 = new Snoopy;

  $submit = 'https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxlogout?redirect=1&type=1';

  $send_snoopy->rawheaders['Cookie']= $this->cookie;

  $send_snoopy->referer = "https://wx.qq.com/";

  $send_snoopy->submit($submit,array('uin'=>$uid,'sid'=>$sid));

  $this->deleteCookie($this->_cookiename);

  return true;

  }

  }
分享到:
本文"微信扫描二维码登录网站代码"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 广告合作 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4