思路
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: /网站/');
}
?>