2012-12-20 11 views
8

TłoPaymill: Jak symulować nieudaną płatność podczas testowania?

Pytanie

W jaki sposób mogę dokonać płatności próba nie powiedzie? (Np karta zostanie odrzucona, czy karta wygasła w przyszłych opłat abonamentowych)

Stripe would let me do this using special card numbers ale nie wydaje się, aby taka dokumentacja (w języku angielskim) dla 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 

Odpowiedz

4

dzień dzisiejszy nie istnieją żadne specjalne numery kart kredytowych, aby symulować te problemy. Jednak ze względu na żądania ze strony społeczności, jest to obecnie w backlogu do wdrożenia. Proponuję wysłać wiadomość e-mail do pomocy technicznej, aby pokazać zainteresowanie tą funkcją. Im więcej żądań, tym szybciej funkcja zostanie zaimplementowana.

EDYCJA: PAYMILL oferuje teraz specjalny numer MasterCard, który kończy się niepowodzeniem, jeśli używana jest pewna kombinacja daty ważności i miesiąca. Na przykład karta 5105105105105100 zakończy się niepowodzeniem z powodu RESPONSE_BACKEND_BLACKLISTED, jeśli data wygaśnięcia zostanie wysłana jako 02/2020.

+0

Pełna lista kombinacji dat wygaśnięcia i kodów błędów znajduje się tutaj: https://developers.paymill.com/guides/reference/testing#how-do-i-test-credit-card-specific-error kody – LeEnno

0

W celu weryfikacji można użyć ciągu znaków zamiast numeru.

'account.verification' => 'abc' 

Będzie to jak mojej wiedzy w wyniku nieudanej płatności nawet przy użyciu trybu CONNECTOR_TEST.