(苹果多开软件)如何写出微信小程序需要的软件
描述:微信小程序,点击微信第三方登录,获取当前用户绑定的手机号和openId(或unionid),请求后台接口登录。
功能分割逻辑:
点击一个按钮,弹出请求微信授权的界面。点击允许按钮,获取微信绑定的手机号和openId请求的后端接口,从而登录。重点是前两步。我们来看看实际的执行情况。
根据微信小程序开发文档和小程序官方文档的描述,先写一个按钮,设置开放类型为getPhoneNumber,在uniapp页面创建一个按钮:
& lt按钮打开-type = " getPhoneNumber " @ getPhoneNumber = " onGetPhoneNumber " & gt;调用授权
& lt按钮打开-type = " getPhoneNumber " bind getPhoneNumber = " getPhoneNumber " & gt;& lt/button & gt;调用wx.login接口获取代码??根据官方文档描述,想要获取加密的手机号,必须先登录,所以我们在页面的onload中调用微信登录接口,获取代码。代码示例:
onload(){ wx . log in({ success:(RES)= & gt;{ if(RES . code){ } else { console . log('登录失败!'+RES . errmsg)} } } } }会话和openId的交换代码。获取微信成功登录后返回的代码后,我们要通过两种方式进行session和openid/unionid的代码交换:
第一个不使用后端(不推荐),第二个使用后端。1.不用后端获取,也就是你必须知道你的小程序的APPID和secret。这个可以在小程序控制台->:开发->:开发中看到,然后用APPID secret和上一步获取的代码请求微信的auth.code2Session接口获取Session和openid auth.code2Session文档??如果这样做,你的小程序的APPID和secret会明文出现在前端代码中,存在泄露的风险。
转换上面的onload事件代码示例:
onload(){ wx . log in({ success:(RES)= & gt;{ if(RES . code){ this . jscode = RES . code uni . request({ URL:' https://API . weixin . QQ . com/SNS/jscode 2 session ',method:'GET ',data:{ appid:' wx * * * * * * * * * ',secret:' xxxxxxxxxxxxx ',code: res.code },success:(cts)= & gt;{ this . OpenID = cts . data . OpenID this . unionid = cts . data . unionid this . session _ key = cts . data . session _ key } });} else {console.log('登录失败!'+RES . errmsg)} })}??注:1。如果请求jscode2session接口失败,请在你的小程序后台添加https://api.weixin.qq.com【请求合法域名】
Unionid不会每个账户都返回,必须在满足发放UnionID的条件时返回。详见UnionID机制描述。2.让它通过后端。通过后端获取,其实就是要求后端给你一个接口。你请求后端的接口,然后后端请求微信的jscode2session,这样你的前端只需要提交代码。APPID和secret存储在后端,不容易泄露。例如,我的后端开发了一个接口https://www.xx123.com//common/unionId.do,.,我只需要在上面的代码中更改请求的地址和参数。代码示例
onload(){ wx . log in({ success:(RES)= & gt;{ if(RES . code){ uni . request({ URL:' https://www . xx123 . com//common/unionid . do ',方法:' POST ',数据:{ code: res.code },成功:(cts)= & gt;{ this . OpenID = cts . data . OpenID this . unionid = cts . data . unionid this . session _ key = cts . data . session _ key } });} else {console.log('登录失败!'+res.errMsg)}} })}按钮点击触发事件onGetPhoneNumber
经过以上步骤,我们终于可以得到加密的用户信息了。在页面的方法中创建一个点击触发事件,注意判断用户是否拒绝授权。
代码示例:
方法:{ onGetPhoneNumber(e){ if(e . detail . errmsg = = " getPhoneNumber:fail user deny "){ } else { console . log(e . detail . encrypted data)e . detail . encrypted data e . detail . iv } }解密用户信息。我们拿到了。这是加密的。接下来我们怎么解密?解密方式主要有三种,第三种因为条件有限暂时无法尝试。还是主要说说前两个。
前端解密,后端解密,云开发解密(仅适用于启用云开发的小程序)1。前端解密(1)安装crypto-js,用npm安装crypto-js
安装命令:
NpInstall Crypto-js (2)下载WXBizDataCrypt.js文件WXBizDataCrypt.js微信官方下载地址
下载后会发现是后端文件??????没关系。图像
打开节点文件夹,将WXBizDataCrypt.js文件放入项目中。(例如,我将它放在我的常用文件夹中)
引用页面上要解密的文件。
从“@/common/WXBizDataCrypt.js”导入WXBizDataCrypt(3)调用解密转换onGetPhoneNumber方法。注意,这里仍然使用applet的APPID。
代码示例:
方法:{ onGetPhoneNumber(e){ if(e . detail . errmsg = = " getPhoneNumber:fail user deny "){ } else { let PC = new WXBizDataCrypt(' wxXXXXXXX ',this . session _ key);let data = PC . decrypt data(e . detail . encrypted data,e . detail . iv);Console.log (data)}}解密的用户信息:image
存在前端解密会泄露前端小程序的APPID的风险(因为我们后端是java,官方没有dome文件,所以只能在前端解密)????
2.后端解密后端解密和后端创建一个接口的方式是一样的,前端请求这个接口,提交encryptedData iv和session_key让后端把解密后的信息返回给你。
代码示例:
方法1:{ onGetPhoneNumber(e){ if(e . detail . errmsg = = " getPhoneNumber:fail user deny "){ } else { uni . request({ URL:' https://www . xx123 . com//common/decode . do ',
方法2:' POST ',数据:{ iv:e.detail.iv,encrypted data:e . detail . encrypted data,session:this.session_key,},success:(RES)= & gt;{ console . log(RES . data)});} } }