首页 > php代码 > 微信扫码网站自动登录的实现方法

微信扫码网站自动登录的实现方法

微信扫码网站自动登录的原是还是比较简单的,只要各位知道相互的原理就可以实现了,下面我们来看两个例子,我相信各位看了这两个例子肯定知道怎么来做了。

magento 微信扫码网站自动登录

案例仿照了微信联合登陆的做法,微信联合登陆介绍:

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&lang=zh_CN

查看授权后接口调用(UnionID),不难发现填写回调地址,用户确认登陆pc端即可跳转

获取UnionID方法

<?php
public function wcallbackAction() {
    $code = $_GET['code'];
    $state = $_GET['state'];
    $setting = include CONFIG_PATH . 'setting.php';
    $appid = $setting['weixin']['appid'];
    $appsecret = $setting['weixin']['appsecret'];
    if (empty($code)) $this->showMessage('授权失败');
    try {
        $token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $appid . '&secret=' . $appsecret . '&code=' . $code . '&grant_type=authorization_code';
        $token = json_decode($this->https_request($token_url));
    }
    catch(Exception $e) {
        print_r($e);
    }
    if (isset($token->errcode)) {
        echo '<h1>错误:</h1>' . $token->errcode;
        echo '<br/><h2>错误信息:</h2>' . $token->errmsg;
        exit;
    }
    $access_token_url = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=' . $appid . '&grant_type=refresh_token&refresh_token=' . $token->refresh_token;
    //转成对象
    $access_token = json_decode($this->https_request($access_token_url));
    if (isset($access_token->errcode)) {
        echo '<h1>错误:</h1>' . $access_token->errcode;
        echo '<br/><h2>错误信息:</h2>' . $access_token->errmsg;
        exit;
    }
    $user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token->access_token . '&openid=' . $access_token->openid . '&lang=zh_CN';
    //转成对象
    $user_info = json_decode($this->https_request($user_info_url));
    if (isset($user_info->errcode)) {
        echo '<h1>错误:</h1>' . $user_info->errcode;
        echo '<br/><h2>错误信息:</h2>' . $user_info->errmsg;
        exit;
    }
    //打印用户信息
    // echo '<pre>';

    // print_r($user_info);

    // echo '</pre>';

    //获取unionid

    $uid = $user_info->unionid;

}

//用户操作处理 分为再次登录和第一次登陆

$sql = "select h_user_id from dtb_user_binded as t1 left join dtb_user_weixin as t2 on t1.u_id=t2.id where t1.u_type='" . User::$arrUtype['weixin_num_t'] . "' and t2.openid='$user_info->unionid'";

$h_user_id = Core_Db::getOne($sql);

if (!empty($h_user_id)) { //该weixin号再次登录

    

} { //该weixin号第一次登录

    

}

php微信扫码pc端自动登陆注册用的接口scope是snsapi_userinfo, 微信登陆一个是网页授权登陆,另一个是微信联合登陆网页授权登陆:http: //mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html

微信联合登陆:https: //open.weixin.qq.com/cgi-bin/frame?t=home/web_tmpl&lang=zh_CN

一:首先把微信链接带个标识生成二维码比如链接为https: //open.weixin.qq.com/connect/oauth2/authorize?appid=&rsquo;.$appid.&rsquo;&redirect_uri=&rsquo;.$url.&rsquo;&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect&rsquo;  我们可以在state上做文章,因为state你传入什么微信那边返回什么

可以作为服务器与微信段的一个标识

public function creatqrAction() {

if ($_GET['app']) {

$wtoken = $_COOKIE['wtoken'];

$postdata = $_SESSION['w_state'];

if ($wtoken) {

$postdata = $wtoken;

} < spanstyle = "color: #3366ff;" > include CONFIG_PATH . 'phpqrcode/' . 'phpqrcode.php'; < / span > $sh = $this - &gt;

shar1();

$value = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx138697ef383a9167&amp;redirect_uri=http://www.xxx.net/login/wcallback&amp;response_type=code&amp;scope=snsapi_userinfo&amp;state=" . $postdata . "&amp;connect_redirect=1#wechat_redirect";

$errorCorrectionLevel = "L";

$matrixPointSize = "5";

QRcode::png($value, false, $errorCorrectionLevel, $matrixPointSize);

}

}

此时生成了二维码state是标识,phpqrcode可以在文章末尾下载, 这样我们设置了回调地址http: //www.xxx.net/login/wcallback

就可以在wcallback方法里面处理数据插入用户生成session,跳转登陆,pc端可以设置几秒钟ajax请求服务器,一旦获取到了state, 即实现调整,微信浏览器里处理完后可以关闭窗口, 微信js可实现document . addEventListener('WeixinJSBridgeReady', function onBridgeReady() {

WeixinJSBridge . call('closeWindow');

}

, false);

也可以授权登陆成功后跳转到微信服务号关注页面

header("Location: weixin://profile/gh_a5e1959f9a4e");

wcallback方法做处理登陆

$code = $_GET['code'];
$state = $_GET['state'];
$setting = include CONFIG_PATH . 'setting.php';
$appid = $setting['weixin']['appid'];
$appsecret = $setting['weixin']['appsecret'];
if (empty($code)) $this->showMessage('授权失败');
try {
$token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $appid . '&secret=' . $appsecret . '&code=' . $code . '&grant_type=authorization_code';
$token = json_decode($this->https_request($token_url));
}
catch(Exception $e) {
print_r($e);
}
if (isset($token->errcode)) {
echo '<h1>错误:</h1>' . $token->errcode;
echo '<br/><h2>错误信息:</h2>' . $token->errmsg;
exit;
}
$access_token_url = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=' . $appid . '&grant_type=refresh_token&refresh_token=' . $token->refresh_token;
//转成对象
$access_token = json_decode($this->https_request($access_token_url));
if (isset($access_token->errcode)) {
echo '<h1>错误:</h1>' . $access_token->errcode;
echo '<br/><h2>错误信息:</h2>' . $access_token->errmsg;
exit;
}
$user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token->access_token . '&openid=' . $access_token->openid . '&lang=zh_CN';
//转成对象
$user_info = json_decode($this->https_request($user_info_url));
if (isset($user_info->errcode)) {
echo '<h1>错误:</h1>' . $user_info->errcode;
echo '<br/><h2>错误信息:</h2>' . $user_info->errmsg;
exit;
}
//打印用户信息
// echo '<pre>';
// print_r($user_info);
// echo '</pre>';


文章网址:http://www.phprm.com/code/86078.html

随意转载^^但请附上教程地址。

标签:include catch select request

相关文章

发表留言