2011-10-23 2 views
1

Doing railscast # 143. 코드는 다음과 같습니다. 보안 자료를 추가 할 때 "인증서 ID의 암호를 해독 할 수 없습니다."라는 메시지가 나타납니다. 개발 중이다. 보안 장비를 꺼내면 다시 복숭아가 작동합니다. 나는 새로운 인증서 등으로 전체 과정을 몇 번이나 다시했습니다. 불운.Railscast 143 (Paypal 보안)으로 인해 "인증서 ID를 해독 할 수 없습니다."

다음에 시도 할 내용이 있습니까?

내가 생산에 그것을 경험하고 마술 작업을 시작 본 게시물에 정확히 같은 문제에 봉착 :에서

Can't get PayPal Encrypted Website Payments to work in Rails

페이지 "이러한 구매"

<%= form_tag "https://www.sandbox.paypal.com/cgi-bin/webscr" do %> 
<%= hidden_field_tag :cmd, "_s-xclick" %> 
<%= hidden_field_tag :encrypted, @cart.paypal_encrypted("#{@url}/buy_these", payment_notifications_url) %> 
<p><%= submit_tag "Buy these for #{number_to_currency(@cart.total_price)}" %></p> 
을 cart.rb에서

:

PAYPAL_CERT_PEM = File.read("#{Rails.root}/certs/paypal_cert.pem") 
APP_CERT_PEM = File.read("#{Rails.root}/certs/app_cert.pem") 
APP_KEY_PEM = File.read("#{Rails.root}/certs/app_key.pem") 

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 { |k, v| "#{k}=#{v}" }.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 

def paypal_encrypted(return_url, notify_url) 
    values = { 
    :business => '[email protected]', 
    :cmd => '_cart', 
    :upload => 1, 
    :return => return_url, 
    :invoice => id, 
    :notify_url => notify_url, 
    :cert_id => 'DVFY6JS476MR8' 
    } 
things.each_with_index do |item, index| 
    values.merge!({ 
     "amount_#{index+1}" => item.price, 
     "item_name_#{index+1}" => item.id, 
     "item_number_#{index+1}" => item.id, 
     "quantity_#{index+1}" => 1 
    }) 
    end 
    encrypt_for_paypal(values) 
end 
+0

Railscast는 거의 3 살입니다. 이 지침을 PayPal의 현재 API 문서와 비교해 보셨습니까? [많은 PayPal gems] (http://rubygems.org/search?utf8=%E2%9C%93&query=paypal) 중 하나를 사용할 수 있습니까? –

+0

제안 해 주셔서 감사합니다! 내가 안정적으로 작동하지 않을 수 있다고 밝혀졌습니다. – icewoman27

답변

2

전체 프로세스를 몇 번 더 반복하면 작업이 시작됩니다. 또한 다음 답과 유사한 과정에서 각 가치를 검토했습니다. 불행하게도 배포 플랫폼을 전환 할 때마다 동일한 문제가있는 것 같습니다. 결국 결국 다시 작동하기 시작합니다.

0

paypal_encrypted 메소드에서 여러 값을 암호화하므로 동일한 프로세스 중에 일부 암호화 오류가 발생하면이 오류가 발생할 수 있습니다.

암호화 오류로 인해 문제가 발생하지 않았는지 확인하는 가장 좋은 방법은 위의 지정된 값 해시에서 하나씩 키 - 값 쌍을 제거하고 결제 요청을 시도하는 것입니다.

+0

감사! 이것은 답변의 일부였습니다. – icewoman27

1

동일한 문제가 발생했지만 문제는 paypal_cert.pem 파일 즉 Paypal의 인증서 파일과 관련이 있습니다.

페이팔은 스테이징 및 라이브 환경에 대해 서로 다른 인증서를 사용합니다. paypal_cert.pem 파일을 확인하시기 바랍니다 당신은 그것을 사용해야합니다 환경을 언급 할 첫 번째 줄을 볼 것입니다.

을 나는 두 개의 파일 paypal_cert_prod.pem 및 각 환경에 대한 paypal_cert_sandbox.pem 하나의 코드

paypal_cert_file_name = ENV["paypal_cert_file_name"] || "paypal_cert_prod"; 

PAYPAL_CERT_PEM = File.read("#{Rails.root}/certs/#{paypal_cert_file_name}.pem") 

다음 사용합니다.