1 在开放平台-网页应用申请下来
2 设置开放平台应用里的回调地址(前端页面的线上地址)
3 前端扫码后拿到code传给后端
<div id="login_container"></div>
<script src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>
<script>
var loginUrl = "http://" + window.location.host + "/index.php?route=common/home/weChatLogin";
//console.log(loginUrl);
var obj = new WxLogin({
id: "login_container",//存放二维码框
appid: "wx6b2",
scope: "snsapi_login",
redirect_uri: encodeURIComponent(loginUrl),
state: Math.ceil(Math.random()*1000),
style: "black",
href: ""});
</script>
/**
* 网页登录
*/
public function web_qrcode_login() {
$params = $this->request->getMore([
['code',''],
]);
$code = $params['code'];
$AppID = sysconfig('wx_public','wx_web_appid');
if (!isset( $code )){
$redirect_uri="http://bc.bckj1.com/";
$redirect_uri=urlencode($redirect_uri);
$url = "https://open.weixin.qq.com/connect/qrconnect?appid=" . $AppID."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect";
//请求返回的结果(实际上是个html的字符串)
$result = file_get_contents($url);
//替换图片的src才能显示二维码
$result = str_replace("/connect/qrcode/", "https://open.weixin.qq.com/connect/qrcode/", $result);
$data = [
"result" => $result,
];
return app('json')->success( 'ok' , $data );
}else{
$AppSecret = sysconfig('wx_public','wx_web_secret_key');
// 获取access_token
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $AppID . "&secret=" . $AppSecret . "&code=" . $code . "&grant_type=authorization_code";
$authorization_arr = file_get_contents( $url );
$authorization_arr = json_decode( $authorization_arr, true );
// 获取用户信息
$access_token = $authorization_arr['access_token'];
$openid = $authorization_arr['openid'];
$url = "https://api.weixin.qq.com/sns/userinfo?access_token=" . $access_token . "&openid=" . $openid . "&lang=zh_CN";
$userinfo = file_get_contents( $url );
$userinfo = json_decode( $userinfo, true );
//参数样式$userinfo用户信息结构
// 注册登录
$loginServices = app()->make(LoginServices::class);
$data = $loginServices->pcWechatLogin( $userinfo );
return app('json')->success( '登录成功' , $data );
}
}