有幸参加微信小程序的内测,由于公司之前已经有自己的服务大号,积累转化了大量的会员
所以在做小程序时,要实现会员的互通,想到的是 unionid
开发文档
wx.login(OBJECT)
调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid)及本次登录的会话密钥(session_key)
参见:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html?t=1474887500719
wx.getUserInfo(OBJECT)
获取用户信息,需要先调用wx.login接口
其中需要的unionid在调用成功返回的
参见:https://mp.weixin.qq.com/debug/wxadoc/dev/api/open.html?t=1474887500618
是个加密数据,解密算法
参见:https://mp.weixin.qq.com/debug/wxadoc/dev/api/signature.html
实现code 换取 session_key
前端先调 wx.login 得到code
后端换取session_key和openid, openid返回前端,session_key保存(缓存)解密用
注意:一个code只能换取一次;
再次调用wx.login, 会导致上一次的 session_key 失效,解密出来的都是乱码
2.解密
前端先调 wx.getUserInfo得到encryptData
用login返回的openid,encryptData 调后端解密
刚开始按开发文档,用C# 系统自带AES解密失败
报“填充无效,无法被移除”异常
在网上扒拉了一圈,也没找到有用的信息,最终在github上,找带了参考代码,自己再改改,才解密成功
结语
代码本身没啥牛逼的,希望贴出来能对后面的开发伙伴有所帮助 :)