ruby on rails プロジェクトでpaypal-express gemを使用しています。ユーザーが Web アプリケーションでデジタル商品を購入できるようにしたいと考えています。new および create アクションを使用してコントローラーを作成しました。アクションは、new
ユーザーがアクセスする PayPal リンクを生成します。ユーザーは PayPal からcreate
、注文を完了しようとするアクションに戻ります。
サンドボックス資格情報を使用する場合、開発ではすべて正常に動作しますが、本番資格情報を使用する場合、PayPal から「10007 - 許可が拒否されました」というエラーが表示されます。
本番用に入力したユーザー名/パスワード/API 署名を 3 回確認しましたが、それらは正しいものです (ユーザーは正しい PayPal ストアに送信されます)。
これが私のコントローラーです:
class DigitalPaymentsController < ApplicationController
before_filter :authenticate_user!, :only => [ :new, :create ]
def new
Paypal.sandbox! unless Rails.env.production?
response = paypal_request.setup(
payment_request,
success_url,
cancel_url,
:no_shipping => true
)
@paypal_url = response.redirect_uri
end
def create
begin
response = paypal_request.checkout!(params[:token], params[:PayerID], payment_request)
if response.payment_info.first.payment_status == 'Completed'
# TODO: Handle complete payments
else
# TODO: Handle non complete payments
end
rescue Paypal::Exception::APIError => e
# Payment has failed, failure details are in e.message, also check params
end
end
private
def paypal_request
@request ||= Paypal::Express::Request.new(
:username => PAYPAL_USERNAME,
:password => PAYPAL_PASSWORD,
:signature => PAYPAL_SIGNATURE
)
end
def payment_request
@payment_request ||= Paypal::Payment::Request.new(
:currency_code => :USD,
:amount => 15,
:items => [{
:name => "Awesome Product",
:description => 'Description of awesomeness',
:amount => 15,
:category => :Digital
}]
)
end
end
paypal-express gem をDoExpressCheckoutPayment
調べると、PayPal API を呼び出して PayerID と Token を渡しているようです。PayPal API ドキュメントには、エラー (10007) を解決する方法が記載されていませんでした。