微信支付流程中提到的小程序调起支付API:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=3
里面paySign的参数直接用后端返回的,还是需要前端再重新计算,具体,例如后端返回的时间戳是1579253567275,当前的前端收到请求后的时间戳是1579253598280。我用前端的最新的还是用后端返回的?为什么如此设计?麻烦各位大佬或官方帮忙解答下。
paySign = MD5(appId=wxd678efh567hg6787&nonceStr=5K8264ILTKCH16CQ2502SI8ZNMTM67VS&package=prepay_id=wx2017033010242291fcfe0db70013231072&signType=MD5&timeStamp=1490840662&key=qazwsxedcrfvtgbyhnujmikolp111111) = 22D9B4E54AB1950F51E0649E8810ACD6
所有参数用后台返回的
--↓↓👍点赞是回答的动力哦
一般小程序到支付这个页面之前已经在其他页面wx.login过并将code传给了后端,后端通过code获取了openid,将其转成token(原third_session)返回给前端,前端之后调用任何接口均携带这个token。
其中,调支付接口的时候,后端将token再转成openid,从而调用统一下单api和将组合数据再次签名后返回给前端。
这个时候前端拿着返回的参数,直接鉴权调起支付,这里的“鉴权”是什么意思呢?
我的理解,直接用后端的参数,那就不叫鉴权了呀,而且后端返回什么,前端就用什么的话,因为前端是要根据后端返回的结果支付的,会不会支付错误?对于后端来说可能没什么损失,对于前端来说,会不会出现损失?
后端判断支付是否成功,是不是主要是通过【支付结果通知API】这个api?当然为了双重保险,也可以再调用【查询订单】这个api。所以后端只需要着重确保这两个接口是安全的就可以了?
你说的第一个token,是前后台加密传数据,保护用户openid不会明文传输
后端生成的token里边,可以存任何想存的内容,一般是用户的唯一标识和登录状态,或者权限状态之类的一些信息
支付方面:你永远记住,前端怎么加密都是不安全的,所以调用支付接口,都是后端来进行的。前端你这边拿到后台给你的数据,直接用就OK,而且都是一次性的数据,其他地方不能用。
支付结果通知、查询订单状态,这两个接口,可以保证支付的状态,这些都由后端来控制,不用前端来操心。
前端大部分的职责就是与用户交互,保证页面功能体验流畅。安全模块和数据处理,都由后端负责
这里涉及到防篡改,paySign 是由其它 5 个字段 + 商户号 key 经过 md5加密得到的。
在后端做这项工作的时候,完成加密工作之后,后端向小程序返回 5 个字段 + paySign,其中并没有包含“商户号 key”,即使在传输过程中 5 个字段 + paySign 被拦截、篡改了,他们不知道“商户号 key”,也基本不可能篡改出可以通过微信支付接口验证的结果来;
如果你在小程序做这项工作,要么你将“商户号 key”保存在小程序,要么每次都从后端返回“商户号 key”给小程序,无论是哪一种方式,你的“商户号 key”都可能泄露,这样一来,别人就可以随意篡改你的这 5 个字段 + paySign,并可以通过微信支付接口的验证,这里的安全问题有多严重,可想而知。
直接用后台接口返回的值就可以了