网站模板下载网站,淘宝客怎么做直播网站,网站开发河南,单位网站建设做到哪个科目前言#xff1a;在实际项目开发中我们经常会遇到账号统一的问题#xff0c;如何在不同端或者是不同的登录方式下保证同一个会员或者用户账号唯一#xff08;便于用户信息的管理#xff09;。这段时间就有一个这样的需求#xff0c;之前有个客户做了一个微信小程序商城 在实际项目开发中我们经常会遇到账号统一的问题如何在不同端或者是不同的登录方式下保证同一个会员或者用户账号唯一便于用户信息的管理。这段时间就有一个这样的需求之前有个客户做了一个微信小程序商城店主端的然后现在又要做一个会员购物端的小程序商场。首先之前用户登录凭证都是使用微信openid来做的唯一标识而现在客户需求是要做到用户在会员端小程序跳转到到店主端小程序假如之前该用户微信是在店主端审核通过的用户则不需要在进行资料提交审核操作直接登录。所以所以我们使用了UnionID来进行关联如下是我们现在项目的基本流程画的丑莫见怪。说说UnionID机制 如果开发者拥有多个移动应用、网站应用、和公众帐号包括小程序可通过 UnionID 来区分用户的唯一性因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号包括小程序用户的 UnionID 是唯一的。换句话说同一用户对同一个微信开放平台下的不同应用unionid是相同的。官方UnionID机制详细说明https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/union-id.html微信开放平台绑定小程序流程登录微信开放平台 — 管理中心 — 小程序 — 绑定小程序直接使用微信官方图微信小程序获取UnoinID的两种方式调用接口 wx.getUserInfo从解密数据encryptedData中获取 UnionID推荐使用推荐使用原因无需关注微信公众号即可获取到UnionID。调用接口wx.getUserInfo前提用户允许授权获取用户信息开发者后台校验与解密开放数据 微信为了保证用户信息把用户通过wx.getUserInfo接口获取到的相关敏感信息进行了加密。加密方式对称加密后面会提到首先我们需要通过微信小程序登录流程获取到用户的session_key(会话密钥)然后我们可以报获取到的会话密钥使用缓存存起来在通过用户授权获取用户相关信息如下是用户授权成功获取到的用户信息基本流程图如下(encryptedData)加密数据解密算法开发者如需要获取敏感数据需要对接口返回的加密数据(encryptedData) 进行对称解密。解密算法如下对称解密使用的算法为 AES-128-CBC数据采用PKCS#7填充。对称解密的目标密文为 Base64_Decode(encryptedData)。对称解密秘钥 aeskey Base64_Decode(session_key), aeskey 是16字节。对称解密算法初始向量 为Base64_Decode(iv)其中iv由数据接口返回很遗憾的是微信居然没有为我们大.Net提供解密算法demo实属让人不算最后自己根据网上的资料还是配上了符合微信对称加密的解密算法。代码实现首先关于session_key会话密钥的获取请看下面的wx.logincode2Session 方式调用接口wx.getUserInfo获取encryptedData加密数据和iv初始向量.Net WebApi 解密数据接口注意参数使用Convert.FromBase64String转化提示“Base-64字符数组的无效长度” 的问题原因:加密参数中的通过地址栏传过来时,后台会解析为空格。解决最好的做法是 使用encryptedData.Replace(, %2B)先将空格编码然后再作为参数传给另一页面传递这样页面在提取参数时才会将“%2B”解码为加号.但这儿为了简化将空格直接还原为或者是直接在后台将空格替换为“”encryptedData.Replace( , );直接通过 wx.login code2Session 获取到该用户 UnionID其实这个方式就是实现了小程序的登录流程微信官方详细说明https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html优点无需用户授权。前提用户需要关注该微信公众号。小程序端调用接口wx.login获取code凭证在通过请求auth.code2Session接口获取用户信息UnionID,openid,session_key会话密钥两种方式1.直接通过wx.login请求到code凭证后在请求该地址获取用户信息详细说明请看微信官方文档代码略https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html2.通过请求wx.login获取code凭证在向.net webapi后端请求code2Session接口原因因为我们需要对获取的用户信息做相关业务逻辑处理。微信小程序端代码/***封装用户promise登录通过code凭证获取用户信息UnionID,openid,session_key会话密钥*/userLogin: function() {var that this;//定义promise方法return new Promise(function(resolve, reject) {//调用登录接口wx.login({success: function(res) {if (res.code) {console.log(用户登录授权code为 res.code);//调用wx.request请求传递code凭证换取用户openid并获取后台用户信息wx.request({url: https://www.xxxx.xxx.api/User_oAuth/GetUserInfo,//后台请求用户信息方法data: {code: res.code //code凭证},header: {content-type:application/json // 默认值},success(res) {console.log(res.data)if (res.data.errcode 0) {//存入session缓存中console.log(res.data.openid);//微信用户唯一标识console.log(res.data.UnionID);//微信开发平台联合IDconsole.log(res.data.session_key);//会话密钥//***注意****//注意这里是直接把session_key缓存起来在上面wx.getUserInfo会使用到wx.setStorageSync(session_key,res.data.session_key);//promise机制放回成功数据 resolve(res.data);} else { reject(error); }}, fail: function(res){reject(res);wx.showToast({ title: 系统错误 })}, complete: () { } //complete接口执行后的回调函数无论成功失败都会调用 }) } else {reject(error);}}})})}.Net WebApi 请求用户信息接口原文链接https://www.cnblogs.com/Can-daydayup/p/11437754.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com