100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > php 微信扫描登录_PHP实现微信开放平台扫码登录源码

php 微信扫描登录_PHP实现微信开放平台扫码登录源码

时间:2018-09-29 14:07:19

相关推荐

php 微信扫描登录_PHP实现微信开放平台扫码登录源码

1、首先到微信开放平台申请https://open./ 获取到appid和APPSECRET,前台显示页面如下:

var obj = new WxLogin({

id: "login_container",

appid: "110",

scope: "snsapi_login",

redirect_uri: encodeURIComponent("http://" + window.location.host + "/login.php"),

state: Math.ceil(Math.random()*1000),

style: "black",

href: ""});

2、登录页面代码如下:

header("Content-type: text/html; charset=utf-8");

require_once('wxopen.class.php');

$weixin = new class_weixin();

if (!isset($_GET["code"])){

$redirect_url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

$jumpurl = $weixin->qrconnect($redirect_url, "snsapi_login", "123");

Header("Location: $jumpurl");

}else{

$oauth2_info = $weixin->oauth2_access_token($_GET["code"]);

$userinfo = $weixin->oauth2_get_user_info($oauth2_info['access_token'], $oauth2_info['openid']);

var_dump($userinfo);

}

3、登录页面中引用的wxopen.class.php代码如下:

/*

开发者 /

CopyRight All Rights Reserved

微信开放平台接口SDK

*/

/*

require_once('weixin.class.php');

$weixin = new class_weixin();

*/

define('APPID', "110"); //填写开放平台申请的APPID

define('APPSECRET', "110"); //填写对应的APPSECRET

class class_weixin

{

var $appid = APPID;

var $appsecret = APPSECRET;

//构造函数,获取Access Token

public function __construct($appid = NULL, $appsecret = NULL)

{

if($appid && $appsecret){

$this->appid = $appid;

$this->appsecret = $appsecret;

}

//扫码登录不需要该Access Token, 语义理解需要

//1. 本地写入

$res = file_get_contents('access_token.json');

$result = json_decode($res, true);

$this->expires_time = $result["expires_time"];

$this->access_token = $result["access_token"];

if (time() > ($this->expires_time + 3600)){

$url = "https://api./cgi-bin/token?grant_type=client_credential&appid=".$this->appid."&secret=".$this->appsecret;

$res = $this->http_request($url);

$result = json_decode($res, true);

$this->access_token = $result["access_token"];

$this->expires_time = time();

file_put_contents('access_token.json', '{"access_token": "'.$this->access_token.'", "expires_time": '.$this->expires_time.'}');

}

}

//生成扫码登录的URL

public function qrconnect($redirect_url, $scope, $state = NULL)

{

$url = "https://open./connect/qrconnect?appid=".$this->appid."&redirect_uri=".urlencode($redirect_url)."&response_type=code&scope=".$scope."&state=".$state."#wechat_redirect";

return $url;

}

//生成OAuth2的Access Token

public function oauth2_access_token($code)

{

$url = "https://api./sns/oauth2/access_token?appid=".$this->appid."&secret=".$this->appsecret."&code=".$code."&grant_type=authorization_code";

$res = $this->http_request($url);

return json_decode($res, true);

}

//获取用户基本信息(OAuth2 授权的 Access Token 获取 未关注用户,Access Token为临时获取)

public function oauth2_get_user_info($access_token, $openid)

{

$url = "https://api./sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";

$res = $this->http_request($url);

return json_decode($res, true);

}

public function semantic_search($record)

{

$data = urldecode(json_encode($record));

$url = "https://api./semantic/semproxy/search?access_token=".$this->access_token;

$res = $this->http_request($url, $data);

return json_decode($res, true);

}

//HTTP请求(支持HTTP/HTTPS,支持GET/POST)

protected function http_request($url, $data = null)

{

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);

if (!empty($data)){

curl_setopt($curl, CURLOPT_POST, 1);

curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

}

curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);

$output = curl_exec($curl);

curl_close($curl);

return $output;

}

//日志记录

private function logger($log_content)

{

if(isset($_SERVER['HTTP_APPNAME'])){ //SAE

sae_set_display_errors(false);

sae_debug($log_content);

sae_set_display_errors(true);

}else if($_SERVER['REMOTE_ADDR'] != "127.0.0.1"){ //LOCAL

$max_size = 500000;

$log_filename = "log.xml";

if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size))

file_put_contents($log_filename, date('Y-m-d H:i:s').$log_content."\r\n", FILE_APPEND);

}

}

}

文件网盘下载地址:链接: /s/1gfDT9f1 密码: jkn9

(支付宝)打赏勾搭 ~~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。