准备资料: 在开放平台申请网站应用,须要付费300rmb, 脸上笑嘻嘻,内心。。。php
1 第一种模式,在微信做用域执行 css
$redirect_uri="http://你的微信开放平台绑定域名下处理扫码事件的方法"; $redirect_uri=urlencode($redirect_uri);//该回调须要url编码 $appID="你的appid"; $scope="snsapi_login";//写死,微信暂时只支持这个值 //准备向微信发请求 $url = "https://open.weixin.qq.com/connect/qrconnect?appid=" . $appID."&redirect_uri=".$redirect_uri ."&response_type=code&scope=".$scope."&state=STATE#wechat_redirect"; //请求返回的结果(其实是个html的字符串) $result = file_get_contents($url); //替换图片的src才能显示二维码 $result = str_replace("/connect/qrcode/", "https://open.weixin.qq.com/connect/qrcode/", $result); return $result; //返回页面
点击这个就会出现这个页面html
2 第二种模式,内嵌js执行java
引入jsjquery
<script src="https://res.wx.qq.com/connect/zh_CN/htmledition/js/jquery.min.js"></script> <script src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>
html 部分json
<div id="wx_login_container"></div>
js实例api
<script> $(document).ready(function() { var obj = new WxLogin({ self_redirect: true, id:"wx_login_container", appid: "appid", scope: "snsapi_login", redirect_uri: "回调地址", state: "", style: "black", href: "", //https://某个域名下的css文件 }); }); </script>
注意其中href里指向的css文件必须放在https协议下才能引用的到,大致上不需改变默认样式,浪费脑细胞,能够针对div 来改变二维码的大小和位置,里边是内嵌一个iframe微信
效果就是这样的,下边两个手机登录和当即注册是我本身加上的,不用理会, app
php 回调代码:
/** * todo: 微信扫码登录回调 * author: 依然范儿特西 * date: 2019-04-27 */ public function wxlogin_notice(){ $code = $_GET["code"]; $appid = Config::get("config_wechat.open_account.default.app_id"); $secret = Config::get("config_wechat.open_account.default.app_script"); if (!empty($code)){ //经过code得到 access_token + openid $url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid. "&secret=" . $secret . "&code=" . $code . "&grant_type=authorization_code"; $jsonResult = file_get_contents($url); $resultArray = json_decode($jsonResult, true); $access_token = $resultArray["access_token"]; $openid = $resultArray["openid"]; //经过access_token + openid 得到用户全部信息,结果所有存储在$infoArray里,后面再写本身的代码逻辑 $infoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" . $access_token . "&openid=" . $openid; $infoResult = file_get_contents($infoUrl); $infoArray = json_decode($infoResult, true); //执行登陆,如下代码要根据本身的业务修改逻辑, $nickname = $infoArray['nickname']; $head_img = $infoArray['headimgurl']; $unionid = $infoArray['unionid']; $user_modle = model("UserModel"); $login_result = $user_modle->wxlogin_qrcode($openid,$nickname,$head_img,$unionid); if($login_result){ echo '<script language="javascript">window.top.location.href="/ucenter/user"</script>'; } } }
建议使用第二种内嵌js ,用户体验比较好! over