收藏
回答

小程序调起支付API中的wx.requestPayment方法参数需要前端重新计算吗?

微信支付流程中提到的小程序调起支付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

回答关注问题邀请回答
收藏

3 个回答

  • 王浩Hanks🇨🇳
    王浩Hanks🇨🇳
    2020-01-17

    所有参数用后台返回的

    --↓↓👍点赞是回答的动力哦

    2020-01-17
    有用 3
    回复 7
    • 大龙😁
      大龙😁
      2020-01-17
      可以讲一下这样的好处吗?或者您理解的微信这样设计的逻辑?谢谢
      2020-01-17
      回复
    • 王浩Hanks🇨🇳
      王浩Hanks🇨🇳
      2020-01-17回复大龙😁
      签名生成的过程,需要一些参数,这些参数,有的是绝密,如果在前端保存这些参数,生成签名等操作,等于你这些该保密的信息被泄露了,而且涉及到钱。
      2020-01-17
      1
      回复
    • 大龙😁
      大龙😁
      2020-01-19
      非常感谢,我再深入了解下。流程是不是这样?


      一般小程序到支付这个页面之前已经在其他页面wx.login过并将code传给了后端,后端通过code获取了openid,将其转成token(原third_session)返回给前端,前端之后调用任何接口均携带这个token。


      其中,调支付接口的时候,后端将token再转成openid,从而调用统一下单api和将组合数据再次签名后返回给前端。


      这个时候前端拿着返回的参数,直接鉴权调起支付,这里的“鉴权”是什么意思呢?


      我的理解,直接用后端的参数,那就不叫鉴权了呀,而且后端返回什么,前端就用什么的话,因为前端是要根据后端返回的结果支付的,会不会支付错误?对于后端来说可能没什么损失,对于前端来说,会不会出现损失?


      后端判断支付是否成功,是不是主要是通过【支付结果通知API】这个api?当然为了双重保险,也可以再调用【查询订单】这个api。所以后端只需要着重确保这两个接口是安全的就可以了?
      2020-01-19
      1
      回复
    • 王浩Hanks🇨🇳
      王浩Hanks🇨🇳
      2020-01-19回复大龙😁
      你说的整体的流程没有问题的,看到你打这么多字也很辛苦
      你说的第一个token,是前后台加密传数据,保护用户openid不会明文传输


      后端生成的token里边,可以存任何想存的内容,一般是用户的唯一标识和登录状态,或者权限状态之类的一些信息

      支付方面:你永远记住,前端怎么加密都是不安全的,所以调用支付接口,都是后端来进行的。前端你这边拿到后台给你的数据,直接用就OK,而且都是一次性的数据,其他地方不能用。


      支付结果通知、查询订单状态,这两个接口,可以保证支付的状态,这些都由后端来控制,不用前端来操心。


      前端大部分的职责就是与用户交互,保证页面功能体验流畅。安全模块和数据处理,都由后端负责
      2020-01-19
      1
      回复
    • 大龙😁
      大龙😁
      2020-01-19
      好的,再次感谢您的回复
      2020-01-19
      回复
    查看更多(2)
  • 咚门
    咚门
    2020-06-05

    这里涉及到防篡改,paySign 是由其它 5 个字段 + 商户号 key 经过 md5加密得到的。

    在后端做这项工作的时候,完成加密工作之后,后端向小程序返回 5 个字段 + paySign,其中并没有包含“商户号 key”,即使在传输过程中 5 个字段 + paySign 被拦截、篡改了,他们不知道“商户号 key”,也基本不可能篡改出可以通过微信支付接口验证的结果来

    如果你在小程序做这项工作,要么你将“商户号 key”保存在小程序,要么每次都从后端返回“商户号 key”给小程序,无论是哪一种方式,你的“商户号 key”都可能泄露,这样一来,别人就可以随意篡改你的这 5 个字段 + paySign,并可以通过微信支付接口的验证,这里的安全问题有多严重,可想而知。

    2020-06-05
    有用 1
    回复 1
    • 大龙😁
      大龙😁
      2021-07-13
      好的,谢谢,言简意赅
      2021-07-13
      回复
  • 一中隔壁
    一中隔壁
    2020-01-17

    直接用后台接口返回的值就可以了

    2020-01-17
    有用 1
    回复 1
    • 大龙😁
      大龙😁
      2020-01-17
      前端重新计算一遍,也可以调起支付,想知道前端和后端调起来分别有何好处和坏处?可以的话,麻烦不吝赐教
      2020-01-17
      1
      回复
登录 后发表内容
问题标签