如何在Rails中集成Redsys实现信用卡与Bizum支付?
Redsys集成Bizum支付问题解答
我在Rails应用中用Redsys处理信用卡支付,已经通过redsys gem完成配置,信用卡交易功能正常运行。现在需要保留现有信用卡支付功能的同时,集成Bizum作为支付方式,有以下疑问:
- 要在Redsys请求中添加哪些额外参数,才能同时启用Bizum支付与信用卡支付?
- 是否需要修改
DS_MERCHANT_TRANSACTIONTYPE或其他字段来正确处理Bizum交易? - 有没有官方文档或推荐方案用于在Rails中通过Redsys集成Bizum?
现有Redsys请求代码
module RedsysHelper def redsys_fields_for(member) Redsys::V2::RequestParams.new(Rails.application.secrets.redsys_merchant_secret, 'DS_MERCHANT_ORDER' => DateTime.now.to_i + member.id, 'DS_MERCHANT_URLOK' => thank_you_url(member), 'DS_MERCHANT_URLKO' => order_url(member, accepted: false), 'DS_MERCHANT_AMOUNT' => member.total.cents, 'DS_MERCHANT_TITULAR' => member.user.full_name, 'DS_MERCHANT_TERMINAL' => Rails.application.secrets.redsys_terminal, 'DS_MERCHANT_CURRENCY' => Redsys.currency_code('EUR'), 'DS_MERCHANT_MERCHANTURL' => "https://aranjewels.com/orders/#{member.reference}/notifications", 'DS_MERCHANT_MERCHANTCODE' => Rails.application.secrets.redsys_merchant_code, 'DS_MERCHANT_TRANSACTIONTYPE' => Redsys.transaction_code(:authorization), 'DS_MERCHANT_PRODUCTDESCRIPTION' => member.reference, 'DS_MERCHANT_MERCHANTNAME' => t('config.store_name'), 'DS_MERCHANT_CONSUMERLANGUAGE' => Redsys.locale_code(I18n.locale) ) end end
问题解答
1. 启用Bizum所需的额外参数
要同时支持信用卡和Bizum支付,需添加以下参数到Redsys请求中:
DS_MERCHANT_BIZUM:设置为'S'(表示启用Bizum支付选项)DS_MERCHANT_BIZUM_PHONE(可选):如果想预先填写用户手机号,可传入带国际区号的号码(比如'+34600123456'),用户仍可在支付页面修改
2. 交易类型及其他字段修改
DS_MERCHANT_TRANSACTIONTYPE:无需修改,保持原有的授权类型(0对应authorization)即可,Bizum交易同样适用该类型。- 其他字段:保持现有配置即可,无需额外调整,除非你需要针对Bizum做特殊的订单描述或商户信息,但这不是强制要求。
3. 官方文档与Rails集成方案
- Redsys官方提供了完整的Bizum集成文档,你可以通过商户后台获取最新的技术规范(重点查看"Bizum支付集成章节")。
- 对于Rails环境,直接基于现有
redsysgem扩展即可:gem本身支持自定义参数传递,只需在RequestParams中添加Bizum相关字段即可,无需额外依赖。 - 注意:集成前需确保你的Redsys商户账户已开通Bizum支付权限,否则即使添加参数也不会显示Bizum选项。
修改后的示例代码
module RedsysHelper def redsys_fields_for(member) Redsys::V2::RequestParams.new(Rails.application.secrets.redsys_merchant_secret, 'DS_MERCHANT_ORDER' => DateTime.now.to_i + member.id, 'DS_MERCHANT_URLOK' => thank_you_url(member), 'DS_MERCHANT_URLKO' => order_url(member, accepted: false), 'DS_MERCHANT_AMOUNT' => member.total.cents, 'DS_MERCHANT_TITULAR' => member.user.full_name, 'DS_MERCHANT_TERMINAL' => Rails.application.secrets.redsys_terminal, 'DS_MERCHANT_CURRENCY' => Redsys.currency_code('EUR'), 'DS_MERCHANT_MERCHANTURL' => "https://aranjewels.com/orders/#{member.reference}/notifications", 'DS_MERCHANT_MERCHANTCODE' => Rails.application.secrets.redsys_merchant_code, 'DS_MERCHANT_TRANSACTIONTYPE' => Redsys.transaction_code(:authorization), 'DS_MERCHANT_PRODUCTDESCRIPTION' => member.reference, 'DS_MERCHANT_MERCHANTNAME' => t('config.store_name'), 'DS_MERCHANT_CONSUMERLANGUAGE' => Redsys.locale_code(I18n.locale), # 添加Bizum相关参数 'DS_MERCHANT_BIZUM' => 'S', # 可选:预先填写用户手机号 # 'DS_MERCHANT_BIZUM_PHONE' => "+34#{member.user.phone}" ) end end
内容的提问来源于stack exchange,提问作者Yuvraj Singh
相关产品推荐
相关产品推荐

