2012-12-20 35 views
8

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 

Trả lời

4

Tính đến hôm nay, không có số thẻ tín dụng đặc biệt để mô phỏng những vấn đề này. Tuy nhiên, do nhu cầu từ cộng đồng, điều này hiện đang tồn đọng trong quá trình thực hiện. Tôi muốn đề nghị gửi email đến bộ phận hỗ trợ để thể hiện sự quan tâm đến tính năng này. Càng nhiều yêu cầu, tính năng sẽ càng được triển khai nhanh hơn.

CHỈNH SỬA: PAYMILL hiện cung cấp số MasterCard đặc biệt, số này sẽ thất bại nếu sử dụng kết hợp nhất định tháng và năm hết hạn. Ví dụ: thẻ 5105105105105100 sẽ không thành công do RESPONSE_BACKEND_BLACKLISTED nếu ngày hết hạn được gửi là 02/2020.

+0

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

0

Điều bạn có thể làm là sử dụng chuỗi thay vì số cho giá trị xác minh.

'account.verification' => 'abc' 

Theo hiểu biết của tôi, thanh toán không thành công ngay cả khi sử dụng chế độ CONNECTOR_TEST.

Các vấn đề liên quan