生成条带测试卡令牌以进行测试

时间:2016-01-05 19:18:03

标签: php stripe-payments

我在我的应用中使用Stripe。我想编写一个集成测试来放置支票,检查Stripe是否创建了付款。我正在使用Stripe.js。

在我的测试中,我需要一个卡片令牌来执行测试费用。通常,此令牌将在客户端生成带有stripe.js并在请求中发送以执行计费。由于这只是服务器端测试,我可以通过某种方式在测试中生成令牌吗?

作为参考,测试将是这样的(使用PHP,但原理是相同的):

/** @test **/
public function it_creates_a_charge()
{
    $order = factory(Order::class)->create();
    $stripe_token = Stripe::generateToken([
                                          'card' => '4242424242424242'
                                          'exp'  => '04/2017',
                                          'cvc'  => '123'
                                          ]); // does not exist afaik

    $response = $this->post('charges/store', [
                'stripe_token' => $stripe_token,
                'order_id' => $order->id,
                //etc
                ]);

    // assertions...
}

基本上我在问Stripe API中是否有允许生成服务器端令牌的内容。

3 个答案:

答案 0 :(得分:21)

Stripe provides an API call to create tokens from the server:

\Stripe\Stripe::setApiKey("sk_test_BQokikJOvBiI2HlWgH4olfQ2");

\Stripe\Token::create(array(
  "card" => array(
    "number" => "4242424242424242",
    "exp_month" => 1,
    "exp_year" => 2017,
    "cvc" => "314"
  )
));

答案 1 :(得分:11)

您无需再使用虚假信用卡创建令牌进行测试。 Stripe现在为此提供了一个预制令牌列表:

Stripe docs : Test card numbers and tokens

答案 2 :(得分:-1)

为Stripe生成测试令牌的最简单方法(PURE JS)不需要PHP,使用下面的代码并通过添加测试键在本地运行

    <html>
      <head>
        <title>create stripe  token in js</title>
        <script src="https://js.stripe.com/v3/"></script>
        <style type="text/css">

      .StripeElement {
        background-color: white;
        height: 40px;
        padding: 10px 12px;
        border-radius: 4px;
        border: 1px solid transparent;
        box-shadow: 0 1px 3px 0 #e6ebf1;
        -webkit-transition: box-shadow 150ms ease;
        transition: box-shadow 150ms ease;
      }

      .StripeElement--focus {
        box-shadow: 0 1px 3px 0 #cfd7df;
      }

      .StripeElement--invalid {
        border-color: #fa755a;
      }

      .StripeElement--webkit-autofill {
        background-color: #fefde5 !important;
      }

        </style>    
      </head>
      <body>
        <form action="/charge" method="post" id="payment-form">
            <div class="form-row">
              <label for="card-element">
                Credit or debit card
              </label>
              <div id="card-element">
                <!-- a Stripe Element will be inserted here. -->
              </div>

              <!-- Used to display form errors -->
              <div id="card-errors" role="alert"></div>
            </div>

            <button>Submit Payment</button>
          </form>    
          <textarea style="width:400px; height:200px;" id="stripeToken" placeholder="Stripe token will print here."></textarea>


          <script type="text/javascript">
           // Create a Stripe client
          var stripe = Stripe('pk_test_xpuKHHXWfW9eUw6DlmNZQI5N');

          // Create an instance of Elements
          var elements = stripe.elements();

          // Custom styling can be passed to options when creating an Element.
          // (Note that this demo uses a wider set of styles than the guide below.)
          var style = {
            base: {
              color: '#32325d',
              lineHeight: '18px',
              fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
              fontSmoothing: 'antialiased',
              fontSize: '16px',
              '::placeholder': {
                color: '#aab7c4'
              }
            },
            invalid: {
              color: '#fa755a',
              iconColor: '#fa755a'
            }
          };

          // Create an instance of the card Element
          var card = elements.create('card', {style: style});

          // Add an instance of the card Element into the `card-element` <div>
          card.mount('#card-element');

          // Handle real-time validation errors from the card Element.
          card.addEventListener('change', function(event) {
            var displayError = document.getElementById('card-errors');
            if (event.error) {
              displayError.textContent = event.error.message;
            } else {
              displayError.textContent = '';
            }
          });

          // Handle form submission
          var form = document.getElementById('payment-form');
          form.addEventListener('submit', function(event) {
            event.preventDefault();

            stripe.createToken(card).then(function(result) {
              if (result.error) {
                // Inform the user if there was an error
                var errorElement = document.getElementById('card-errors');
                errorElement.textContent = result.error.message;
              } else {
                // Send the token to your server
                console.log(result);
                document.getElementById('stripeToken').value=result.token.id;
              }
            });
          });

        </script>
      </body>
    </html>