1、微信通用的获取openid方法 - 简单版,无需传入$param_string,直接回调后也可以使用I('id')等参数
public function check_openid () {
// 授权登录
$weObj = getWechat();
if ($_GET['code']) {
$result = $weObj->getOauthAccessToken();
$openid = $result['openid'];
$user = M('User')->where(array('openid' => $openid))->find();
session('user', $user);
} else {
$user = session('user');
if (!$user['openid']) {
// $url = $weObj->getOauthRedirect('http://'.I('server.HTTP_HOST').I('server.REQUEST_URI'), '', 'snsapi_userinfo'); // 询问授权
$url = $weObj->getOauthRedirect('http://'.I('server.HTTP_HOST').I('server.REQUEST_URI'), '', 'snsapi_base'); // 静默授权
redirect($url);
}
}
return $_SESSION['user'];
}调用方式
$user = $this->check_openid();
$id = I("id"); // 公司的id
$vote_id = I("vote_id");......
接下来继续写其他逻辑.....
2、微信通用的获取openid方法,且如果是之前关注的用户,数据库没有的话会检查后重新写入数据库,而不再需要重新到微信官网上pull下来
public function check_openid () {
// 授权登录
$weObj = $this->wechat?$this->wechat:getWechat();
if ($_GET['code']) {
$result = $weObj->getOauthAccessToken();
$openid = $result['openid'];
$user = M('User')->where(array('openid' => $openid))->find();
if ($user) {
session('user', $user);
}else{
// 如果有code都没有user,则是之前关注的旧用户,需要重新写入数据库 - tim
$info = $weObj->getUserInfo($openid);
if($info && $info['subscribe'] == 1) {
// 写入到user表中
$info['base64_nickname'] = base64_encode($info['nickname']);
$info['nickname'] = filterEmoji($info['nickname']);
$return_id = M('User')->add($info);
$info['id'] = $return_id;
session('user', $info);
}
}
} else {
$user = session('user');
if (!$user['openid']) {
// $url = $weObj->getOauthRedirect('http://'.I('server.HTTP_HOST').I('server.REQUEST_URI'), '', 'snsapi_userinfo'); // 询问授权
$url = $weObj->getOauthRedirect('http://'.I('server.HTTP_HOST').I('server.REQUEST_URI'), '', 'snsapi_base'); // 静默授权
redirect($url);
}
}
/*如果没有关注,则提示去关注 - 业务逻辑,没必要可去除*/
if ($_SESSION['user']['subscribe'] == 0) {
// 没有$user表示还未关注,跳到关注提示页面
redirect('/home/index/concern');
}
return $_SESSION['user'];
}