微信开放平台 - 网页登录
首先要搞清楚微信开放平台 和 微信公众平台是两个东西。
微信开放平台的文档地址:
网页登录首先需要申请 网页应用的,申请完后使用网页应用的appid 和 appsecret调用接口完成用户登录,具体的微信用户登录过程:
1、服务器设置参数跳转到微信网页,微信网页展示二维码
2、用户微信扫描二维码,确认登录
3、微信回调 第1步服务器设置参数的回调地址,回调的url会带上code参数
4、服务器根据code参数获取openid(至此登录完成)
可以根据openid 获取用户的详细信息,写入数据库,或者其他逻辑等;
php源代码:
<?php
namespace Home\Controller;
use Think\Controller;
/**
* 微信网站应用 趣味中国字 网页登录
*/
class WxwebappController extends Controller {
private $cfg = [
'AppID' => '网页应用id',
'AppSecret' => '网页应用secret',
];
function index() {echo 'hi';}
// 网页授权
function webauth() {
if (!isset($_GET["u"])) {echo '回调地址不能为空;';return;}
$usr = $this->auth_our($scope);
if (!$usr || !is_array($usr)) {
echo $usr;return;
}
$this->addAuthUser($usr); // 写入数据库
foreach ($usr as $k => $v) {
setcookie('swxusr_' . $k, urlencode($v), time() + 30 * 24 * 3600, '/', 'cleey.com');
}
$url = $_GET['u'];
Header('Location:' . $url);exit;
}
// 获取 code
public function auth_our() {
$code = $_GET["code"];
if (!$code) {
// 授权并返回CODE
$AppID = $this->cfg['AppID'];
$AppSecret = $this->cfg['AppSecret'];
$REDIRECT_URI = urlencode('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
$url = "https://open.weixin.qq.com/connect/qrconnect?appid={$AppID}&redirect_uri={$REDIRECT_URI}&response_type=code&scope=snsapi_login&state=3d6be0a4035d839573b04816624a415e#wechat_redirect";
Header('Location:' . $url);exit;
} else {
$AppID = $this->cfg['AppID'];
$AppSecret = $this->cfg['AppSecret'];
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$AppID}&secret={$AppSecret}&code={$code}&grant_type=authorization_code";
$auth = file_get_contents($url);
$auth = json_decode($auth, true);
$access_token = $auth['access_token'];
$openid = $auth['openid'];
$url = "https://api.weixin.qq.com/sns/userinfo?access_token={$access_token}&openid={$openid}";
$usr = file_get_contents($url);
$usr = json_decode($usr, true);
if (!array_key_exists('openid', $usr)) {
return ('微信服务器错误,刷新重试2');
}
return $usr;
}
}
protected function addAuthUser($usr) {
if (!$usr['openid']) {
return;
}
$wx_auth_user = M('weixin_user');
$one = $wx_auth_user->where(['openid' => $usr['openid']])->select();
if ($one) {
return;
}
if ($usr['unionid']) {
$one = $wx_auth_user->where(['unionid' => $usr['unionid']])->select();
if ($one) {
return;
}
}
$info = array();
$info['openid'] = $usr['openid'];
$info['nickname'] = preg_replace('/[\x{10000}-\x{10FFFF}]/u', '', $usr['nickname']);
$info['sex'] = $usr['sex'];
$info['language'] = $usr['language'];
$info['country'] = $usr['country'];
$info['province'] = $usr['province'];
$info['city'] = $usr['city'];
$info['headimgurl'] = $usr['headimgurl'];
$info['unionid'] = $usr['unionid'];
$info['auth_time'] = time();
$wx_auth_user->add($info);
}
}