微信小程序获取openid(php后台)

微信小程序已经开放了越来越多的功能,所能实现的用户需求也越多了,但是微信提供的wx.getUserInfo()只能获取用户的表面信息,想要是先发送模板消息或者支付功能,就需要获取用户的openid(微信提供给每个微信用户独一无二的识别码);

这里简单介绍用php后台实现获取openid并保存到数据库;

微信的登陆流程是这样的;


首先前端发送请求到服务器:    

wx.login({
        success: function (res) {
          var code = res.code;//发送给服务器的code
          wx.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作为值直接返回给小程序端,而是用户实现自己的前后端验证。
### 如何在微信小程序获取关联的微信公众号 OpenID 为了实现在微信小程序获取与之关联的微信公众号 OpenID 的功能,开发者通常会采用间接的方式完成这一过程。具体来说,在用户同意授权的情况下,可以通过以下方式实现: #### 方案概述 1. **通过 Web-View 组件** 小程序内嵌入 `web-view` 组件加载网页链接至特定页面,该页面用于引导用户登录并授权给第三方应用(即公众号)。当用户成功授权后,服务器端能够接收到包含有公众号 OpenID 的回调请求。 2. **后台 API 处理** 在 `redirect_uri` 后端 API 服务中处理来自微信服务器的通知消息,从中解析出用户的公众号 OpenID 并返回给前端展示或存储起来以便后续业务逻辑使用[^3]。 #### 技术细节 ##### 步骤 A: 准备工作 确保已经完成了必要的开发环境搭建以及配置了合法有效的 App ID 和 Secret Key 等信息。同时还需要设置好 OAuth 授权回调域名等相关参数[^4]。 ##### 步骤 B: 获取 Code 参数 利用小程序内置方法 `wx.login()` 获得临时登陆凭证 code ,之后将其传递给自定义的服务端接口换取 session_key 及 unionid (如果存在的话),注意这里并不直接涉及公众号 OpenID获取[^5]。 ```javascript // JavaScript 示例代码片段 wx.login({ success(res) { if (res.code) { // 发送 res.code 到自有服务器交换 openid 或者其他数据 wx.request({ url: 'https://example.com/api/getOpenId', data: { js_code: res.code }, method: 'POST' }) } else { console.log('登录失败!' + res.errMsg); } } }); ``` ##### 步骤 C: 用户身份验证 接下来需要设计一个 H5 页面作为中间桥梁,用来接收从小程序跳转过来带有 code 参数的 URL 请求,并在此基础上继续执行下一步的身份认证流程——重定向到微信提供的 Oauth2 登录地址以获得最终所需的公众号 OpenID。 ```html <!-- HTML 示例代码片段 --> <a href="https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=http%3A%2F%2FREDIRECT_URI&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect">点击进入</a> ``` ##### 步骤 D: 解析 Callback 数据 最后一步是在指定的 callback 地址上部署相应的处理器函数来捕获由微信平台回传的数据包,其中包含了至关重要的 access_token 字段以及其他附加属性如 expires_in、refresh_token 等;进一步地还可以调用微信提供的 `/sns/userinfo` 接口查询得到完整的用户资料,其中包括所期望获取的目标字段——公众号 OpenID[^1]。 ```php <?php // PHP 示例代码片段 $access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token"; $params = array( 'appid'=>'YOUR_APP_ID', 'secret'=>'YOUR_SECRET_KEY', 'code'=>$_GET['code'], 'grant_type'=>'authorization_code' ); $response = file_get_contents($access_token_url.'?'.http_build_query($params)); $data = json_decode($response,true); echo $data['openid']; // 输出公众号 OpenID ?> ```
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值