微信小程序已经开放了越来越多的功能,所能实现的用户需求也越多了,但是微信提供的wx.getUserInfo()只能获取用户的表面信息,想要是先发送模板消息或者支付功能,就需要获取用户的openid(微信提供给每个微信用户独一无二的识别码);
这里简单介绍用php后台实现获取openid并保存到数据库;
微信的登陆流程是这样的;
首先前端发送请求到服务器:
wx.login({success: function (res) {var code = res.code;//发送给服务器的codewx.getUserInfo({success: function (res) {var userNick = res.userInfo.nickName;//用户昵称var avataUrl = res.userInfo.avatarUrl;//用户头像地址var gender = res.userInfo.gender;//用户性别if (code) {wx.request({url: 'http://localhost/test/getopenid.php',//服务器的地址,现在微信小程序只支持https请求,所以调试的时候请勾选不校监安全域名data: {code: code,nick: userNick,avaurl: avataUrl,sex: gender,},header: {'content-type': 'application/json'},success: function (res) {console.log(res.data);wx.setStorageSync('name', res.data.name);//将获取信息写入本地缓存wx.setStorageSync('openid', res.data.openid);wx.setStorageSync('imgUrl', res.data.imgurl);wx.setStorageSync('sex', res.data.sex);}})}else {console.log("获取用户登录态失败!");}}})},fail: function (error) {console.log('login failed ' + error);}
})
这样就实现了将前端获取的code发送到服务器,code每次获取的都不一样;
服务器getopenid.php代码:
<?php
text();
function text()
{$code = $_GET['code'];//小程序传来的code值$nick = $_GET['nick'];//小程序传来的用户昵称$imgUrl = $_GET['avaurl'];//小程序传来的用户头像地址$sex = $_GET['sex'];//小程序传来的用户性别$url = 'https://api.weixin.qq.com/sns/jscode2session?appid=yourAppid&secret=appSecret&js_code=' . $code . '&grant_type=authorization_code';//yourAppid为开发者appid.appSecret为开发者的appsecret,都可以从微信公众平台获取;$info = file_get_contents($url);//发送HTTPs请求并获取返回的数据,推荐使用curl$json = json_decode($info);//对json数据解码$arr = get_object_vars($json);$openid = $arr['openid'];$session_key = $arr['session_key'];$con = mysqli_connect('localhost', 'root', '123');//连接数据库if ($con) {if (mysqli_select_db($con, 'students')) {$sql1 = "select * from weixin where openid = '$openid'";$result = mysqli_query($con, $sql1);$result = mysqli_fetch_assoc($result);if ($result!=null) {//如果数据库中存在此用户的信息,则不需要重新获取$result = json_encode($result);echo $result;}else {//没有则将数据存入数据库if ($sex == '0') {$sex = 'none';} else {$sex = '1' ? 'man' : 'women';}$sql = "insert into weixin values ('$nick','$openid','$session_key','$imgUrl','$sex')";if (mysqli_query($con, $sql)) {$arr['nick'] = $nick;$arr['imgUrl'] = $imgUrl;$arr['sex'] = $sex;$arr = json_encode($arr);echo $arr;} else {die('failed' . mysqli_error($con));}}}} else {die(mysqli_error());}
}?>
成功实现了获取openid并存入数据库和小程序的本地缓存,不过微信小程序不建议直接将opneid作为值直接返回给小程序端,而是用户实现自己的前后端验证。