2015-05-09 16 views
1

我試圖計算的支付形式的哈希值,但我得到的錯誤:如何計算付款表單的散列?

no implicit conversion of Fixnum into String

所以我理解這一點,我試圖做的是文本的數學計算。但是,我應該如何糾正我的代碼?

從支付商戶的指令是:

hash = SHA1(salt + "|" + description + "|" + amount + "|" + currency + "|" + transaction_type)

所以在我的控制,我有:

def checkout 
    @organization = Organization.new(organizationnew_params) 
    if @organization.save 
     @organization.members.each do |single_member| 
     single_member.send_activation_email 
     end 
     @amount = 100.00 
     @currency = "EUR" 
     @description = @organization.id 
     @transaction_description = "My description" 
     @transaction_type = "S" 

     ### LINE BELOW HAS THE HASH, WHICH REFERS TO THE PRIVATE METHOD BELOW ### 
     @hash = hash(@description, @amount, @currency, @transaction_type) 
     render 'checkout' 
    else        
     render 'new_premium' 
    end 
    end 

private 
    def hash(description, amount, currency, transaction_type) 
    @hash = SHA1(SALT + "|" + description + "|" + amount + "|" + currency + "|" + transaction_type) 
    end 

在我已經定義SALT的初始化(以及我MERCHANT_ID這是在使用在結賬視圖中發佈給商家的表單)。

+1

您的金額和描述是浮動/整數 – kobaltz

回答

2

寫這會更好。

hash = SHA1([salt, description, amount.to_s, currency,transaction_type].join("|")) 
+0

這似乎有效,但這確實產生了另一個錯誤消息:未定義的方法'SHA1'爲# Nick

+0

你可以顯示錯誤堆棧嗎? – pangpang

+0

在development.log(我希望這是你的意思?)說:完成500內部服務器錯誤965ms(ActiveRecord:51.4ms) NoMethodError(未定義的方法'SHA1'爲#): app/controllers/organizations_controller.rb:189:在'hash'中 app/controllers/organizations_controller.rb:60:在'checkout' – Nick

0

錯誤表明您正在向字符串添加數字,我認爲問題在於「數量」是您要添加到字符串的數字。你只需要改變:

@hash = SHA1(SALT + "|" + description + "|" + amount.to_s + "|" + currency + "|" + transaction_type) 

:to_s方法將數量轉換爲字符串。 (如果有其他電話號碼,只是這樣做。)

或者你可以用繩子插做到這一點:

@hash = SHA1("#{SALT}|#{description}|#{amount}|#{currency}|#{transaction_type}") 
+0

兩個仍然產生相同的錯誤,但pangpang線似乎工作。 – Nick

+0

@Nick看到編輯 – Mhmd

0

你理解錯誤的話,它是倒過來。您試圖將一個數字用作字符串。

儘量明確地轉換爲數字爲字符串,像這樣:

@hash = SHA1(SALT + "|" + description + "|" + amount.to_s + "|" + currency + "|" + transaction_type) 

由於我不知道所有變量的類型,你可能需要另一個to_s添加到非串。

+0

這仍然產生了同樣的錯誤,但是pangpang行似乎工作。 – Nick