nanshenjiang:[reply]ox_maple[/reply] 源码的话可以看一下我的github:,在这个项目中我使用到了完整的权限管理和登录功能spring security,但是是比较早之前写的,所以已经很久没有维护了,可能会存在问题,有问题可以再来问我~~~~(仅仅是做到了登录,如果你需要做项目,可以查一下token的用法--用于登录认证的身份令牌作用,我这个项目里面没有加入token~~~就是个练手项目~~~)
微信小程序基于微信进行开发,而微信又存有用户信息,我们是否可以直接通过微信端获取用户信息,则无需用户进行再次输入个人信息。
微信小程序可以通过wx.getUserInfo()接口来获取部分用户信息,我们可以参考微信文档之wx.getUserInfo()。
但是如果我们要获取用户在该程序的唯一性标志openid,又或者用户在所有微信小程序的唯一性标志unionid,则无法直接通过该接口获取。另外,wx.getUserInfo()接口经过改版,无法一登录就会弹窗让用户授权,现在要通过编程设置按钮引导用户点击获取用户信息,这样子的改版被很多程序猿吐槽,我们也看看官方说明。
在解决新版本带来的问题之前,我们先来说一下除了这些基本用户信息以外,openid和unionid也是很多微信小程序所要获得存储的,先来说明一下两个id的含义:
(1) openid:一个用户在一个微信小程序下都有唯一标志,这个标志是证明该用户在该小程序的唯一性存在的标志。小程序可以通过获取openid来确定该用户在小程序中的身份
(2)unionid:微信下不同产品(如公众号和小程序),用户在不同产品下都有着唯一性的标志unionid,我们可以通过该标志确定用户在不同产品下唯一身份,这样就打通所有的小程序和公众号的账号系统。小程序可以通过获取unionid来绑定自身公众号,而用户要支付等操作时也需要有unionid的证明。
获取用户普通信息(就是昵称这类)虽然受到改版影响,但是实际上获取困难性并无增加多少,只需要通过设置按钮通过点击按钮事件触发wx.getUserInfo()j即可。而两个私密id才是这次获取困难性的来源。当然,在说明获取两个id的时候也会讲解一下获取用户普通信息。
在说明获取用户openid和unionid之前,我们先说一下微信小程序在我们建立程序的时候给的标准模板,该模板里面就是设置有按钮和获取用户信息的代码,而且我们可以通过查看简书文章:微信小程序登陆个人信息授权app与page的执行顺序先了解一下该小程序模板运行的模式。但是该模板中没有说明如何获取openid和unionid,而且没有和数据库后端交互。
获取了用户的unionid的过程中自然要获取用户的openid,我们可以查看掘金:微信小程序之获取并解密用户数据(获取 openId、unionId),文章是17年编写的,当时版本还未改变,所以里面微信小程序的操作时不起作用的。但是在后端使用spring boot进行操作的过程是可以借鉴的。
unionid的获取是要先通过wx.login()接口(可通过微信小程序文档查看)获取code,发送get请求到微信小程序后端获取openid和session_key,这时候就获得了openid了,但是unionid作为更为隐秘的信息,则这时候是还未获得的。这时候我们就要再通过wx.getUserInfo()获取encryptedData和iv(查看微信小程序文档),其中encryptedData封装了用户信息和unionid(查看微信小程序文档),但是使用了AES进行加密,这时候我们要将encryptedData和iv发送到后端进行AES解密出unionid进行存储即可。
由于我并不需要确定用户在不同小程序和公众号之间的唯一性,而我只需要确定用户在我程序中的唯一性,即只需要获得openid进行存储即可。所以我通过上面掘金文章解决方法说一下获取用户openid的过程:
开发版中是不可以直接识别外网生成的api接口的,所以我们需要用到一些渗透工具,这里特来记录一下。
使用wx.request(OBJECT)来调用后端接口(作为一个后端人员,还是要学习一些前端知识的。。):wx.request({url:test.php,//仅为示例,并非真实的......

