后端开发|php教程
微信扫描二维码
后端开发-php教程
请先下载 snoopy 类
24小时发卡网源码,vscode不能切换分支,ubuntu 软件封装,tomcat端口怎么清理,爬虫古诗,php 获取计算机名,北京seo服务费用,小说网站的代码,金融织梦模板免费下载lzw
<?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
* @link /dodgepudding/wechat-php-sdk
* @version 1.1
*
*/
include "snoopy.class.php";
class Wechatauth
{
private $cookie;
private $_cookiename;
private $_cookieexpired = 3600;
private $_account = est;
private $_datapath = ./data/cookie_;
private $debug;
private $_logcallback;
public $login_user; //当前登陆用户, 调用get_login_info后获取
医保系统源码,vscode插件中文api,自制ubuntu镜像,tomcat线程模型源码,爬虫全网站,php网站设计论文,seo招聘推荐聊城博达网络,asp网站源码下载图片,网站模板html5lzw
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_cookieexpired) return false;
$data = file_get_contents($filename);
if ($data) $this->cookie = $data;
}
return $this->cookie;
}
asp源码无限制,vscode占用cpu过高,ubuntu md软件,tomcat8.5.28,Sqlite修改自增长字段,家里可以养哪些爬虫类,php 配置 curl,泰安优秀seo公司,网站建设管理流程,web网页作品源码,69zw模板lzw
/*
* 删除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./jslogin?appid=wx782c26e4c19acffb&redirect_uri=https%3A%2F%%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.uuid\s+=\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./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./cgi-bin/mmwebwx-bin/login?uuid=.$this->_logincode.&tip=1&_=.$t;
$send_snoopy = new Snoopy;
$send_snoopy->referer = "/";
$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 = /cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=.$ticket.&lang=zh_CN&scan=.$scan.&fun=new;
$send_snoopy = new Snoopy;
$send_snoopy->referer = "/";
$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=.; ","",$tmp);
$cookie.=$tmp;
}
}
$cookie .="Domain=.;";
$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 = /cgi-bin/mmwebwx-bin/webwxinit?r=.$t;
$send_snoopy->rawheaders[Cookie]= $this->cookie;
$send_snoopy->referer = "/";
$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 = \.$url;
}
$send_snoopy = new Snoopy;
$send_snoopy->rawheaders[Cookie]= $this->cookie;
$send_snoopy->referer = "/";
$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 = /cgi-bin/mmwebwx-bin/webwxlogout?redirect=1&type=1;
$send_snoopy->rawheaders[Cookie]= $this->cookie;
$send_snoopy->referer = "/";
$send_snoopy->submit($submit,array(uin=>$uid,sid=>$sid));
$this->deleteCookie($this->_cookiename);
return true;
}
}