1

railscast#143を実行しています。コードは以下のとおりです。セキュリティ関連のものを追加すると、「証明書IDを復号化できませんでした」というメッセージが表示されます。開発中。セキュリティ関連のものを取り出すと、再び桃色になります。新しい証明書などを使用して、プロセス全体を数回やり直しました。運がない。

次に何を試すべきかについてのアイデアはありますか?

私はこの投稿とまったく同じ問題を抱えています。この投稿は本番環境でそれを経験し、魔法のように機能し始めました。

RailsでPayPal暗号化ウェブサイト支払いを機能させることができません

「これらを購入する」ページ:

<%= 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 => 'seller_1316654707_biz@myurl.com',
    :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
4

3 に答える 3

2

プロセス全体をさらに数回繰り返したところ、機能し始めました。また、次の回答と同様のプロセスで各値を確認しました。残念ながら、展開プラットフォームを切り替えるたびに、同じ問題が発生するようです。そして最終的に、それは再び働き始めます。

于 2011-12-06T21:53:44.540 に答える
1

同じ問題に直面しましたが、問題はファイル、paypal_cert.pemつまりPaypalの証明書ファイルに関連していました。

Paypalは、ステージング環境とライブ環境に異なる証明書を使用します。ファイルを確認paypal_cert.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")

各環境に2つのファイルpaypal_cert_prod.pemと1つのファイルがあります。paypal_cert_sandbox.pem

于 2014-10-06T11:59:18.550 に答える
0

paypal_encryptedメソッドで多数の値を暗号化しているため、同じプロセス中に暗号化エラーが発生した場合にこのエラーが発生する可能性があります。

問題が暗号化エラーによるものではないことを確認する最善の方法は、上記の値のハッシュからキーと値のペアを1つずつ削除して、支払い要求を行うことです。

于 2011-10-23T15:33:42.297 に答える