You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何携带POST参数重定向?Rails集成CorvusPay支付对接咨询

在Rails中集成CorvusPay POST重定向支付表单

刚处理过类似的支付集成需求,结合CorvusPay的文档要求,给你整理一套清晰的实现方案,确保完全符合他们的规则:

核心逻辑说明

CorvusPay要求必须通过POST请求将用户重定向到支付表单,绝对不能用GET拼接参数的方式,所以我们需要在Rails里用表单来触发这个POST提交,而不是普通的链接跳转。

视图层实现(生成POST表单)

在你的订单确认页或者支付按钮所在的视图里,添加一个隐藏的表单,包含所有必填参数:

<%= form_tag 'https://testcps.corvus.hr/redirect/', method: :post, encoding: 'UTF-8' do %>
  <!-- 固定参数 -->
  <%= hidden_field_tag :target, '_top' %>
  <%= hidden_field_tag :mode, 'form' %>
  <%= hidden_field_tag :store_id, ENV['CORVUS_STORE_ID'] %> <!-- 从环境变量取值,避免硬编码 -->
  <%= hidden_field_tag :language, 'hr' %> <!-- 可根据用户语言动态调整,比如I18n.locale -->
  <%= hidden_field_tag :currency, 'HRK' %>
  <%= hidden_field_tag :require_complete, 'false' %>

  <!-- 动态参数:从你的订单模型获取真实数据 -->
  <%= hidden_field_tag :order_number, @order.id %> <!-- 替换为你的订单唯一标识 -->
  <%= hidden_field_tag :amount, @order.total.to_s %> <!-- 确保是字符串格式,保留正确小数位 -->
  <%= hidden_field_tag :cart, @order.line_items.map { |item| "#{item.quantity}x#{item.name}" }.join(', ') %> <!-- 生成购物车内容描述 -->
  
  <!-- 签名哈希:必须用商家密钥生成,用于验证请求合法性 -->
  <%= hidden_field_tag :hash, generate_corvus_payment_hash(@order) %>

  <%= button_tag '确认支付', type: :submit, class: 'payment-btn' %>
<% end %>

控制器/服务层:生成签名哈希

hash参数是支付安全的核心,需要严格按照CorvusPay指定的规则,用商家提供的密钥生成。假设他们要求用SHA1哈希,你可以实现一个专门的服务类来处理:

# app/services/corvus_payment_service.rb
class CorvusPaymentService
  def self.generate_hash(order)
    # 注意:参数拼接顺序必须和CorvusPay文档要求完全一致!
    base_string = "#{ENV['CORVUS_STORE_ID']}#{order.id}#{order.total}#{ENV['CORVUS_SECRET_KEY']}"
    Digest::SHA1.hexdigest(base_string)
  end
end

# 在视图里调用的话,可在控制器对应的helper里定义方法:
# app/helpers/orders_helper.rb
module OrdersHelper
  def generate_corvus_payment_hash(order)
    CorvusPaymentService.generate_hash(order)
  end
end

必须遵守的规则(划重点!)

  • 禁止使用GET请求:绝对不能直接跳转带参数的URL(比如https://testcps.corvus.hr/redirect/?target=_top&...),文档明确禁止这种方式,会导致支付请求被拒绝。
  • UTF-8编码:表单已经指定了encoding: 'UTF-8',确保参数传递时不会出现乱码问题。
  • 环境区分:当前用的是测试环境地址https://testcps.corvus.hr/redirect/,上线前记得替换为CorvusPay提供的生产环境URL。
  • SSL说明:文档提到用户重定向无需SSL证书,所以开发环境可以正常测试,但生产环境建议配置SSL提升整体安全性。

这样实现后,用户点击支付按钮就会通过POST请求跳转到CorvusPay的支付表单,完全符合文档要求。

内容的提问来源于stack exchange,提问作者Hrvoje Jesenovic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:55:25