Rails 验证支付宝回调时踩过的坑

zhangbin-github · 发布于 2017年07月14日 · 最后由 zhangbin-github 回复于 2017年07月14日 · 260 次阅读
28684

这几天重写以前遗留的我们对接支付宝的支付服务,在做到rsa签名验证的时候遇到一个小坑。

我首先获取controller的request params,然后用过一个方法,将params hash转换成string,然后使用public key进行rsa验签,整个过程,并没有什么高科技,在console里面也一切ok。 部署线上以后,就发现签名怎么也过不了

原因是rails的request params里面会添加一些额外的参数进去,例如 controller,action, format等。

参考: https://stackoverflow.com/questions/7467901/getting-the-rails-params-without-the-defaults

rails源码 https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/parameters.rb 第48行 parameters 方法

所以正确的姿势应该是:

sign_params = params.except(*request.path_parameters.keys)

更好的写法:

sign_params = request.request_parameters

获取需要参与签名的参数

共收到 3 条回复
24293

post请求直接 request.request_parameters

28684 zhangbin-github 关闭了讨论 07月14日 14:25
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册