微信小程序 账户系统使用unique_id 多平台账号通用

微信小程序获取 OpenId 和 UnionId 在微信的开发体系中,OpenID和UnionID是用于标识用户的两种重要机制,特别是在处理微信公众平台、小程序和开放平台的用户管理时。OpenIDOpenID是微信用户在某个微信公众号或小程序中的唯一标识。在不同的公众号或小程序中,同一个微信用户的 OpenID 是不同的。UnionIDUnionID是在微信开放平台中,统一识别用户的唯一标识。如果开发者拥有多个移动应用、网站应用和公众帐号,用户在这些应用中唯一的身份标识就是UnionID(个人理解是分享的时候标识的用户ID值)。 阅读详情

小程序端获取数据:使用session_key 去获取uniqueid。

app.js

login: function () {
    var that = this;
    // 登录
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey
        wx.request({
          url: 'https://www******l/api/jscode2session.php',
          data: { code: res.code },
          method: 'POST',
          header: {
            'content-type': 'application/x-www-form-urlencoded'
          },
          success: function (data) {
            that.getUserInfo(data.data.data.user_info.session_key);//解码获取unionID
          }
        })
      }
    })
  },
  getUserInfo:function(sessionKey){
    var that = this
    wx.getUserInfo({
      success: res => {
        res.sessionKey = sessionKey
        // 可以将 res 发送给后台解码出 unionId
        wx.request({
          url: 'https://*****/api/aes_data.php',
          data: res,
          method: 'POST',
          header: {
            'content-type': 'application/x-www-form-urlencoded'
          },
          success: function (data) {
            //解码获取unionID
            that.globalData.userInfo = data.data
          }
        })

        // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
        // 所以此处加入 callback 以防止这种情况
        if (this.userInfoReadyCallback) {
          this.userInfoReadyCallback(res)
        }
      }
    })
  },

后台:

jscode2session.php   获取session_key

aes_data.php              使用session_key获取unique_id(使用微信提供的加密解密方式)

 

jscode2session.php 

<?php
include_once('config.php');
$code = trim($_POST['code']);      //小程序端传来的登陆code
$url  = 'https://api.weixin.qq.com/sns/jscode2session?appid='.$appid.'&secret='.$secret.'&js_code='.$code.'&grant_type=authorization_code';   
$r =  curlN($url);
$r = json_decode($r,true);
$arr = array(
		'ret' => 1,
		'msg' => '操作成功',
		'data' => array(
			'user_info' => $r,
			)	
		);
echo json_encode($arr);	

function curlN($url,$data=null)
{	
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	$tmpInfo = curl_exec($ch);
	if (curl_errno($ch)) {
	  return curl_error($ch);
	}
	curl_close($ch);
	return $tmpInfo;
}
?>

aes_data.php

<?php
include_once('config.php');
include_once('wxBizDataCrypt.php');

$appid			= $appid;
$sessionKey		= $_POST['sessionKey'];
$encryptedData  = $_POST['encryptedData'];
$iv				= $_POST['iv'];
$pc				= new WXBizDataCrypt($appid, $sessionKey);
$errCode = $pc->decryptData($encryptedData, $iv, $data );
if ($errCode == 0) {
    print($data . "\n");
} else {
    print($errCode . "\n");
}

wxBizDataCrypt.php

<?php

/**
 * 对微信小程序用户加密数据的解密示例代码.
 *
 * @copyright Copyright (c) 1998-2014 Tencent Inc.
 */


include_once "errorCode.php";


class WXBizDataCrypt
{
    private $appid;
	private $sessionKey;

	/**
	 * 构造函数
	 * @param $sessionKey string 用户在小程序登录后获取的会话密钥
	 * @param $appid string 小程序的appid
	 */
	public function __construct( $appid, $sessionKey)
	{
		$this->sessionKey = $sessionKey;
		$this->appid = $appid;
	}


	/**
	 * 检验数据的真实性,并且获取解密后的明文.
	 * @param $encryptedData string 加密的用户数据
	 * @param $iv string 与用户数据一同返回的初始向量
	 * @param $data string 解密后的原文
     *
	 * @return int 成功0,失败返回对应的错误码
	 */
	public function decryptData( $encryptedData, $iv, &$data )
	{
		if (strlen($this->sessionKey) != 24) {
			return ErrorCode::$IllegalAesKey;
		}
		$aesKey=base64_decode($this->sessionKey);

        
		if (strlen($iv) != 24) {
			return ErrorCode::$IllegalIv;
		}
		$aesIV=base64_decode($iv);

		$aesCipher=base64_decode($encryptedData);

		$result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);

		$dataObj=json_decode( $result );
		if( $dataObj  == NULL )
		{
			return ErrorCode::$IllegalBuffer;
		}
		if( $dataObj->watermark->appid != $this->appid )
		{
			return ErrorCode::$IllegalBuffer;
		}
		$data = $result;
		return ErrorCode::$OK;
	}

}


errorCode.php

<?php

/**
 * error code 说明.
 * <ul>

 *    <li>-41001: encodingAesKey 非法</li>
 *    <li>-41003: aes 解密失败</li>
 *    <li>-41004: 解密后得到的buffer非法</li>
 *    <li>-41005: base64加密失败</li>
 *    <li>-41016: base64解密失败</li>
 * </ul>
 */
class ErrorCode
{
	public static $OK = 0;
	public static $IllegalAesKey = -41001;
	public static $IllegalIv = -41002;
	public static $IllegalBuffer = -41003;
	public static $DecodeBase64Error = -41004;
}

?>

 

小程序之用户管理系统 写一个小程序实现用户的管理,即用户注册,用户登录,用户信息显示,用户注销 #coding:utf-8 print """ 1.注册新用户 2.登录用户 3.显示用户信息 4.注销用户 5.退出 """ info = { 'user1': { 'name': 'user1', 'password': ' 阅读详情

相关推荐

数字孪生成熟度的L0-L4五级划分,各自特征和应用场景

数字孪生的分级(或成熟度模型)通常用于描述其技术复杂度和功能完备性的演进过程。3D设计模型(CAD)、建筑信息模型(BIM)、产品数字化手册。全自动驾驶系统、自适应智能电网、 “黑灯工厂”的自主调度。多学科模型融合、 “What-if”分析、提供决策建议。IoT设备监控平台、预测性维护(报警)、智慧仪表盘。工艺仿真优化、资产性能管理、手术方案预演、虚拟调试。状态监控、历史回溯、阈值报警、根因分析。可视化、数字化档案。自优化、自适应、目标驱动、高度自治。传统设备、纸质记录的管理模式。无或仅有离线、孤立数据。

2401_82881178的博客 1548

小程序获取用户的UniqueID 以及 openid

UniqueID 以及 openid的获取涉及到用户的敏感信息,返回的数据encryptedData是加密后的数据要提取信息需要对数据进行解密 官网提供了解密的算法,将nodejs的版本拿过来稍作修改即可 下载 cryptojs 放到项目的utils目录下 在utils 目录下新建decode.js 写入以下内容 //utils/decode.js var Crypto = require...

PromiseCao的博客 3084

开源项目 ruoyi-sso-oauth2(一)环境配置

Ruoyi若依实现单点登录SSO、oauth2认证

Xiaoweidumpb 9683

微信的 User ID、Open ID、Union ID区别

UnionID(Union ID):UnionID是一个可以跨多个公众号或小程序的唯一标识,用于标识同一个用户在不同应用中的身份。OpenID(Open ID):OpenID是用户在公众号或小程序中的唯一标识,用于标识用户在特定应用中的身份。同一个用户在不同的公众号或小程序中,会有不同的OpenID。需要注意的是,用户的OpenID和UnionID是通过用户的授权来获取的,而用户ID是由微信生成和管理的。用户ID(User ID):每个用户在微信平台上都有一个唯一的用户ID,用于标识用户的身份。

chunmiao3032的专栏 1万+

基于libVLC的视频播放器之四:直接使用libVLC

一.效果 播放本地文件 播放网络url:rtsp://3.84.6.190/vod/mp4:BigBuckBunny_115k.mov 二.实现 既然有VLC-Qt,为什么还要直接调用libVLC呢,因为直接调用会加深对整个播放流程的理解,方便后面修改VLC-Qt源码。 注意事项: 1.编译报错:error C2065: “libvlc_media_read_cb”: 未声明的标识符。修改如下: 2.libvlc_new(0, nullptr)返回null 将plugins

草上爬的博客 5048

使用SSC添加大量的SDO条目

使用SSC添加大量的SDO条目 SSC用表格添加SDO,PDO部分必须指定到0x1600和0x1A00分配TxPdo和RxPdo映射,在0x1C12和0x1C13分别分配到SM2和SM3。在0x6000和0x7000未指定的entry就是SDO部分。

PI_sunyang的博客 3165

小程序无登录场景:用户唯一标识获取方案全解析

本文探讨了小程序开发中无登录状态下获取用户唯一标识的解决方案。文章分析了四种实用方案:本地UUID缓存(推荐首选)、设备特征拼接、缓存openid复用及微信匿名登录(灰度能力),详细比较了各方案的优缺点、适用场景和实现代码。核心建议是:轻量级场景优先使用本地UUID缓存,核心业务必须引导用户登录。同时强调了合规性要求和数据安全注意事项,并提供了登录后数据迁移的实现逻辑。这些方案能有效平衡用户体验与业务需求,适用于不同场景的用户标识需求。

码路同行 1295

【GameFramework框架内置模块】6、实体(Entity)

实体Entity就是一个实体的基本单元,类似于Unity的GameObject对象本体,然后这个本体上面附加其他各种各样组件,才能实现各种各样的功能。一般需要在游戏运行时动态加载的游戏对象,比如怪物、武器、子弹、特效,都需要给这个物体挂载一个实体Entity,这样的话就可以方便的对实例出来的对象进行管理。下面就来看一下如何使用吧。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 3136

微信小程序获取openid,unionid

注意openid并不能作为小程序用户的唯一标识,不同用户有可能相同,unionid才是唯一标识,这个参数我们需要后台去微信绑定小程序后才有。(通过 https://api.weixin.qq.com/sns/jscode2session? 接口返回的参数获得) 方法一(前端获取) 注意:虽然前端能拿到openid,但是发布上线的时候会无法过审,因为出于安全考虑,前端代码不允许暴露小程序app...

uniquehzx的博客 2185

目前最强的价格行为技术分析AI!大A也能用!还免费!

有球友推荐了一个历史最强的价格行为技术分析AI工具,使用下来确实很惊艳,解决了 很多AI工具黑盒过程,难以回溯的问题,他的决策过程可解释,提供决策树、诊断结果、原始响应、调试信息和未来走势预期。用户能够看到模型为什么选择“做多、做空或不下单”。会检查置信度、入场条件、盈亏比、结构失效和冷却期。最大的优点不是“预测一定准确”,而是把主观的价格行为分析整理成了可重复、可解释、可校验、可持续跟踪的工程化流程。本文记录本项目在 Windows 上的实际部署与启动方法。

木头大左的博客 71

解锁IPG Photonics SmartWeld系统,开启焊接新时代

SmartWeld 系统是 IPG Photonics 研发的一款先进的激光焊接解决方案,它隶属于自动化激光焊接系统类别 ,但却凭借一系列创新技术和独特设计,在众多同类产品中脱颖而出。该系统基于 IPG 在光纤激光技术领域的深厚积累,融合了先进的光束控制、智能监测和自动化控制等技术,旨在为工业制造提供高效、精准且稳定的焊接工艺。与传统激光焊接系统相比,SmartWeld 系统的独特之处首先体现在其光束控制技术上。它能够精确地调整激光束的能量分布、光斑大小和形状 ,以适应不同材料和焊接工艺的需求。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1428

【课程设计】火锅外卖系统 计算机毕业设计源码 计算机毕业设计源码88126

系统采用前后端分离架构,后端基于Spring Boot,利用MyBatis实现数据持久化,并集成Redis缓存机制以提升高并发场景下的响应性能;前端通过微信小程序实现用户交互,店铺信息、菜品信息、美食资讯、网站公告列表、订单信息及评价等功能。针对火锅外卖的特点,系统创新性地设计了保温配送管理模块,并引入第三方物流接口实现订单状态实时同步[⑤]....

Biye_Design的博客 1296

让 SAP HANA 查询飞起来:彻底避开隐式类型转换的性能暗礁

SAP HANA性能优化:警惕隐式类型转换陷阱 隐式类型转换是SAP HANA项目中常见的性能隐患。当SQL表达式两侧数据类型不匹配时,系统会自动进行类型转换,这种看似便利的操作可能导致: 过滤条件无法下推,扫描范围扩大 列存引擎优势丧失,触发中间结果物化 执行计划走向低效路径 治理方案包括: 从源头统一数据类型,确保常用比较字段类型一致 将显式转换应用于常量而非整列 使用生成列预先转换存储,避免运行时计算 排查方法: 通过SQL Plan Cache定位高频查询 分析执行计划中的转换迹象 重点关注VARC

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 11万+

java调用微信加密_JAVA版微信小程序用户数据的签名验证和加解密

签名验证和加解密数据签名校验为了确保 开放接口 返回用户数据的安全性,微信会对明文数据进行签名。开发者可以根据业务需要对数据包进行签名校验,确保数据的完整性。签名校验算法涉及用户的session_key,通过 wx.login 登录流程获取用户session_key,并自行维护与应用自身登录态的对应关系。通过调用接口(如 wx.getUserInfo)获取数据时,接口会同时返回 rawData、s...

weixin_39616339的博客 573

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

OpenTSDB 的唯一ID(UniqueId)

RowKey设计 OpenTSDB 底层存储使用的是 HBase,HBase 将表中的数据按照 RowKey 切分成 HRegion,然后分散到集群的 HRegion Server 中存储并提供查询支持。 OpenTSDB 中可以通过 metric+tag 组合的方式确定唯一一条时序数据,因此 OpenTSDB 在设计 HBase RowKey 的时候就包含了 metric、tag、base_ti...

zx711166的博客 2451

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

php获取微信uninoid_详解微信小程序如何实现登录获取unionid的图文详解

这篇文章主要介绍了详解微信小程序 登录获取unionid的相关资料,需要的朋友可以参考下详解微信小程序 登录获取unionid首先公司开发了小程序, 公众号网页和app等, 之前都是用的openid来区分用户, 但openid只能标识用户在当前小程序或公众号里唯一, 我们希望用户可以在公司各个产品(比如公众号, 小程序, app里的微信登录)之间, 可以保持用户的唯一性, 还好微信给出了union...

weixin_39751391的博客 417

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

小程序授权登录注册自有账户体系

  现在一般的应用都有自己的账户体系,那么扩展了小程序前端入口后,大家都在思考用微信的授权实现自有账户体系快速登录/注册问题。正好最近公司的小程序也要想上这个功能,替换掉不必要的短信验证码快捷登录注册的业务场景,我也整理了下自己的思路,与大家分享和探讨一下基于安全前提下的小程序授权登录/注册问题。 一、前提说明 1.安全,对于数据,后端服务器永远是不相信前端传值的,因为后端只能判断接收既定规格的数...

onefur的博客 5425

生成唯一序列号 Unique ID

程序取号的锁竞争和网络延迟是不可避免的,所以最理想的Unique ID策略还是本地生成:把发号器内嵌到每个程序中,同时保证生成标准的同步。

无止于天涯 - Always on the Road 1万+

微信UnionID的作用

1、通过接口得到用户信息 https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN 2、拿到JSon返回值 { "subscribe": 1, "openid": "o6_bmjrPTlm6_2sgVt7hMZOPfL2M", ...

技术杠精的博客 1509

微信小程序中用户唯一ID的获取

折腾到半夜,搞得挺兴奋,总结一下,免得忘了: 1、微信小程序直接获得的是一些简单信息,基本无用 2、用户唯一标识是openid,还有一个unionid是关联多个公众号之类情况下用,我不大关心 3、在getUserInfo的返回数据中,有加密信息, wx.getUserInfo({ success: function(res) { } }) res包括userInfo,iv,...

weixin_34361881的博客 6258

唯一标识 微信小程序_微信小程序中用户唯一ID的获取

折腾到半夜,搞得挺兴奋,总结一下,免得忘了:1、微信小程序直接获得的是一些简单信息,基本无用2、用户唯一标识是openid,还有一个unionid是关联多个公众号之类情况下用,我不大关心3、在getUserInfo的返回数据中,有加密信息,wx.getUserInfo({success: function(res) {}})res包括userInfo,iv,rawData,signature,en...

weixin_36296444的博客 2860

Java获取小程序openId

最近公司要开发小程序,由于业务需要,需要在用户注册时获取用户的openId作为userId进行注册一、获取code将code作为参数传递过来//如果有code,说明是微信小程序,根据code获取openId //classify用于标识是哪个小程序 if (!CheckUtil.checkNulls( keUser.getCode(),keUser.getClassify()

Bronna的博客 7036

微信小程序中的用户ID(包括openid和unionid)

最近在做微信小程序的开发,以前小程序这块接触的不多,所以就想把在项目中每一步遇到的问题总结下来。 开始做的时候,这个openId肯定是要打交道的。那下面我们来看一下openId到底是怎么一回事吧。 做过微信开发的同学,多多少少都会涉及到用户的唯一标识的问题。由于微信牢牢把控着用户的信息,因此当你需要在微信平台中获取用户的标示信息,必然要通过微信的平台接口来获取(其实这个openId是来区分用户唯一...

时清云的博客 1万+

微信小程序把玩(三十八)获取设备信息 API

获取设备信息这里分为四种,主要属性: 网络信息wx.getNetWorkType, 系统信息wx.getSystemInfo,重力感应数据wx.onAccelerometerChange,罗盘数据wx.onCompassChange wxml<button type="primary" bindtap="getNetWorkType">获取网络类型</button> <button type="p

FUCK 2万+
上一篇: 前端页面 h5使用vue搭建带播放列表切换的音频播放器 audio
下一篇: 微信公众号 支付----企业付款微信用户(商户号,微信公众号:appid,openid)demo
阿……莫西林
博客等级 码龄9年 42粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值