扫描二维码实现登陆帐号

ecshop

15-8-6 20:46:42

思路

A 用程序生成二维码

B 根据扫描的url 实现跳转网站 (如果不是微信客户端,提示文字或者其他)

C 获取用户openid

D 接收openid 判断 数据库是否存在该id 

E 如果不存在入库 跳转登陆或者注册页面(注册或者登陆后 绑定)

F 如果存在判断是否绑定帐号  跳转登陆或者注册页面(注册或者登陆后 绑定)

G 如果存在并且已经绑定帐号 实现登陆状态

---------------------------------------------------------------------------------

下面的带推荐人的 例子 和模拟登陆雷同


e.php 生成二维码 访问www.163.com/e.php?id=110     (id是推荐人)

<?
include "../admin/phpqrcode/phpqrcode.php"; 
$value = "http://www.163.com/t.php?rid=".$_GET['id']; //二维码内容   
$errorCorrectionLevel = "L";
$matrixPointSize = "9";
QRcode::png($value, false, $errorCorrectionLevel, $matrixPointSize);
exit;
?>


t.php  //实现跳转  如果非微信扫描提示

<?
$rid=$_GET['rid'];
if(is_weixin()){
header("location:https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx4f96622222222222&redirect_uri=http://www.163.com/oauth2.php?rid=$rid&response_type=code&scope=snsapi_base&state=1#wechat_redirect");
}else{
?>
  请在微信客户端内打开:
   http://www.163.com/zhuce.php?rid=<?=$rid?>
   长按复制到微信聊天窗口  
<? }
function is_weixin()

    if ( strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false ) {
        return true;
    }  
        return false;
}
?>


oauth2.php 获取用户openid

<?php
// 1获取 code

$rid=$_GET['rid];
if (isset($_GET['code'])){
    $code= $_GET['code'];
}else{
   header('Location: /任意地址/');
}
// 2  根据 code  和 appid  secret  获取  access_token
$url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx4f96622722222b&secret=69ece3333333acf326ac5&code=$code&grant_type=authorization_code";
$rs= json_decode(file_get_contents($url));
header('Location: www.php?a='.$rs->openid."&rid=".$rid);

www.php  根据openid  登陆用户 (我的程序是ecshop)

<?php
define('IN_ECS', true);
$oid=$_GET['a'];

$rid=$_GET['rid'];
require(dirname(__FILE__) . '/mobile/includes/init.php');
$sql = "SELECT * FROM oid WHERE oid = '".$oid."'";
$row = $db->getRow($sql);
setcookie('oid',$oid,3600);
setcookie("ECS[o_name]", $oid, time() + 3600, '/');
setcookie("ECS_oname", $oid, time() + 3600, '/');


if (empty($row['oid'])){ //如果数据库没有这个openid
    $table = "oid";  
    $field_values = array("oid" => $oid);  
    $db->autoExecute($table, $field_values, "INSERT"); 
      header('Location: /网站/');
}else{
    if(empty($row['uname'])){ //如果有openid  但是没绑定帐号的情况
    header('Location: /网站/');
    exit;
}
    $user->set_session($row['uname']);//设置登陆
    $user->set_cookie($row['uname']);//设置登陆
    update_user_info();//更新登陆状态
    header('Location: /网站/');
}


?>