学了PHP 之后头一次做微信登录,步骤记下来谨防忘记,大家尽管参考,有问题评论 。
在微信内第三方页面进行登录,在公众平台内称为:网页授权,文档位于https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
前提:服务号已认证,开通了网页授权接口的权限 (插眼https://mp.weixin.qq.com/advanced/advanced?action=table&token=829646975&lang=zh_CN);
操作:
1、服务号后台设置回调地址(传送门 https://mp.weixin.qq.com/cgi-bin/settingpage?t=setting/function&action=function&token=829646975&lang=zh_CN),将 “网页授权域名
”的值改为已经备案的该服务号的域名主机即可;
2、项目中代码:(原作者不详 ,我是拷贝的同事的代码)
//获取微信授权网址
redirect_uri 是成功登陆后您要返回的具体页面 主机必须是第一步里填写的主机
$state 参数
public function get_authorize_url()
{
$authorize_url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $this->appId . '&redirect_uri=' . $this->redirect_uri . '&response_type=code&scope=snsapi_userinfo&state=' . time() . '#wechat_redirect';
$this->redirect($authorize_url);
//return $authorize_url;
}
/**
* 根据code获取授权toke
*
* @param $parameters
*/
public function get_access_token($code)
{
$token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $this->appId . '&secret=' . $this->appSecret . '&code=' . $code . '&grant_type=authorization_code';
$res = $this->https_request($token_url);
$res = json_decode($res, true);
//返回一个对象
session('z_openid', $res['openid']);
$result = $this->get_userinfo($res['access_token'], $res['openid']);
//获取用户id
$user_id = $this->check_user($result);
session('z_user_id', $user_id);
$this->redirect(url('Index/User'));
//var_dump($user_id);
// return json_decode($res);
}
public function check_user($result)
{
//用户是否存在
$exist_user = db('*****')->where('****', '=', $result->unionid)->find();
if (!empty($exist_user)) {
$user_id = $exist_user['****'];
} else {
if ($result->sex == 1) {
$sex = '男';
} else if ($result->sex == 2) {
$sex = '女';
} else {
$sex = '0';
}
$data = [
// ‘invite_code’ => $invite_code,
‘**’ => $result->nickname,
‘**’ => $sex,
‘**’ => $result->headimgurl,
‘**’ => $result->unionid,
‘**’ => time()
];
db(‘u****o’)->insert(
data);
one_info = db('u****')->where('u****d', '=',
result−>unionid)−>find();
user_id = one_info[‘i****’];
}
returnuser_id;
}
public function get_userinfo($access_token, $oppenid)
{
$info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token . '&openid=' . $oppenid;
$res = $this->https_request($info_url);
//var_dump($res);
return json_decode($res);
}
/**
* https请求
* @param $url 请求网址
*/
public function https_request($url, $data = null)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)) {
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
在模板里 微信登录按钮只需要调用 get_authorize_url 函数 即可搞定,然后那些详细的业务,就自行添加吧,