私は Rails アプリを Paymill 支払いゲートウェイ (paymill-ruby gem を使用) と統合する作業を行っていますが、標準的な注文プロセス中に API を操作するための最良の方法について誰かがアドバイスできるかどうか疑問に思っていました。私はなんとか基本を機能させることができましたが、完全なプロセスを構築する方法に関するリソースはほとんどありません.
Paymill クライアント ID と支払い ID を保存する User モデルと、すべてのトランザクションの詳細 (注文 ID を参照) を保存する Payment モデルがあります。私の支払いモデルコードは現在次のとおりです。
class Payment < ActiveRecord::Base
include ActiveModel::ForbiddenAttributesProtection
attr_accessor :paymill_card_token, :email, :paymill_client_id, :paymill_payment_id
belongs_to :order
belongs_to :user
validates_presence_of :order_id
validates_presence_of :user_id
def save_with_payment
if valid?
if paymill_client_id.blank?
#if user hasn't paid before, create paymill client
client = Paymill::Client.create email: email, description: user_id
paymill_client_id = client.id
# update current user with paymill client ID
User.where("user_id = ?", user_id).update_attributes(:paymill_client_id => paymill_client_id)
end
if paymill_payment_id.blank?
#if paymill_payment_id isn't present, create new payment
payment = Paymill::Payment.create token: paymill_card_token, client: paymill_client_id
paymill_payment_id = payment.id
# update current user with paymill payment ID
User.where("user_id = ?", user_id).update_attributes(:paymill_payment_id => paymill_payment_id)
end
transaction = Paymill::Transaction.create client: paymill_client_id, amount: "#{amount.to_s.gsub('.', '')}0", currency: 'GBP', description: "ORDER ID #{order_id}", payment: paymill_payment_id
self.paymill_id = transaction.id
save!
end
rescue Paymill::PaymillError => e
logger.error "Paymill error while creating customer: #{e.message}"
errors.add :base, "There was a problem with your credit card. Please try again."
false
end
end
ドキュメントのどこかで、ペイミル支払いオブジェクト (クライアントの保存されたクレジット カードの詳細) が 1 年間のみ有効であると読みましたが、これは正しいですか? もしそうなら、これはどのように対処されるべきですか?この有効期限とユーザーのクレジットカードの有効期限を User モデルに保存して、いつカード情報を再入力するように依頼するかを知ることは良い考えですか?