पृष्ठभूमिपेममिल: परीक्षण करते समय मैं एक असफल भुगतान का अनुकरण कैसे करूं?
- Paymill's subscription billing सुविधा का उपयोग करके ऐप्लिकेशन का विकास करना।
- Ruby wrapper का उपयोग करना, मैंने
PaymentProvider
वर्ग और स्पेक नीचे बनाया है।
प्रश्न
मैं कैसे एक परीक्षण भुगतान असफल कर सकता हूँ? Paymill के लिए (जैसे कार्ड अस्वीकृत हो गया, या कार्ड भविष्य सदस्यता भुगतान में समाप्त हो गई)
Stripe would let me do this using special card numbers लेकिन वहाँ किसी भी तरह के प्रलेखन (अंग्रेजी में) होने के लिए प्रकट नहीं होता है।
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
समाप्ति तिथियों और त्रुटि कोड के संयोजनों की पूरी सूची यहां मिल सकती है: https://developers.paymill.com/guides/reference/testing#how-do-i-test-credit-card- विशिष्ट- आतंक -codes- – LeEnno