.NET Core 微信公众号小程序6种获取UnionID方法,你知道哪几种?
前言
获取UnionID是开发微信公众号/小程序中很有必要的一个环节,特别是针对一个公司拥有多个公众号小程序而推出的机制,实现打通账户一体化,用UnionID来区分多平台的唯一性。
官方的解释:如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。
相关开发文章:
.NET Core 小程序开发零基础系列(1)——开发者启用并牵手成功
.NET Core 小程序开发零基础系列(2)——小程序服务通知(模板消息)
目录
1、UnionID机制说明
2、UnionID获取的6种途径(代码实现)
3、总结
UnionID机制说明
如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。
UnionID获取的6种途径(代码实现)
绑定了开发者帐号的小程序,可以通过以下途径获取 UnionID
UnionID获取的6种途径
调用接口 wx.getUserInfo,从解密数据中获取 UnionID。注意本接口需要用户授权,请开发者妥善处理用户拒绝授权后的情况。
如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号。开发者可以直接通过 wx.login +
code2Session获取到该用户 UnionID,无须用户再次授权。如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。开发者也可以直接通过 wx.login +
code2Session获取到该用户 UnionID ,无须用户再次授权。用户在小程序(暂不支持小游戏)中支付完成后,开发者可以直接通过
getPaidUnionId接口获取该用户的 UnionID,无需用户授权。注意:本接口仅在用户支付完成后的5分钟内有效,请开发者妥善处理。小程序端调用云函数时,如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号,可在云函数中通过 cloud.getWXContext 获取 UnionID。
小程序端调用云函数时,如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用,也可在云函数中通过 cloud.getWXContext 获取 UnionID。
第一种UnionID获取
调用接口 wx.getUserInfo,从解密数据中获取 UnionID。注意本接口需要用户授权,请开发者妥善处理用户拒绝授权后的情况。
最常见的一种,很多同学应该用的这种。
流程:用户授权——获取密钥——后端解密——获取UnionID
开放平台绑定小程序如图:

前端授权获取密钥:


后端解密获取UnionID
varsettingItem = Senparc.Weixin.Config.SenparcWeixinSetting.Items[appID];
JsCode2JsonResult jsonResult = SnsApi.JsCode2Json(settingItem.WxOpenAppId, settingItem.WxOpenAppSecret, param.Code);
if (jsonResult.errcode != ReturnCode.请求成功)
{
return (false, jsonResult.errmsg);
} string unionID;
var encryptedData = Senparc.Weixin.WxOpen.Helpers.EncryptHelper.DecodeEncryptedData(jsonResult.session_key, param.EncryptedData, param.IV);
DecodedUserInfo decodedUserInfo = SerializerHelper.GetObject<DecodedUserInfo>(encryptedData);
unionID = decodedUserInfo.unionId;
第二种UnionID获取
如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号。开发者可以直接通过 wx.login + code2Session 获取到该用户 UnionID,无须用户再次授权。
流程:关注了公众号——获取UnionID
1、关注同一主体公众号就好了
2、获取UnionID,如下代码
varsettingItem = Senparc.Weixin.Config.SenparcWeixinSetting.Items[appID];
JsCode2JsonResult jsonResult = SnsApi.JsCode2Json(settingItem.WxOpenAppId, settingItem.WxOpenAppSecret, param.Code);
if (jsonResult.errcode != ReturnCode.请求成功)
{
return (false, jsonResult.errmsg);
} string unionID;
if (!jsonResult.unionid.IsNullOrEmpty())
{
unionID = jsonResult.unionid;
Console.WriteLine($"unionID获取(无需解密):参数EncryptedData={param.EncryptedData},IV={param.IV},unionID={unionID}");
}
第三种UnionID获取
如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。开发者也可以直接通过 wx.login + code2Session 获取到该用户 UnionID ,无须用户再次授权。
流程:与第二步流程类似,可以参数
第四种UnionID获取
用户在小程序(暂不支持小游戏)中支付完成后,开发者可以直接通过getPaidUnionId接口获取该用户的 UnionID,无需用户授权。注意:本接口仅在用户支付完成后的5分钟内有效,请开发者妥善处理。
流程:订单支付成功得到相应信息——通过接口请求getPaidUnionId得到UnionID
1、支付流程请参考:.NET Core 微信小程序支付——(统一下单)
2、通过接口请求getPaidUnionId得到UnionID
以下两种方式任选其一。
a、微信支付订单号(transaction_id)
https://api.weixin.qq.com/wxa/getpaidunionid?access_token=ACCESS_TOKEN&openid=OPENID&transaction_id=TRANSACTION_ID
b、微信支付商户订单号和微信支付商户号(out_trade_no 及 mch_id)
https://api.weixin.qq.com/wxa/getpaidunionid?access_token=ACCESS_TOKEN&openid=OPENID&mch_id=MCH_ID&out_trade_no=OUT_TRADE_NO
通过两个接口请求方式就可以得到UnionID
第五种UnionID获取
小程序端调用云函数时,如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号,可在云函数中通过 cloud.getWXContext 获取 UnionID。
流程:关注了公众号——通过云函数获取UnionID
官方函数说明:

代码示例:
const cloud = require('wx-server-sdk')
exports.main = async (event, context) => {
const {
OPENID,
APPID,
UNIONID,
ENV,
} = cloud.getWXContext()
return {
OPENID,
APPID,
UNIONID,
ENV,
}
}
第六种UnionID获取
小程序端调用云函数时,如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用,也可在云函数中通过 cloud.getWXContext 获取 UnionID。
流程:与第五种类似,可以参数。
总结
获取UnionID是开发微信众号/小程序很有必要的一个环节,主要为了打通微信多平台体系下的唯一性,6种方式中,其实最关键的一步是将当前开发的应用绑定在开放平台上,希望这篇文章让你对UnionID有些新的认识,也希望这篇实战文章能够真正的帮助到你。
.NET Core 微信公众号小程序6种获取UnionID方法,你知道哪几种?的更多相关文章
- TP3.2校验微信公众号||小程序 服务器地址
1.在TP3.2里面,写一个控制器,用来校验微信公众号||小程序的服务器地址 <?php namespace Home\Controller; use Think\Controller; hea ...
- PHP 微信公众号/小程序获取openid,用户信息
1.获取code (获得openid的前置条件) 地址:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redi ...
- 微信 公众号 小程序 授权 unionid 用户信息 实验总结
-*-*-*-*-*-*-*-*-*--*-*-*-1.小程序通过code获取用户openid的接口,如果用户曾经授权并未过期,或者用户关注过同主体的公众号,会带回unionID,但没有用户头像等信息 ...
- 微信公众号&小程序 -- 获取并解密用户数据(获取openId、unionId)
本文转自https://my.oschina.net/u/3235888/blog/832895 前言 微信小程序API文档:https://mp.weixin.qq.com/debug/wxadoc ...
- apipost 调试微信公众号 小程序,秒生成文档工具
1.将已经鉴权的公众号,小程序接口的 header头信息复制进来 2.设置文档展示字段
- PHP原生实现,校验微信公众号||小程序服务器地址
1.原生的.php文件: test.php <?php header('Content-type:text'); define("TOKEN", "weixin& ...
- [python]通过微信公众号“Python程序员”,编写python代码
今天发现微信公众号中,居然可以编写python代码,很是惊喜,觉得蛮有趣的. 步骤如下: 1.关注微信公众号“Python程序员” 2.关注成功后,点击右下角的“潘多拉”->"Pyth ...
- 微信公众号开发(三)获取access_token
微信公众号开发(三)获取access_token 1.说明 access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存.acce ...
- weiphp 微信公众号用程序来设置指定内容消息回复业务逻辑操作
微信公众号机器人回复设置 在公众号插件里面的Robot- Model- weixinAddonModel.php里面的 reply设置 reply($dataArr,$keywordArr) 解析方法 ...
随机推荐
- Python保留小数的几种方法
Python保留小数的几种方法 1.使用字符串格式化 print("%.2f"%a) 2.使用round内置函数 round(num,2) 3.使用Decimal模块 from d ...
- Java EE—最轻量级的企业框架?
确保高效发展进程的建议 很久以前,J2EE,特别是应用程序服务器被认为过于臃肿和"重量级".对于开发人员来说,使用此技术开发应用程序会非常繁琐且令人沮丧.但是,由于 J2EE 框架 ...
- Vert.x学习之 Web Client
Vert.x Web Client 原文档 组件源码 组件示例 中英对照表 Pump:泵(平滑流式数据读入内存的机制,防止一次性将大量数据读入内存导致内存溢出) Response Codec:响应编解 ...
- FreeSql (二十一)查询返回数据
FreeSql 采用 ExpressionTree 优化读取速读,如果懂技术的你一定知道 .NETCore 技术下除了原生代码,最快就是 Emit 和 ExpressionTree. 项目在初期使用的 ...
- 面试官:服务器安装 JDK 还是 JRE?可以只安装 JRE 吗?
前些日子有知友面试时被问到如题所示的问题,由于他之前没有准备到这些最最基础的知识,没有考虑过这个问题,所以被问到时竟一脸萌币,回答的不是很好.这道题主要考的是对 Java 基础知识的了解,有些同学可能 ...
- gh-ost 原理剖析
gh-ost 原理 一 简介 上一篇文章介绍 gh-ost 参数和具体的使用方法,以及核心特性-可动态调整 暂停,动态修改参数等等.本文分几部分从源码方面解释gh-ost的执行过程,数据迁移,切换细节 ...
- C++ std::thread概念介绍
C++ 11新标准中,正式的为该语言引入了多线程概念.新标准提供了一个线程库thread,通过创建一个thread对象来管理C++程序中的多线程. 本文简单聊一下C++多线程相关的一些概念及threa ...
- FourAndSix2 靶机渗透
0x01 简介 FourAndSix2是易受攻击的一个靶机,主要任务是通过入侵进入到目标靶机系统然后提权,并在root目录中并读取flag.tx信息 FourAndSix2.镜像下载地址: https ...
- uni-app开发微信小程序的几天时间
人只有在不断的学习,才能不断的给自己充电,如果我们停止了学习,就像人没有了血脉,就会死亡,近来学习比较忙,压力比较大,整天面对着电脑,敲击代码,从中虽然收获了快乐,但是换来的确实身体的伤痛,最近虽然自 ...
- php 两种获取分类树的方法
php 两种获取分类树的方法 1. /** * 获取分类树 * @param array $array 数据源 * @param int $pid 父级ID * @param int $level 分 ...