nềnPaymill: Làm cách nào để mô phỏng thanh toán không thành công trong khi thử nghiệm?
- đang phát triển một ứng dụng sử dụng tính năng Paymill's subscription billing.
- Sử dụng số Ruby wrapper, tôi đã tạo một lớp học
PaymentProvider
và thông số như dưới đây.
Câu hỏi
Làm thế nào để thực hiện thanh toán thử nghiệm thất bại? (ví dụ: thẻ bị từ chối hoặc thẻ đã hết hạn trong các khoản thanh toán đăng ký trong tương lai)
Stripe would let me do this using special card numbers nhưng dường như không có bất kỳ tài liệu nào như vậy (bằng tiếng Anh) cho Paymill.
payment_provider.rb
class PaymentProvider
Paymill.api_key = ENV['PAYMILL_PRIVATE_KEY']
def self.start_new_subscription(email, description, token)
offer = Paymill::Offer.find(ENV['PAYMILL_OFFER_ID'])
client = Paymill::Client.create(email: email, description: description)
payment = Paymill::Payment.create(token: token, client: client.id)
subscription = Paymill::Subscription.create(client: client.id, offer: offer.id, payment: payment.id)
subscription.id
end
end
payment_provider_spec.rb
require 'spec_helper'
describe PaymentProvider do
describe "#start_new_subscription" do
it "returns a subscription id, starting 'sub_' when successful" do
email = "[email protected]"
description = "me"
token = get_payment_token
subscription_id = PaymentProvider.start_new_subscription(email, description, token)
expect(subscription_id[0,4]).to eq('sub_')
end
end
def get_payment_token
# Simulate the JavaScript bridge we would use in production
params = {
'transaction.mode' => 'CONNECTOR_TEST',
'channel.id' => ENV['PAYMILL_PUBLIC_KEY'],
'jsonPFunction' => 'any_string',
'account.number' => '5500000000000004',
'account.expiry.month' => 3.years.from_now.month,
'account.expiry.year' => 3.years.from_now.year,
'account.verification' => '111'
#'presentation.amount3D' => BigDecimal('10.00'),
#'presentation.currency3D' => 'GBP'
}
http = Net::HTTP.new('test-token.paymill.de', 443)
http.use_ssl = true
response = http.get url_query_string(params)
response.body.scan(/tok_\w*\b/).first # Use a regex to pull the token from the (not-quite-JSON) response
end
def url_query_string(hash)
"/?" << URI.escape(hash.collect{|k,v| "#{k}=#{v}"}.join('&'))
end
end
Danh sách đầy đủ các kết hợp cho ngày hết hạn và mã lỗi có thể được tìm thấy tại đây: https://developers.paymill.com/guides/reference/testing#how-do-i-test-credit-card-specific-error -codes- – LeEnno