前面我在微信测试号后台设置的auth认证的域名是后台的,自己去获取code,自己授权都是没问题的,忘了前端请求如果使用重定向到前端就是不行,关键点来了:
首先应该是前端自己去请求微信获取到code,auth域名认证配置前端的域名,前端截取到code后,授权已经结束了,把code传到后台,让后台去后去数据就可以了,后台将用户数据获取到写入数据库,直接return给前端就好了,php代码只要一个接口就好了
报token跨域在harder头添加
header("Access-Control-Allow-Headers:token,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type, Accept-Language, Origin, Accept-Encoding");
public function getuseropenid()
{
//回调地址会传回一个code,则我们根据code去获取openid和授权获取到的用户信息
$code = $_GET['code'];
error_log("\n******" . date("Y-m-d H:i:s") . "********\n" . print_r($code, 1) . "\n*************\n", 3, 'messag_event.log');
$appid = Config::get('weixin.appid');
$secret = Config::get('weixin.appsecret');
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid . "&secret=" . $secret . "&code=" . $code . "&grant_type=authorization_code";
$res = $this->http_curl($url);
$access_token = isset($res['access_token']) ? $res['access_token'] : '';
$getopenid = isset($res['openid']) ? $res['openid'] : '';
//获取用户授权信息
$urltoc = "https://api.weixin.qq.com/sns/userinfo?access_token=" . $access_token . "&openid=" . $getopenid . "&lang=zh_CN";
$resinfos = $this->http_curl($urltoc);
$openid = $resinfos['openid'];
$userModel = new userModel;
$check_member = $userModel->where('openid', $openid)->find();
if (empty($check_member)) {
//首次进入,则获取用户信息,插入数据库
$resinfo['openid'] = $openid;
$insert_data = [
'openid' => $openid,
'wx_nickname' => $resinfos['nickname'],
'wx_sex' => $resinfos['sex'],
'wx_city' => $resinfos['city'],
'wx_province' => $resinfos['province'],
'wx_country' => $resinfos['country'],
'wx_headimgurl' => $resinfos['headimgurl'],
'createtime' => time()
];
$userModel->save($insert_data);
$userId = $userModel->id;
//创建会员信息
$power = new Power();
$power->user_id = $userId;
$power->gid = '';
$power->cuid = '';
$power->member_level = 0;
// 第二次开始必须使用下面的方式新增
$power->isUpdate(false)->save();
Session::set('wx_member_info', $resinfo);
} else {
//说明是已经是公众号成员,则调用用户信息存到session即可
$wxMemberInfo = $userModel->where("openid", $openid)->find();
$userId = $wxMemberInfo->id;
$openid = $wxMemberInfo->openid;
Session::set('wx_member_info', $wxMemberInfo);
//跳转网页
}
$ret = $this->auth->wxLogin($openid);
if ($ret) {
$data = ['userinfo' => $this->auth->getUserinfo()];
$this->success(__('登录成功'), $data);
} else {
$this->error($this->auth->getError());
}
}