【问题标题】:Implementing SagePay Form Integration with Ruby on Rails使用 Ruby on Rails 实现 SagePay 表单集成
【发布时间】:2013-11-11 12:57:57
【问题描述】:

我将 SagePay 的表单集成方法与 Ruby on Rails/EmberJS 应用程序一起使用。我正在处理 Rails 中所有复杂的支付结构。

简而言之,SagePay 需要一个加密、编码的“crypt”字符串,其中包含用户的帐单地址、金额、付款后重定向和其他交易数据等数据。

SagePay 在测试环境中给出一个加密密码。表单集成指南说将 crypt 构建为字符串,然后使用 AES-256 和加密密码对其进行加密,然后 Base64 对字符串进行编码以 POST 到 Sage 测试支付服务器。

我是这样实现的(使用 Encryptor gem):

def encryptandencode(string)
    salt = Time.now.to_i.to_s
    secret_key = 'test-server-secret-key-from-sage'
    iv = OpenSSL::Cipher::Cipher.new('aes-256-cbc').random_iv
    encrypted_value = Encryptor.encrypt(string, :key => secret_key, :iv => iv, :salt => salt)

    encoded = Base64.encode64(encrypted_value).encode('utf-8')
    return encoded
end

其中string 是包含交易数据的未编码、未加密的 Crypt 字符串。

问题

加密器拒绝使用给定的密钥。它说钥匙太短了。

我在这里错过了什么?

【问题讨论】:

    标签: ruby-on-rails ruby encryption opayo


    【解决方案1】:

    我正在努力在 ASP.NET 中做同样的事情。我不知道为什么他们在网站上为您提供的示例“集成套件”如此复杂。它们本身可能代表优雅的代码片段,但它们通过使用 web.config 文件中的设置让函数调用函数调用方法来混淆事物的工作方式。对于刚接触此 API 的开发人员,一个将所有代码集中在一个位置的简单示例会很有帮助。

    无论如何,我仍然没有让它工作,但我已经设法克服了你遇到的问题,虽然我的方法可能对你没有帮助,因为我在 ASP.NET 中工作。我在我的项目中添加了对 SagePay.IntegrationKit.DotNet.dll 的引用,之后我就可以调用该函数了

    SagePay.IntegrationKit.Cryptography.EncryptAndEncode(<name=value collection>, <Encryption Password>)

    我现在似乎获得了要发送到 SagePay 的有效加密字符串,我的问题是他们的网站说加密错误,所以这仍在进行中。

    【讨论】:

    • 我也有同样的情况——加密方法不适合 V3.00。最后,我设法说服客户改用 Stripe。他们的文档不仅全面且易于理解(大量代码示例),而且还提供了简洁的预测和概述功能。这也不是一个硬性销售——佣金增加了 0.7%,但没有商业银行费用。各方面的赢家。
    【解决方案2】:

    我也在为此苦苦挣扎,并收到相同的错误消息。

    我最终决定直接尝试 Encryptor gem 中的每一行,并且不再收到该错误消息。因此,我从我的 Gemfile 中删除了该 gem。

    顺便说一句,您的示例中有一些错误:

    • 你需要使用128位加密,而不是默认的256::algorithm => 'aes-128-cbc'
    • 初始化向量需要与密钥相同::iv => secret_key
    • 你不能使用盐
    • 结果需要用十六进制编码而不是 Base64

    result = encrypted_value.split('').map { |c| "%02X" % c.ord }.join

    【讨论】:

      【解决方案3】:

      测试和实时加密密码不同,请检查您的加密密码长度是否为 16 个字符。

      Sage 支付支持

      【讨论】:

      • 开发者文档很糟糕......两年后他们也好不到哪里去。
      猜你喜欢
      • 2012-06-21
      • 1970-01-01
      • 2013-09-18
      • 2013-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-09
      • 1970-01-01
      相关资源
      最近更新 更多