# PayNow-Zahlung annehmen

Akzeptieren Sie Online-Zahlungen mit PayNow, einem in Singapur beliebten Geld-Überweisungsdienst.

# Direkt-API


PayNow ist eine Zahlungsmethode zur [einmaligen Verwendung](https://docs.stripe.com/payments/payment-methods.md#usage). Kundinnen/Kunden verwenden ihre bevorzugte App von teilnehmenden Banken und anderen teilnehmenden Finanzinstituten (keine Banken), um den QR-Code zu scannen, der ihnen beim Bezahlvorgang vorgelegt wird, und die Zahlung abzuschließen.

Dieser Leitfaden beschreibt die Verwendung von Paynow in Ihrem Online Bezahlvorgang. Für persönliche Zahlungen mit Stripe Terminal finden Sie weitere Informationen unter [Zusätzliche Zahlungsmethoden](https://docs.stripe.com/terminal/payments/additional-payment-methods.md).

## Stripe einrichten

Zunächst benötigen Sie ein Stripe-Konto. [Jetzt registrieren](https://dashboard.stripe.com/register).

Verwenden Sie unsere offiziellen Bibliotheken für den Zugriff auf die Stripe-API über Ihre Anwendung:

#### Ruby

```bash
# Available as a gem
sudo gem install stripe
```

```ruby
# If you use bundler, you can add this line to your Gemfile
gem 'stripe'
```

## PaymentIntent erstellen [Serverseitig]

Ein [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) ist ein Objekt, das Ihre Absicht darstellt, eine Zahlung von einem Endkunden/einer Endkundin einzuziehen, und den Lifecycle des Zahlungsprozesses über jede Phase hinweg verfolgt. Erstellen Sie zunächst einen PaymentIntent auf Ihrem Server und geben Sie den einzuziehenden Betrag und die Währung an. [Aktivieren Sie PayNow](https://dashboard.stripe.com/settings/payment_methods) in Ihrem Dashboard, um [dynamische Zahlungsmethoden](https://docs.stripe.com/payments/payment-methods/dynamic-payment-methods.md) zu nutzen.

```curl
curl https://api.stripe.com/v1/payment_intents \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "automatic_payment_methods[enabled]=true" \
  -d "payment_method_data[type]=paynow" \
  -d amount=1099 \
  -d currency=sgd
```

### Client-Geheimnis abrufen

Im PaymentIntent ist ein *Client-Geheimnis* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)) enthalten, das auf dem Client verwendet wird, um Zahlungen sicher abzuschließen. Es gibt verschiedene Verfahren zum Übergeben des Client-Geheimnisses an den Client.

#### Einseitige Anwendung

Rufen Sie das Client-Geheimnis von einem Endpoint auf Ihrem Server ab, indem Sie die Browser-Funktion `fetch` verwenden. Diese Vorgehensweise funktioniert am besten, wenn es sich bei Ihrer Client-Seite um eine einseitige Anwendung handelt, insbesondere wenn sie mit einem modernen Frontend-Framework wie React erstellt wurde. Erstellen Sie den Server-Endpoint, der das Client-Geheimnis bereitstellt:

#### Ruby

```ruby
get '/secret' do
  intent = # ... Create or retrieve the PaymentIntent
  {client_secret: intent.client_secret}.to_json
end
```

Und dann rufen Sie das Client-Geheimnis mit JavaScript auf der Client-Seite ab:

```javascript
(async () => {
  const response = await fetch('/secret');
  const {client_secret: clientSecret} = await response.json();
  // Render the form using the clientSecret
})();
```

#### Serverseitiges Rendering

Übergeben Sie das Client-Geheimnis von Ihrem Server an den Client. Diese Vorgehensweise funktioniert am besten, wenn Ihre Anwendung statische Inhalte auf dem Server generiert, bevor sie an den Browser gesendet werden.

Fügen Sie das [client_secret](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-client_secret) in Ihr Bezahlformular ein. Rufen Sie in Ihrem serverseitigen Code das Client-Geheimnis aus dem PaymentIntent ab:

#### Ruby

```erb
<form id="payment-form" data-secret="<%= @intent.client_secret %>">
  <button id="submit">Submit</button>
</form>
```

```ruby
get '/checkout' do
  @intent = # ... Fetch or create the PaymentIntent
  erb :checkout
end
```

## QR-Code von PayNow anzeigen [Clientseitig]

In diesem Schritt führen Sie PayNow-Zahlungen auf dem Client mit [Stripe.js](https://docs.stripe.com/payments/elements.md) durch. Binden Sie das Stripe.js-Skript auf Ihrer Bezahlseite ein, indem Sie es dem `head` Ihrer HTML-Datei hinzufügen.

#### HTML

```html
<head>
  <title>Checkout</title>
  <script src="https://js.stripe.com/dahlia/stripe.js"></script>
</head>
```

Erstellen Sie einen Instanz von Stripe.js mit dem folgenden JavaScript auf Ihrer Bezahlseite.

#### JavaScript

```js
// Set your publishable key. Remember to change this to your live publishable key in production.
// See your keys here: https://dashboard.stripe.com/apikeys
var stripe = Stripe('<<YOUR_PUBLISHABLE_KEY>>');
```

Verwenden Sie `stripe.confirmPayNowPayment`, um die Zahlung auf der Client-Seite zu bestätigen.

#### JavaScript

```js
var form = document.getElementById('payment-form');

form.addEventListener('submit', function(event) {
  event.preventDefault();

  // Set the clientSecret here you got in Step 2
  stripe.confirmPayNowPayment(
    clientSecret,
  ).then((res) => {
    if(res.paymentIntent.status === 'succeeded') {
      // The user scanned the QR code
    } else {
      // The user closed the modal, cancelling payment
    }
  });
});
```

Nach dem Aufruf von `confirmPayNowPayment` zeigt die Webseite einen QR-Code an. Ihre Kundinnen/Kunden können den QR-Code scannen und die Zahlung mit ihrer bevorzugten Banking-App oder Zahlungs-App authentifizieren. Sie sollten auf der Seite mit dem QR-Code bleiben, bis Stripe [die Bestellung ausführt](https://docs.stripe.com/payments/paynow/accept-a-payment.md#fulfill-order) und Sie das Ergebnis der Zahlung kennen.

## Bestellung ausführen [Serverseitig]

[Verwenden Sie eine Methode wie Webhooks](https://docs.stripe.com/payments/payment-intents/verifying-status.md#webhooks), um die *Ausführung* (Fulfillment is the process of providing the goods or services purchased by a customer, typically after payment is collected) der Bestellung abzuwickeln, statt sich darauf zu verlassen, dass Ihre Kundinnen/Kunden zur Zahlungsstatusseite zurückkehren. Wenn ein Kunde/eine Kundin die Zahlung abschließt, wechselt der `PaymentIntent` zu `succeeded` und gibt das *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests)-Ereignis [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded) aus.

## Ihre Integration testen

Während des Tests können Sie den QR-Code mit einer QR-Code-Scanner-App auf Ihrem Mobilgerät scannen. Die Nutzlast des QR-Codes enthält eine URL, die Sie zu einer von Stripe gehosteten Test-Zahlungsseite von PayNow weiterleitet, auf der Sie die Testzahlung entweder autorisieren oder ablehnen können.

Im Live-Modus können Sie den QR-Code mit einer App von teilnehmenden Banken und anderen teilnehmenden Finanzinstituten (keine Banken) scannen.

