微信小程序如何获取用户信息

最近在研究微信小程序怎么玩的。接触后发现好多的坑。

比如在浏览器中我们可以通过document.getElementById 获取到页面的DOM对象。而在微信小程序中是获取不到DOM对象的。document.getElementById() 直接报错 getElementById not function 我也是醉了。不支持这个好多有趣的功能不能实现了。
言归正传,我谈下获取用户信息的感想。

有两种获取用户信息的方案。
1、不包含敏感信息openId 的json对象(包含:nickname、avatarUrl等基本信息)
2、包含敏感信息openId的基本信息。

第一种获取方案

1、首先调用wx.login()接口 让用户授权验证,也就是我们肉眼观察到的,你是否对xxxxx授权这种信息。
2、用户成功授权后,调用wx.getUserInfo() 接口获取用户信息。

完整代码如下

wx.login({
  success:function(){
    wx.getUserInfo({
      success:function(res){
        var simpleUser = res.userInfo;
        console.log(simpleUser.nickName);
      }
    });
  }
});

第二种比较复杂了,需要与后台进行交互才能获得userInfo,但是这种方案获得的数据是完整的(包含openId)。

1、调用wx.login()接口 授权 在success 成功函数的参数中包含code。
2、调用wx.getUserInfo()接口success 函数中包含encryptedData、iv
3、将上述参数传给后台解析,生成userInfo

代码如下
js

var request = require("../../utils/request.js");

wx.login({
  success:function(res_login){
     if(res_login.code)
     {
       wx.getUserInfo({
         withCredentials:true,
         success:function(res_user){
           var requestUrl = "/getUserApi/xxx.php";
           var jsonData = {
               code:res_login.code,
               encryptedData:res_user.encryptedData,
               iv:res_user.iv
             };
           request.httpsPostRequest(requestUrl,jsonData,function(res){
            console.log(res.openId);
           });
         }
       })
     }
   }
 })

后台解析

/**
 * 获取粉丝信息
 * 其中的参数就是前端传递过来的
 */
public function wxUserInfo($code,$encryptedData,$iv)
{
  $apiUrl = "https://api.weixin.qq.com/sns/jscode2session?appid={$this->wxConfig['appid']}&secret={$this->wxConfig['appsecret']}&js_code={$code}&grant_type=authorization_code";

  $apiData = json_decode(curlHttp($apiUrl,true),true);

  if(!isset($apiData['session_key']))
  {
    echoJson(array(
      "code" => 102,
      "msg"  => "curl error"
    ),true);
  }

  $userInfo = getUserInfo($this->wxConfig['appid'],$apiData['session_key'],$encryptedData,$iv);

  if(!$userInfo)
  {
    echoJson(array(
      "code"   => 105,
      "msg"    => "userInfo not"
    ));
  }

  //$userInfo = json_decode($userInfo,true);

  //载入用户服务
  //$userService = load_service("User");

  //$userService->checkUser($this->projectId,$userInfo);

  echo $userInfo;  //微信响应的就是一个json数据
}

getUserInfo function 其中wxBizDataCrypt.php 就是微信官方提供的素材包

curlHttp 函数是一个自定函数 该函数的源码查看我的这篇文章curlHttp

//获取粉丝信息
function getUserInfo($appid,$sessionKey,$encryptedData,$iv){
  require_once ROOTPATH . "/extends/wxUser/wxBizDataCrypt.php";
  $data = array();
  $pc = new WXBizDataCrypt($appid, $sessionKey);
  $errCode = $pc->decryptData($encryptedData, $iv, $data );

  if ($errCode == 0) {
    return $data;
  } else {
    return false;
  }
}

自己写的小工具 request.js

var app = getApp();

//远程请求
var __httpsRequest = {

  //http 请求
  https_request : function(obj){
    wx.request(obj);
  },

  //文件上传
  upload_request : function(dataSource){
    wx.uploadFile(dataSource);
  }
};

module.exports = {
  //执行异步请求get
  httpsRequest:function(obj){
    var jsonUrl = {};
    jsonUrl.url = obj.url;
    if(obj.header)jsonUrl.header=obj.header;
    if(obj.type)
      jsonUrl.method = obj.type;
    else
      jsonUrl.method="GET";
    if(obj.data)jsonUrl.data = obj.data;
    obj.dataType?(jsonUrl.dataType=obj.dataType):(jsonUrl.dataType="json");

    jsonUrl.success = obj.success;

    jsonUrl.data.projectId = app.globalData.projectId;

    __httpsRequest.https_request(jsonUrl);
  },

  //get 请求
  httpsGetRequest:function(req_url,req_obj,res_func)
  {
    var jsonUrl = {
      url:app.globalData.host + req_url,
      header:{"Content-Type":"application/json"},
      dataType:"json",
      method:"get",
      success:function(res)
      {
        typeof res_func == "function" && res_func(res.data);
      }
    }

    if(req_obj)
    {
      jsonUrl.data = req_obj;
    }

    jsonUrl.data.projectId = app.globalData.projectId;

     __httpRequest.https_request(jsonUrl);
  },

  //post 请求
  httpsPostRequest:function(req_url,req_obj,res_func)
  {
    var jsonUrl = {
      url:app.globalData.host + req_url,
      header:{"Content-Type":"application/x-www-form-urlencoded"},
      dataType:"json",
      method:"post",
      success:function(res)
      {
        typeof res_func == "function" && res_func(res.data);
      }
    }

    if(req_obj)
    {
      jsonUrl.data = req_obj;
    }

    jsonUrl.data.projectId = app.globalData.projectId;

     __httpsRequest.https_request(jsonUrl);
  },

  //文件上传
  httpsUpload:function(uid,fileDataSource,res_func)
  {
    dataSource = {
      url:app.globalData.host + req_url,
      header:{
        "Content-Type":"multipart/form-data"
      },
      dataType:"json",
      formData  : {
        "uid"  :  uid
      },
      filePath  : fileDataSource,
      name    : "fileObj",
      success:function(res){
        typeof res_func == "function" && res_func(res);
      }
    }

    __httpsRequest.upload_request(dataSource);
  }
};

app.globalData.host 就是域名地址如 https://xxxxx.com;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • 微信小程序授权获取用户详细信息openid的实例详解
  • 微信小程序-获得用户输入内容
  • 微信小程序中做用户登录与登录态维护的实现详解
  • 微信小程序 用户数据解密详细介绍
  • 微信小程序getPhoneNumber获取用户手机号
  • 微信小程序后台解密用户数据实例详解
  • 微信小程序获取手机号授权用户登录功能
  • 微信小程序获取用户openId的实现方法
  • 微信小程序如何获知用户运行小程序的场景教程
时间: 2018-01-25

微信小程序-获得用户输入内容

在微信小程序里,如何获得用户输入的内容?? js: document.getElementById("Content").value jq:$("#Content").val() 在微信小程序中并不能这样写. 可以通过组件的属性 bindchange 将用户输入的储存存起来 test.wxml <input id="postalCode" bindchange="bindChange" type="number

微信小程序如何获知用户运行小程序的场景教程

前言 最近微信小程序团队像打了鸡血似的,不断推出一系列新的小程序功能,以及拓展了不少小程序的入口,使得小程序的运行场景变得越来越丰富.因此,不同的进入场景,必然会带来不同的用户需求,如何能根据这些不同的用户场景,来优化和提升我们的小程序的体验呢? 下面主要给大家介绍了微信小程序中如何获知用户运行小程序的场景,分享给大家供大家参考学习,下面来看看详细的介绍: 从小程序的基础库API v1.1.0的开始,场景值这一功能被正式的引入.我们可以在小程序的App入口代码中获取该场景值: //在小程序的on

微信小程序获取用户openId的实现方法

微信小程序获取用户openId的实现方法 前端: wx.login({ success: function (res) { res.code }) 获取到code后,传到后台, 然后请求微信接口 https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code 把参数替换为自己的参数,这个接口就直接返回openId了

微信小程序 用户数据解密详细介绍

微信小程序 用户数据解密 官方指引图: 引导图一步一步操作 1.获取code onLoad: function (options) { // 页面初始化 options为页面跳转所带来的参数 let that = this wx.login({ success: function (res) { // success let code = res.code that.setData({ code: code }) wx.getUserInfo({ success: function (res)

微信小程序后台解密用户数据实例详解

 微信小程序后台解密用户数据实例详解 微信小程序API文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html openId : 用户在当前小程序的唯一标识 因为最近根据API调用https://api.weixin.qq.com/sns/jscode2session所以需要配置以下服务,但是官方是不赞成这种做法的, 而且最近把在服务器配置的方法给关闭了.也就是说要获取用户openid,地区等信息只能在后台获取. 一下是官方的

微信小程序getPhoneNumber获取用户手机号

 微信小程序getPhoneNumber获取用户手机号 小程序中有很多地方都会用到注册用户信息的地方,用户需要填写手机号等, 有了这个组件可以快速获取微信绑定手机号码,无须用户填写. 1.getPhoneNumber这个组件通过button来实现(别的标签无效).将button中的open-type="getPhoneNumber",并且绑定bindgetphonenumber事件获取回调. <button open-type="getPhoneNumber"

微信小程序授权获取用户详细信息openid的实例详解

小程序获取用户的头像昵称openid之类 第一种使用wx.getUserInfo直接获取微信头像,昵称 wx.getUserInfo({ success: function (res) { that.setData({ nickName: res.userInfo.nickName, avatarUrl: res.userInfo.avatarUrl, }) }, }) 第二种 我们在使用小程序wx.login API进行登录的时候,直接使用wx.getUserInfo是不能获取更多的信息的,如

微信小程序中做用户登录与登录态维护的实现详解

总结 大家都知道,在开发中提供用户登录以及维护用户的登录状态,是一个拥有用户系统的软件应用普遍需要做的事情.像微信这样的一个社交平台,如果做一个小程序应用,我们可能很少会去做一个完全脱离和舍弃连接用户信息的纯工具软件. 让用户登录,标识用户和获取用户信息,以用户为核心提供服务,是大部分小程序都会做的事情.我们今天就来了解下在小程序中,如何做用户登录,以及如何去维护这个登录后的会话(Session)状态.下面来看看详细的介绍: 在微信小程序中,我们大致会涉及到以下三类登录方式: 自有的账号注册和登

微信小程序获取手机号授权用户登录功能

小程序中有很多地方都会用到注册用户信息的地方,用户需要填写手机号等,有了这个组件可以快速获取微信绑定手机号码,无须用户填写. 1.getPhoneNumber这个组件通过button来实现(别的标签无效).将button中的open-type="getPhoneNumber",并且绑定bindgetphonenumber事件获取回调. <span style="font-size:14px;"><button open-type="get

微信小程序获取手机号,后端JAVA解密流程代码

小程序获取手机号,后端JAVA解密流程代码 微信官方文档获取手机号流程地址,先看下最好方便理解下面步骤 实现思路,步骤如下 1.前端需先调用官方wx.login接口获取登录凭证code. 2.后端接收code 调用官方接口地址获取用户秘钥 sessionKey. 3.前端通过官方getPhoneNumber获取encryptedData,iv 4.前端通过参数**[encryptedData] .[iv] .[sessionKey]** 发送请求后端接口,解密用户手机号 小程序获取session

PHP实现微信小程序人脸识别刷脸登录功能

首先我们先确认我们的百度云人脸库里已经上传了我们的个人信息照片 然后我们在后台写刷脸登陆的接口login我们要把拍照获取的照片存储到服务器 public function login(){ // 上传文件路径 $dir = "./Uploads/temp/"; if(!file_exists($dir)){ mkdir($dir,0777,true); } $upload = new \Think\Upload(); $upload->maxSize = 2048000 ;//

微信小程序获取地理位置及经纬度授权代码实例

这篇文章主要介绍了微信小程序获取地理位置及经纬度授权代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 微信小程序获取地理位置授权,首先需要在app.json中添加配置: "permission": { "scope.userLocation": { "desc": "请确认授权" } } 获取经纬度:如果手机未开启位置信息,那么授权成功后在wx.getLocation(

微信小程序获取用户信息及手机号(后端TP5.0)

本文实例为大家分享了微信小程序获取用户信息及手机号的具体代码,供大家参考,具体内容如下 wxml页面 <view wx:if="{{config.tipsshow1}}" class='dialog-container'> <view class='dialog-mask'></view> <view class='dialog-info'> <view class='dialog-title'>login prompt<

微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)的实现

这个接口只能获得一些非敏感信息,例如用户昵称,用户头像,经过用户授权允许获取的情况下即可获得用户信息,至于openid这些,需要调取wx.login来获取. index.wxml <!-- 当已经授权的时候 --> <view wx:if="{{result == 'ok'}}" class="result"> <view class="headimg"> <image src="{{avata

微信小程序--获取用户地理位置名称(无须用户授权)的方法

在本文 微信小程序--获取用户地理位置名称(无须用户授权) 之前需要先看看 微信小程序-获取用户session_key,openid,unionid - 后端为nodejs 代码封装是在上文添加的. 准备 1.在http://lbs.qq.com/网站申请key 2.在微信小程序后台把apis.map.qq.com添加进request合法域名 效果 添加封装 /** * 发起网络请求 * @param {string} url * @param {object} params * @return

微信小程序获取用户信息并保存登录状态详解

前言 微信小程序的运行环境不是在浏览器下运行的.所以不能以cookie来维护登录态.下面我就来说说我根据官方给出的方法来写出的维护登录态的方法吧. 一.登录态维护 官方的文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html#wxloginobject 通过 wx.login() 获取到用户登录态之后,需要维护登录态.开发者要注意不应该直接把 session_key.openid 等字段作为用户的标识或者 session

微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析

本文实例讲述了微信小程序获取用户信息的两种方法wx.getUserInfo与open-data.分享给大家供大家参考,具体如下: 在此之前,小程序获取微信的头像,昵称之类的用户信息,我用的都是wx.getUserInfo,例如: onLoad: function (options) { var that = this; //获取用户信息 wx.getUserInfo({ success: function (res) { console.log(res); that.data.userInfo

.Net之微信小程序获取用户UnionID的实现

前言: 在实际项目开发中我们经常会遇到账号统一的问题,如何在不同端或者是不同的登录方式下保证同一个会员或者用户账号唯一(便于用户信息的管理).这段时间就有一个这样的需求,之前有个客户做了一个微信小程序商城(店主端的),然后现在又要做一个会员购物端的小程序商场.首先之前用户登录凭证都是使用微信openid来做的唯一标识,而现在客户需求是要做到用户在会员端小程序跳转到到店主端小程序假如之前该用户微信是在店主端审核通过的用户则不需要在进行资料提交审核操作,直接登录.所以,所以我们使用了UnionID来