2012-12-20 10 views
8

HintergrundPaymill: Wie simuliere ich eine fehlgeschlagene Zahlung während des Testens?

Frage

Wie kann ich eine Testzahlung fehlschlagen? (Z Karte abgelehnt wird, oder die Karte abgelaufen künftig Abonnementzahlungen)

Stripe would let me do this using special card numbers aber es scheint keine solche Dokumentation zu sein (in englischer Sprache) für 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 

Antwort

4

Ab heute gibt es keine speziellen Kreditkartennummern, diese Probleme zu simulieren. Aufgrund von Forderungen seitens der Community befindet sich dies jedoch derzeit im Rückstand zur Umsetzung. Ich würde vorschlagen, eine E-Mail an den Support zu senden, um Interesse an dieser Funktion zu zeigen. Je mehr Anfragen, desto schneller wird das Feature implementiert.

BEARBEITEN: PAYMILL bietet jetzt eine spezielle MasterCard-Nummer an, die fehlschlägt, wenn eine bestimmte Kombination aus Ablaufmonat und Jahr verwendet wird. Zum Beispiel schlägt die Karte 5105105105105100 aufgrund von RESPONSE_BACKEND_BLACKLISTED fehl, wenn das Ablaufdatum als 02/2020 gesendet wird.

+0

Die vollständige Liste der Kombinationen für Ablaufdaten und Fehlercodes finden Sie hier: https://developers.paymill.com/guides/reference/testing#how-do-i-test-creditcard-specific-error -codes- – LeEnno

0

Sie könnten für den Verifizierungswert eine Zeichenfolge anstelle einer Zahl verwenden.

'account.verification' => 'abc' 

Dieser wird als mein Wissen führen zu einer noch fehlgeschlagenen Zahlung bei dem CONNECTOR_TEST Modus.