![](/img/trans.png)
[英]Can't get Paypal and Rails app to work. Notification Paypal not working
[英]Can't get PayPal Encrypted Website Payments to work in Rails
我在獲取PayPal加密網站付款以在Rails網站上工作時遇到問題。
我在發布到PayPal網址時收到兩條不同的錯誤消息 - 在我使用沙箱的臨時網站上,我得到:
證書已被刪除。 請使用有效的證書。
而在生產現場,我得到:
我們無法解密證書ID。
據我所知,它們設置相同,除了一個使用PayPal Sandbox公鑰,另一個使用普通的PayPal公鑰。 我必須忽視一些細節但是我已經對這個問題猛烈抨擊了幾天。
我使用以下命令生成公鑰和私鑰:
openssl genrsa -out app_key.pem 1024
openssl req -new -key app_key.pem -x509 -days 365 -out app_cert.pem
然后我將app_cert.pem
上傳到PayPal並將我的證書ID放入如下文件中:
development:
user: seller_1259814545_biz@somedomain.com
action_url: https://www.sandbox.paypal.com/cgi-bin/webscr
paypal_cert_file: certs/paypal_sandbox_cert.pem
app_cert_file: certs/app_cert.pem
app_key_file: certs/app_key.pem
cert_id: CBDFN7JXBM2ZQ
secret: dfasdkjh3453
test:
user: seller_1259814545_biz@somedomain.com
action_url: https://www.sandbox.paypal.com/cgi-bin/webscr
paypal_cert_file: certs/paypal_sandbox_cert.pem
app_cert_file: certs/app_cert.pem
app_key_file: certs/app_key.pem
cert_id: CBDFN7JXBM2ZQ
secret: dfasdkjh3453
staging:
user: seller_1259814545_biz@somedomain.com
action_url: https://www.sandbox.paypal.com/cgi-bin/webscr
paypal_cert_file: certs/paypal_sandbox_cert.pem
app_cert_file: certs/app_cert.pem
app_key_file: certs/app_key.pem
cert_id: CBDFN7JXBM2ZQ
secret: dfasdkjh3453
production:
user: business@somedomain.com
action_url: https://www.paypal.com/cgi-bin/webscr
paypal_cert_file: certs/paypal_cert.pem
app_cert_file: certs/app_cert.pem
app_key_file: certs/app_key.pem
cert_id: QG2TTZZM9DUH6
secret: dfasdkjh3453
然后我在我的購物車模型中使用以下代碼來加密數據:
class Cart < ActiveRecord::Base
has_many :line_items, :dependent => :destroy
PAYPAL_CERT_PEM = File.read("#{Rails.root}/#{PAYPAL_CONFIG[:paypal_cert_file]}")
APP_CERT_PEM = File.read("#{Rails.root}/#{PAYPAL_CONFIG[:app_cert_file]}")
APP_KEY_PEM = File.read("#{Rails.root}/#{PAYPAL_CONFIG[:app_key_file]}")
...
def paypal_data(return_url, notify_url)
values = {
:business => PAYPAL_CONFIG[:user],
:cert_id => PAYPAL_CONFIG[:cert_id],
:custom => PAYPAL_CONFIG[:secret],
:cmd => '_cart',
:upload => 1,
:return => return_url,
:notify_url => notify_url,
:invoice => id,
:currency_code => 'AUD'
}
line_items.each_with_index do |item, i|
values.merge!({
"amount_#{i+1}" => "%.2f" % item.unit_price_ex_gst,
"tax_#{i+1}" => "%.2f" % item.unit_gst,
"item_name_#{i+1}" => item.product.full_name,
"item_number_#{i+1}" => item.id,
"quantity_#{i+1}" => item.quantity
})
end
encrypt_for_paypal(values)
end
def encrypt_for_paypal(values)
signed = OpenSSL::PKCS7::sign(OpenSSL::X509::Certificate.new(APP_CERT_PEM),
OpenSSL::PKey::RSA.new(APP_KEY_PEM, ''),
values.map { |key, value| "#{key}=#{value}" }.join("\n"), [], OpenSSL::PKCS7::BINARY)
OpenSSL::PKCS7::encrypt([OpenSSL::X509::Certificate.new(PAYPAL_CERT_PEM)],
signed.to_der,
OpenSSL::Cipher::Cipher::new("DES3"),
OpenSSL::PKCS7::BINARY).to_s.gsub("\n", '')
end
end
然后我在視圖中使用以下代碼:
- form_tag PAYPAL_CONFIG[:action_url] do
%div
= hidden_field_tag :cmd, '_s-xclick'
= hidden_field_tag :encrypted, cart.paypal_data(thanks_payments_url, payments_url)
= image_submit_tag 'paypal-checkout.gif', :alt => 'Check out with PayPal: The safer, easier way to pay'
輸出中似乎沒有任何換行符或其他字符,我知道可以填充該過程。
我檢查並仔細檢查了我使用了所有正確的證書和證書ID,並且上傳到PayPal的內容與我的certs
目錄中的內容相匹配。
我已經完全沒有想法了。 任何幫助或想法將不勝感激。
現在一切都在進行分期和生產。
我唯一能想到的是PayPal和他們身邊的證書存在某種問題或延遲。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.