Class: RedsysRuby::TPV
- Inherits:
-
Object
- Object
- RedsysRuby::TPV
- Defined in:
- lib/redsys-ruby/tpv.rb
Constant Summary collapse
- PRODUCTION_URL =
"https://sis.redsys.es/sis/realizarPago"- TEST_URL =
"https://sis-t.redsys.es:25443/sis/realizarPago"
Instance Attribute Summary collapse
-
#merchant_key ⇒ Object
readonly
Returns the value of attribute merchant_key.
Instance Method Summary collapse
- #decode_parameters(merchant_parameters_64) ⇒ Object
- #generate_merchant_parameters(params) ⇒ Object
- #generate_merchant_signature(order, merchant_parameters_64) ⇒ Object
- #generate_merchant_signature_notif(merchant_parameters_64) ⇒ Object
-
#initialize(merchant_key:) ⇒ TPV
constructor
A new instance of TPV.
- #payment_data(params) ⇒ Object
- #valid_signature?(merchant_parameters_64, signature) ⇒ Boolean
Constructor Details
#initialize(merchant_key:) ⇒ TPV
Returns a new instance of TPV.
14 15 16 17 |
# File 'lib/redsys-ruby/tpv.rb', line 14 def initialize(merchant_key:) raise ArgumentError, "merchant_key is required" if merchant_key.nil? || merchant_key.to_s.strip.empty? @merchant_key = merchant_key end |
Instance Attribute Details
#merchant_key ⇒ Object (readonly)
Returns the value of attribute merchant_key.
12 13 14 |
# File 'lib/redsys-ruby/tpv.rb', line 12 def merchant_key @merchant_key end |
Instance Method Details
#decode_parameters(merchant_parameters_64) ⇒ Object
70 71 72 |
# File 'lib/redsys-ruby/tpv.rb', line 70 def decode_parameters(merchant_parameters_64) JSON.parse(Base64.decode64(merchant_parameters_64)) end |
#generate_merchant_parameters(params) ⇒ Object
31 32 33 34 |
# File 'lib/redsys-ruby/tpv.rb', line 31 def generate_merchant_parameters(params) json_params = params.to_json Base64.strict_encode64(json_params) end |
#generate_merchant_signature(order, merchant_parameters_64) ⇒ Object
36 37 38 39 |
# File 'lib/redsys-ruby/tpv.rb', line 36 def generate_merchant_signature(order, merchant_parameters_64) digest = calculate_digest(order, merchant_parameters_64) Base64.strict_encode64(digest) end |
#generate_merchant_signature_notif(merchant_parameters_64) ⇒ Object
53 54 55 56 57 58 59 60 61 62 |
# File 'lib/redsys-ruby/tpv.rb', line 53 def generate_merchant_signature_notif(merchant_parameters_64) # For notifications, we need to extract the order from the decoded parameters. decoded_params = decode_parameters(merchant_parameters_64) order = decoded_params["Ds_Order"] || decoded_params["Ds_Merchant_Order"] raise ArgumentError, "Order is missing in merchant parameters" if order.nil? digest = calculate_digest(order, merchant_parameters_64) Base64.urlsafe_encode64(digest) end |
#payment_data(params) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/redsys-ruby/tpv.rb', line 41 def payment_data(params) params = params.transform_keys(&:to_s) merchant_parameters_64 = generate_merchant_parameters(params) order = params["Ds_Merchant_Order"] { Ds_SignatureVersion: "HMAC_SHA256_V1", Ds_MerchantParameters: merchant_parameters_64, Ds_Signature: generate_merchant_signature(order.to_s, merchant_parameters_64) } end |
#valid_signature?(merchant_parameters_64, signature) ⇒ Boolean
64 65 66 67 68 |
# File 'lib/redsys-ruby/tpv.rb', line 64 def valid_signature?(merchant_parameters_64, signature) expected_signature = generate_merchant_signature_notif(merchant_parameters_64) # We should use a constant-time comparison here for security secure_compare(expected_signature, signature) end |