同学们好,今天我们来讲一讲如何用PHP获取微信openid。
需求:
在微信当中我们访问我们自己的网页的时候,让它自动判断你是不是已经认证过了,如果认证通过就直接访问页面,如果没有认证那需要它微信绑定才能访问,绑定之后,以后访问就不需要认证了。这里我们需要通过微信的openid来判断认证信息。
原理:
1.公众号后台设置“网页授权域名”(把你这个网页放到哪个域名下面)
2.通过后台提示下载“MP_verify_w5FcRq39x19ULS9U.txt”放至你网站的根目录
3.通过后台获取AppID和$AppSecret
4.通过代码先获取公众号的code
5.通过code来获取具体的openid
6.通过openid与数据库对比,来判断是否一样,如果一样就说明认证过了,如果没有,则没有认证,可以跳转至另一个页来认证,最后把openid保存至数据库(跳转的认证请你自己去写代码了,我们这里只重点讲获取openid)
后台设置效果:
后台的AppID和AppSecret
注意:
这里只能写二个域名
接下来我们从第3点开始写代码获取code
我写了一个getcode.php页面:
通过getcode.php页面可以获得一个code的东西。它会返回一个地址类似xxxxx.php?code=xxxxxxx&state=123
后面的这个?code=……123 是微信自动跳转添加的,不是你自己加的
接下来,我们通过getopenid.php来接收一下code.
$_GET["code"]获取就可以了。
getopenid.php页面代码:
<?php //获取用户openid$appid="";//你的appid$appsecret="";//你的appsecret$code=$_GET['code'];function getOpenID($appid,$appsecret,$code){$url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$appsecret."&code=".$code."&grant_type=authorization_code";$weixin=file_get_contents($url);//通过code换取网页授权access_token$jsondecode=json_decode($weixin); //对JSON格式的字符串进行编码$array = get_object_vars($jsondecode);//转换成数组$openid = $array['openid'];//输出openidreturn $openid;}$openid=getOpenID($appid,$appsecret,$code);//获取到openidif($openid==""){echo "您没有绑定微信,请联系管理员!";exit;}//与数据库对比来判断有没有认证$serverName = "xxxx"; //数据库服务器地址$uid = "xxxxx"; //数据库用户名$pwd = "xxxx"; //数据库密码$connectionInfo = array("UID"=>$uid, "PWD"=>$pwd, "Database"=>"xxxxx");//数据库名称$conn = sqlsrv_connect($serverName, $connectionInfo);if( $conn == false){echo "连接失败!";exit;}else{$sql = "SELECT * FROM 表名 where t_weixinid='".$openid."'";$stmt = sqlsrv_query( $conn,$sql);if( $stmt === false) {die( print_r( sqlsrv_errors(), true) );exit;}while($row = sqlsrv_fetch_array($stmt,SQLSRV_FETCH_ASSOC)){.........//这里可以自己写后续代码}}
注意:
我这里用的是mssql数据库。
我写了一个函数,getOpenID(),三个参数就可以得到openid.
$openid=getOpenID($appid,$appsecret,$code); 可以获取openid.
有了openid就可以去操作其他的东西。