微信小程序获取openid,实现数据主键关联

930 阅读3分钟

一、openid的作用

很多时候,我们在开发微信小程序的时候,需要为用户提供储存信息的功能,那么问题来了,不同的用户有不同的数据,我们如何来区分呢?

openid是微信小程序用户唯一标识码,当用户登录小程序之后,微信平台自动生成一串很长的字符串,每个用户是不同的,这个openid是和用户的微信号关联的。也就是说,同一个微信号,在同一个小程序中的openid是一致的,不管是第一次登录,还是多次登录。所以我们可以利用openid来作为数据库的主键,来辨识不同的用户

那么重点来了,我们如何获取openid呢?很多时候,我们在产品还没上线的时候,是通过向腾讯服务器发起请求的。但如果在真机模拟中,不允许的。需要我们在自己的服务器中,做好后台的工作。

二、获取openid步骤

  1. 搭建服务器,编写后端接口,接受前端发起的登录请求

  2. 服务器向api.weixin.qq.com/sns/jscode2… 发起请求(后面接上自己appid和secret参数)appid和secret 需要自己登录小程序管理后台查看

  3. 成功请求后,接收微信服务端向自己的服务器发来了包含openid的数据

  4. 对数据进行解码,微信小程序请求成功后,回调success: function (res) {其中,res.data里面含有两样数据,一个是openid另一个就是session_key,这个session_key,每次都不一样。好了,我们现在目的达成了,接下来就是要把openid作为全局变量,保存在微信小程序中了

流程图如下

sequenceDiagram
前端->>自己后端: 1.wx.login 获取logincode发送后端
自己后端-->>微信后端接口: 2.携带appid和secret和js_code(前端给的logincode)
微信后端接口-->>自己后端: 3.返回包含openid的数据
自己后端-->>前端: 4.返回包含openid的数据给前端

前端微信小程序请求代码如下:

 wx.login({
      success: function (loginCode) {
      //  var appid = ''; //填写微信小程序appid
	  //   var secret = ""; //填写微信小程序secret

        //调用request请求api转换登录凭证
        wx.request({
          url: 'https://**域名**/code.php?code='+loginCode.code,
         
          success: function (res) {

            that.globalData.openid = res.data
            console.log(res.data) //获取openid
            console.log(that.globalData.UserInfo)
          }
        })
      }
    })

其中,url,是自己服务器的网址对应响应请求的地址。上面我的code.php是响应请求的。代码如下:

<?php
class code{
public function getopenid(){
$js_code =$_GET["code"];
$getUrl ="https://api.weixin.qq.com/sns/jscode2session?appid=自己小程序的appid&secret=自己小程序的secret&js_code=".$js_code."&grant_type=authorization_code";

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $getUrl);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURL_SSLVERSION_SSL, 2);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  $data = curl_exec($ch);
  $response = json_decode($data);

echo $data;

   	} 
	}
$str=new code;
$str->getopenid();
?>

在这个php中我们可以看出获取的openid的流程

this.globalData = {
      cate:'',
      UserInfo:[],
      jobCate:'',
      openid:[]
    }

赋值即可

 that.globalData.openid = res.data.openid

下面是进行数据库中插入操作啦


	const db = wx.cloud.database({
      envy: 'job-3a515a'
    })
    
    db.collection(jobcate).add({
      data: {
      	openid:openid,
        jobid: id,
        demand: demand,
        money: money,
      }, success(res) {
       

        wx.switchTab({
          url: '/pages/mine/mine',
        })
      

        wx.showToast({
          title: '成功发布',
          duration: 3000
        })

      }
  

这个操作是非必需的,主要是看需求而定。一般正常情况下,向数据库插入数据的时候,数据库会自动增加一个openid字段记录着条记录是谁的。我们只需把自己openid得到,然后,想数据库中查找记录,如果数据库中有openid的记录和自己的openid一致的时候,这说明是自己的记录。这个用处比较大。至于怎么查询记录。也在这里说一下。

db.collection('alljob').where({
    _openid: app.globalData.openid.openid
  }).get({
    success: res => {
      that.setData({
        job: res.data

      })
      console.log('[数据库] [查询记录] 成功: ', res)
    },
    fail: err => {
      wx.showToast({
        icon: 'none',
        title: '查询记录失败'
      })

扫码二维码关注微信公众号,回复关键字:vip

领取福利礼包

公众号二维码.jpg