外观
小程序登录和支付的关键步骤是什么?
登录是用 wx.login 拿到临时 code,交给自己的服务器,服务器向微信换用户标识和会话。支付是服务器下单并签名,客户端拿着参数调起支付,再以服务器查单的结果为准。
原理
code 只能用一次,而且会过期。不要把 code 当登录态存起来。服务器换回会话之后,发自己的会话或令牌给小程序,之后请求都带这个令牌。
用户信息、手机号需要单独的授权按钮,不能在登录时偷偷拿到。界面展示的昵称以用户本次授权为准。
支付时,客户端把商品和金额发给自己的服务器。服务器向微信统一下单,把返回的支付参数交给小程序。wx.requestPayment 成功只说明客户端流程走完,最终以服务器收到的支付结果通知,或服务器主动查单为准。客户端回调可能丢,也可能被伪造。
金额、订单号在服务器上计算和校验。客户端传来的价格不能直接信。
追问
和网页微信登录像吗?
网页是 OAuth 跳转,小程序是 wx.login 的 code。两边的标识不一定相同,打通账号要在服务器上做绑定,不要假设 openId 通用。
支付中途退出呢?
客户端没有成功回调。用户再进来时,用订单号向自己的服务器查询。服务器再向微信查询,不要只看本地存储里的「未支付」。
易错点
- 把
wx.login的code放进每个接口当身份。 - 客户端收到支付成功就给用户加权益。
- 密钥放进小程序代码。密钥只留在服务器。