php微信第三方登录模板,PHP TP模板下的微信登录(PC)

1.微信开发者账号的申请就不说,企业级;官网域名回跳地址。(微信开放平台APPID)

还有注意点:很多应用是放在微信公众号中的,此地微信登录是:微信公众平台APPID

2.请求代码构

uid)) {

$biz_weixin_loginapi = new biz_weixin_loginapi();

$weixin_login_url = $biz_weixin_loginapi->get_url_code();

//请求到地址栏

header('location:' . $weixin_login_url);

} else {

header('location:' . WWW_DOMAIN);

}

}

}

public function get_url_code(){

$url = self::WEIXIN_URL;

//回调地址

$code_redirect_uri = urlencode(self::CODE_REDIRECT_URI); // self::CODE_REDIRECT_URI 回调地址需要urlencode ;

$state = md5(uniqid(mt_rand(), true));

$_SESSION['weixin_login_state'] = $state;

//请求地址

$url .= 'connect/qrconnect?appid='.self::APPID.'&redirect_uri='.$code_redirect_uri.'&response_type=code&scope=snsapi_login&state='.$state.'#wechat_redirect';

return $url;

}

这两部代码即可完成对微信的请求

2.编写回调代码:

步骤:

2.1  判断是不是有返回值;

2.2  获取access_token open_id;

2.3  获取微信用户信息;

2.4  检验微信token是否有效;

2.5  根据unionid查询查询本地 是否有数据 有得话,执行本地登录方法,成功或者失败 ;

2.6  没有得话 写入weixin_login user 表各一份数据 微信登陆表 用户表,执行本地登录方法,成功或者失败;

uid)) {

header('location:' . WWW_DOMAIN);

return null;

}

$header = loadMod('glob/header');

$footer = loadMod('glob/footer');

$S->assign('header', $header);

$S->assign('footer', $footer);

$info = $this->login_callback($param['code'], $param['state']);

$S->assign('info', $info);

}

/**

* 微信登陆扫码后 访问得方法

*/

protected function login_callback($code, $state)

{

// 如果返回值无code 或者state不对 跳转到首页

if (empty($code) || $state !== $_SESSION['weixin_login_state']) {

return array(

'title' => '登陆失败,请重新尝试!',

'url' => '/',

'sec' => 5,

'msg' => 'alert'

);

}

// 获取access_token open_id

$biz_weixin_loginapi = new biz_weixin_loginapi();

$result_access_token = $biz_weixin_loginapi->get_access_token($code);

if ($result_access_token['msg'] !== 'success') {

return array(

'title' => '登陆失败,请重新尝试!',

'url' => '/',

'sec' => 5,

'msg' => 'alert'

);

}

$access_token = $result_access_token['data']['access_token'];

$open_id = $result_access_token['data']['openid'];

// 获取用户信息

$result_user_info = $biz_weixin_loginapi->get_user_info($access_token, $open_id);

if ($result_user_info['msg'] !== 'success' || empty($result_user_info['data']['unionid'])) {

return array(

'title' => '登陆失败,请重新尝试!',

'url' => '/',

'sec' => 5,

'msg' => 'alert'

);

}

// 检验token是否有效

$check_token_res = $biz_weixin_loginapi->check_token($access_token, $open_id);

if ($check_token_res['msg'] !== 'success') {

return array(

'title' => '登陆失败,请重新尝试!',

'url' => '/',

'sec' => 5,

'msg' => 'alert'

);

}

// 登陆成功 根据unionid查询weixin_login user 是否有数据 有得话 直接读取 没有得话

$biz_login_weixin = new biz_login_weixin();

$user_id = $biz_login_weixin->get_userid_by_weixin_unionid($result_user_info['data']['unionid']);

if (is_id($user_id['data'])) {

$biz_login = new biz_login();

$biz_login->login($user_id['data'], 'is_login');

return array(

'title' => '登陆成功!',

'url' => '/home/welcome',

'sec' => 3,

'msg' => 'success'

);

}

// 没有得话 写入weixin_login user 表各一份数据 微信登陆表 用户表

$openid = $result_user_info['data']['openid'];

$nickname = $result_user_info['data']['nickname'];

$sex = $result_user_info['data']['sex'];

$language = $result_user_info['data']['language'];

$city = $result_user_info['data']['city'];

$province = $result_user_info['data']['province'];

$country = $result_user_info['data']['country'];

$headimgurl = $result_user_info['data']['headimgurl'];

$unionid = $result_user_info['data']['unionid'];

$insert_res = $biz_login_weixin->add_weixin($openid, $nickname, $sex, $language, $city, $province, $country, $headimgurl, $unionid);

if ($insert_res['msg'] !== 'success' || ! is_id($insert_res['data']['user_id'])) {

return array(

'title' => '登陆失败,请重新尝试!',

'url' => '/',

'sec' => 5,

'msg' => 'alert'

);

}

$biz_login = new biz_login();

$biz_login->login($insert_res['data']['user_id'], 'is_login');

return array(

'title' => '登陆成功!',

'url' => '/home/welcome',

'sec' => 3,

'msg' => 'success'

);

}

}

public function get_access_token($code, $type = 1){

if(empty($code))

{

return array('msg' => 'code_error');

}

$url = self::API_URL;

if($type === 1)

{

$appid = self::APPID;

$secret = self::APP_SECRET;

}else{

$appid = self::APPID_GZ;

$secret = self::APP_SECRET_GZ;

}

$url .= 'sns/oauth2/access_token?appid='.$appid.'&secret='.$secret.'&code='.$code.'&grant_type=authorization_code';

//获取access_token

$res_json = runCurl($url);

if(!$res_json)

{

return array('msg' => 'runCurl_error');

}

$res_arr = json_decode($res_json, true);

if(isset($res_arr['errcode']))

{

return array('msg' => $res_arr['errmsg']);

}

return array('msg' => 'success', 'data' => $res_arr);

}

public function get_user_info($access_token, $open_id){

if(empty($access_token) || empty($open_id))

{

return array('msg' => 'empty_token_or_openid');

}

$url = self::API_URL;

$url .= 'sns/userinfo?access_token='.$access_token.'&openid='.$open_id;

$res_json = runCurl($url);

if(!$res_json)

{

return array('msg' => 'runCurl_error');

}

$res_arr = json_decode($res_json, true);

if(isset($res_arr['errcode']))

{

return array('msg' => $res_arr['errmsg']);

}

return array('msg' => 'success', 'data' => $res_arr);

}

public function check_token($access_token, $open_id){

if(empty($access_token) || empty($open_id))

{

return array('msg' => 'empty_token_or_openid');

}

$url = self::API_URL;

$url .= 'sns/auth?access_token='.$access_token.'&openid='.$open_id;

$res_json = runCurl($url);

if(!$res_json)

{

return array('msg' => 'runCurl_error');

}

$res_arr = json_decode($res_json, true);

if( $res_arr['errcode'] !== 0 )

{

return array('msg' => $res_arr['errmsg']);

}

return array('msg' => 'success');

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值