8

バックグラウンド

質問

テスト支払いを失敗させるにはどうすればよいですか?(たとえば、カードが拒否された、または将来のサブスクリプション支払いでカードの有効期限が切れた)

Stripeでは、特別なカード番号を使用してこれを行うことができますが、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 = "mike@mike.com"
      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
4

2 に答える 2

4

現在のところ、これらの問題をシミュレートするための特別なクレジットカード番号はありません。ただし、コミュニティからの要求により、これは現在、実装のバックログにあります。この機能に関心を示すために、サポートにメールを送信することをお勧めします。リクエストが多いほど、機能の実装が速くなります。

編集:PAYMILLは特別なMasterCard番号を提供するようになりました。これは、有効期限の月と年の特定の組み合わせが使用された場合に失敗します。たとえば、有効期限が02/2020として送信された場合、カード5105105105105100はRESPONSE_BACKEND_BLACKLISTEDが原因で失敗します。

于 2012-12-20T16:15:16.903 に答える
0

検証値に数値ではなく文字列を使用することができます。

'account.verification'    => 'abc'

これは私の知る限り、CONNECTOR_TESTモードを使用している場合でも支払いに失敗する結果になります。

于 2013-04-30T07:46:09.950 に答える