现在做小程序的人越来越多,不管是商家做线上生意,还是开发者接项目,“登录环节咋让用户授权、咋拿到信息”都是绕不开的事儿,但不少人一头雾水:点登录按钮后咋和微信后台交互?用户授权弹窗啥时候弹才合规?拿到信息后咋存、咋用才不违规?今天就把小程序登录+获取用户信息的流程、坑点、合规点一次性掰碎了讲明白~
很多人把“登录”和“获取用户信息”混为一谈,其实是两个环节:
登录是小程序和微信后台建立会话:用户点登录,小程序发个“code”给微信服务器,微信返回openid
(用户在你小程序里的唯一标识)和session_key
(会话密钥),相当于给这个用户开个“临时通行证”,后续操作(比如下单、存信息)能关联到这个用户。
获取用户信息是拿到用户授权的公开/私密数据:早年小程序能直接拉取用户信息,现在得用户主动点授权按钮(比如带open-type="getUserInfo"
的按钮),才能拿到昵称、头像这些,要是想拿手机号,还得额外走getPhoneNumber
的授权流程。
简单说:登录是“确认你是你”,获取信息是“你愿意把哪些信息给我”,流程上有先后,也能结合着做。
实操步骤:从前端到后端咋落地?
得前后端配合,分小程序端(用户手机上点的部分)和服务器端(后台处理数据的部分)来讲:
(1)小程序前端:触发登录+引导授权
先做登录触发:用wx.login()
接口,逻辑是用户点“登录”按钮,小程序调用wx.login
,拿到临时code
(这玩意儿5分钟就失效,得赶紧传给后端)。
然后是用户信息授权:现在不能自动弹授权窗了,得用微信提供的<button>
组件,给按钮加open-type
属性,比如要拿基础信息(昵称、头像),就设open-type="getUserInfo"
;要拿手机号,设open-type="getPhoneNumber"
,用户点这个按钮,才会弹出微信的授权确认框。
举个场景:做个外卖小程序,登录按钮点了先执行wx.login
拿code,同时页面上放个“允许获取头像昵称”的按钮,用户点了按钮,前端能拿到encryptedData
(加密后的用户信息)和iv
(加密向量),这些后面要传给后端解密。
(2)服务器后端:拿code换凭证+解密信息
后端得做两件核心事:
第一步,用code换openid和session_key:把前端传来的code
,发到微信接口https://api.weixin.qq.com/sns/jscode2session
,参数带上小程序的appid
、secret
、code
,微信返回openid
(用户唯一ID)、session_key
(解密用户信息的钥匙),这一步必须后端做,因为appid
和secret
不能暴露在前端,否则被人扒了能伪造请求。
第二步,解密用户信息(如果需要):前端拿到的encryptedData
是加密的,得用session_key
和iv
去解密,不同语言解密方式不一样,比如Node.js用crypto
模块,PHP用openssl_decrypt
函数,解密后才能拿到用户的真实昵称、头像、unionid(如果用户授权且小程序绑定开放平台)这些数据。
注意:如果只需要用户标识(openid),不用拿详细信息,那第二步可以跳过,减少用户授权负担。
用户授权环节的“合规+体验”坑点
很多小程序被拒审,或者用户骂体验差,都是授权环节没处理好,这几个点必须盯紧:
(1)不能“强逼”用户授权
微信明确规定:授权弹窗必须用户主动触发,不能一进小程序就自动弹,也不能把授权和核心功能绑架(比如不授权就不让进首页),正确做法是:先让用户能浏览基础内容,点“登录享优惠”这类按钮时再引导授权。
(2)用户拒绝授权后咋处理?
用户第一次点授权选了“拒绝”,之后再点按钮不会自动弹授权窗了,这时候得做“重新引导”:比如弹窗提示“需要你的头像昵称才能生成专属名片,去设置里打开权限哦~”,引导用户去微信设置里手动开授权。
(3)授权信息的“必要性”
别为了“收集数据”而要信息,比如做工具类小程序,只需要用户标识(openid)就能记录使用记录,就别要昵称头像;做社交类小程序,要头像昵称才合理,过度索取信息会让用户反感,也违反《个人信息保护法》。
开发时最容易踩的“技术坑”
流程走通了,技术细节没处理好也会崩,这几个高频问题得提前避坑:
(1)code过期导致登录失败
wx.login
拿到的code只有5分钟有效期,所以前端拿到code后要立刻传给后端,别存到本地等半天再发,后端收到code后,也得马上调用微信接口换session_key,超时了code就废了,用户得重新点登录。
(2)session_key过期或被盗用
session_key和用户会话绑定,用户退出小程序再进来,session_key可能失效(微信会不定期刷新),如果拿旧的session_key解密用户信息,就会解密失败,解决办法:后端定期刷新session_key,或者每次解密失败后,引导用户重新登录(触发wx.login换新的code和session_key)。
(3)多端小程序的差异
要是同时做微信、支付宝、抖音小程序,每个平台的授权接口不一样,比如支付宝小程序用my.getAuthCode
,抖音用tt.login
,得针对每个平台单独处理授权逻辑,不能直接照搬微信的代码。
合规红线:用户信息咋存、咋用?
现在用户信息是“敏感资产”,法律和平台规则卡得严,这几点踩了轻则审核不通过,重则吃罚单:
收集环节:必须明确告知用户“收集啥信息、用来干啥”,比如弹窗写“为了给你生成个性化订单页,需获取你的昵称和头像”,用户点同意才算数。
存储环节:用户信息要加密存储(比如数据库里存加密后的手机号),别明文放服务器里,防止被拖库泄露。
使用环节:只能用在用户授权的场景里,不能把用户手机号卖给第三方,也不能拿昵称去做营销短信群发(除非用户单独授权营销用途)。
小程序登录+获取用户信息是个“前端引导+后端解密+合规兜底”的组合活,流程上要把登录和授权拆明白,技术上盯紧code和session_key的时效性,体验上别强逼用户授权,合规上守住信息收集使用的边界,把这些环节理顺了,用户登录顺滑,小程序也能安全合规地跑起来~要是你还有具体场景的问题(比如做社区小程序咋设计授权流程),评论区随时聊~
网友评论文明上网理性发言已有0人参与
发表评论: