Verwenden der PAY.JP-API mit Rails ~ Implementierungsvorbereitung ~ (payjp.js v2)

Überblick

Dies ist ein Memorandum zur Implementierung der Funktion zum Registrieren / Ändern / Löschen von Karten in der PAY.JP-API. Dieses Mal werden wir das Verfahren bis zum Erwerb von Token als Vorbereitung für die Implementierung zusammenfassen.

Wenn Sie Fehler haben, würden wir uns freuen, wenn Sie eine Bearbeitung anfordern könnten.

Übrigens hat payjp.js viele Artikel über v1, aber es sollte beachtet werden, dass es viele Teile gibt, die sich von der aktuellen v2 unterscheiden.

Umgebung

# OS Version
ProductName:	Mac OS X
ProductVersion:	10.15.7
BuildVersion:	19H2

# Ruby Version
ruby:           2.6.5p114
Rails:          6.0.3.3

Verfahren

Registrieren Sie sich bei PAY.JP

Wählen Sie nach der Registrierung / Anmeldung "API" auf dem Bildschirm. Es gibt "Testschlüssel" und "Produktionsschlüssel", aber verwenden Sie den "Testschlüssel".

Installieren Sie die erforderlichen Edelsteine

Gemfile


gem 'payjp'
gem 'dotenv-rails'

dotenv-Rails ist ein Juwel, das Umgebungsvariablen verwaltet, daher ist es nicht erforderlich. Nehmen wir jedoch die Form an, den privaten Schlüssel nicht direkt in den Code zu schreiben. Vergessen Sie nach dem Schreiben nicht die Bundle-Installation.

Umgebungsvariablen definieren

Erstellen Sie eine .env-Datei im App-Verzeichnis und schreiben Sie wie folgt.

.env


PAYJP_SECRET_KEY = 'Test privater Schlüssel früher bestätigt'
PAYJP_PUBLIC_KEY = 'Öffentlicher Testschlüssel früher bestätigt'

Auf diese Weise kann der Schlüssel variabel gemacht werden, beispielsweise kann der Testschlüssel durch Schreiben von "ENV [PAYJP_SECRET_KEY]" ausgedrückt werden. Sie können den Betrieb mit "Rails Console" überprüfen.

terminal


[1] pry(main)> require 'dotenv-rails'
=> true
[2] pry(main)> ENV['PAYJP_SECRET_KEY']
=> "sk_test_hogehoge"

Übrigens, wenn der Dateiname ".env.development" ist, die Entwicklungsumgebung, und wenn es ".env.production" ist, kann der Code so verwendet werden, wie er ist, und Variablen können für jede Umgebung verwendet werden. Weitere Informationen finden Sie im offiziellen Github (https://github.com/bkeepers/dotenv).

* .env-Dateien nicht an github senden. Stellen wir es auf .gitignore ein. </ font>

Erstellen Sie ein Modell

Erstellen Sie ein Kartenmodell.

terminal


$ rails g model card

Was Sie als von PAY.JP empfangene Daten speichern müssen, ist die Spalte zum Speichern der "Kunden-ID" und der "Karten-ID". Mit diesen beiden können Sie die meisten Daten einbringen. Der folgende Code ist auch mit dem "Benutzermodell" verknüpft.

migrationfile


class CreateCards < ActiveRecord::Migration[6.0]
  def change
    create_table :cards do |t|
      t.reference :user, null: false
      t.string :customer_id, null: false
      t.string :card_id, null: false
      t.timestamps
    end
  end
end

Vergessen Sie nicht zu migrieren.

terminal


$ rails db:migrate

JS-Datei schreiben

Dies ist fast eine vollständige Kopie des offiziellen Leitfadens (https://pay.jp/docs/payjs-guidance). Offiziell benutze ich onclick, um die Token-Generierung auszulösen, aber in meinem Fall hat es nicht funktioniert, also habe ich AddEventListener verwendet. Zeigen Sie vorerst das Token an und überprüfen Sie den Vorgang.

card_form.js


//Wird ausgeführt, wenn das Laden des DOM abgeschlossen ist
document.addEventListener('DOMContentLoaded', () => {
  //Registrieren Sie den öffentlichen Schlüssel und erhalten Sie das Startobjekt
  var payjp = Payjp('pk_test_hogehoge')

  //Ruft die Elemente ab. Wenn Sie mehrere Formulare auf der Seite vorbereiten möchten, erhalten Sie mehrere
  var elements = payjp.elements()

  // element(Formulareinheit eingeben)Generieren
  var numberElement = elements.create('cardNumber', {style: style})
  var expiryElement = elements.create('cardExpiry', {style: style})
  var cvcElement = elements.create('cardCvc', {style: style})
  //Platziere das Element auf DOM
  numberElement.mount('#number-form')
  expiryElement.mount('#expiry-form')
  cvcElement.mount('#cvc-form')
  
  //Bereiten Sie eine Funktion vor, um beim Drücken der Taste einen Token zu generieren
  create_token.addEventListener("click", function() {
    payjp.createToken(numberElement).then(function(r) {
      document.querySelector('#token').innerText = r.error ? r.error.message : r.id
    })
  });
})

Schreiben Sie eine Ansichtsdatei

Vorerst werde ich eine Mindestbeschreibung erstellen, um das Formular anzuzeigen. Lassen Sie es uns später nach Ihren Wünschen umschreiben.

haml:_card_form.html.haml


:css
  .Payjs__outer {
    border: solid 1px;
  }

-#Eigentlich Anwendung.html.Es ist besser, es in den Header-Teil wie haml zu schreiben.
= javascript_include_tag 'https://js.pay.jp/v2/pay.js'

.Payjs
  .Payjs__outer{id: "number-form"}
  .Payjs__outer{id: "expiry-form"}
  .Payjs__outer{id: "cvc-form"}
  %button{id: "create_token"}
Token-Erstellung
  %span#token
Zeichen:

Funktionsprüfung

Sie können ein solches Formular erstellen. Geben Sie daher Ihre Lieblingskartennummer von der Testkarte (https://pay.jp/docs/testcard) ein und überprüfen Sie den Vorgang. Ich konnte die Generierung des Tokens bestätigen.

Bisher möchte ich diesmal beim nächsten Mal die Implementierung der Kartenregistrierungsfunktion zusammenfassen.

Referenz

Immerhin sind die offizielle API und der Leitfaden am stärksten. Wenn Sie jedoch nicht daran gewöhnt sind, es zu lesen, können Sie ein Gefühl dafür bekommen, während Sie sich das eigentliche Implementierungsverfahren für Qiita usw. ansehen.

PAY.JP API-Referenz https://pay.jp/docs/api/

PAY.JP API Benutzerhandbuch | PAY.JP https://pay.jp/docs/started
Der offizielle Blog ist ebenfalls hilfreich, aber beachten Sie, dass die Informationen oft alt und v1-konform sind.

Sehr einfache Verwendung von PAY.JP (Ruby Edition) --PAY.JP Engineering Blog https://payjp.hatenablog.com/entry/2017/11/21/191916
Andere Artikel, auf die ich mich bezog

Payjp.js V2 mit Rails Implementierung der Kreditkartenregistrierungsfunktion Flima App --Qiita https://qiita.com/ta9301/items/6b736390c49c3f40edb6

[HowTo] Von der Implementierung der Produktkauffunktion mit Pay.jp bis zur Einstellung nach dem Produktkauf https://qiita.com/Tatsu88/items/eb420e372077939a4627

Recommended Posts

Verwenden der PAY.JP-API mit Rails ~ Implementierungsvorbereitung ~ (payjp.js v2)
Verwenden der PAY.JP-API mit Rails ~ Kartenregistrierung ~ (payjp.js v2)
Payjp.js V2 mit Rails Implementierung der Kreditkartenregistrierungsfunktion Flima App
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Vorbereitung"
Japanisieren Sie mit i18n mit Rails
Vorbereitung für die Entwicklung mit Rails
Festlegen von Umgebungsvariablen bei Verwendung von Payjp mit Rails
[Rails] Buchsuche (asynchrone Kommunikation) mit Amazon PA API v5.0
[Rails 6] API-Entwicklung mit GraphQL (Query)
[Rails] Implementierung der Couponfunktion (mit automatischer Löschfunktion mittels Stapelverarbeitung)
Verwenden von Java mit AWS Lambda-Eclipse-Vorbereitung
Ich habe versucht, die Rails-API mit TDD von RSpec zu implementieren. Teil3-Aktionsimplementierung mit Authentifizierung
# 8 Seed-Implementierung zum Erstellen einer Bulletin Board-API mit Zertifizierungsautorisierung in Rails 6
Implementierung der Zeichenüberprüfung (Rails) zum Erkennen von Manipulationen an Anforderungsparametern mithilfe von JWT
Rails API-Serverumgebungskonstruktion mit Docker-Compose
Hinweise zur Verwendung von FCM mit Ruby on Rails
[Rails] Buchsuche mit Amazon PA API
Erstellen Sie eine Bulletin Board-API mit Zertifizierung und Autorisierung in Rails 6 # 6. Zeigen Sie, erstellen Sie die Implementierung
Rails API
Erstellen Sie eine Bulletin Board-API mit Zertifizierung und Autorisierung im Rails 6 # 5-Controller und leiten Sie die Implementierung weiter
Erstellen Sie eine Bulletin Board-API mit Zertifizierungsberechtigung im Rails 6 # 7-Update und zerstören Sie die Implementierung
Interagieren Sie mit der LINE Message API mit Lambda (Java)
[Rails] Fehlerbehebung beim Generieren von Token mit PAYJP
[Rails] Implementierung der Bildvergrößerungsfunktion mit Lightbox2
[Rails] Zeitplanverwaltung mit der Implementierung von Full Calendar Yesterday
[Nuxt / Rails] POST-Implementierung mit axios und devise_token_auth
Übersetzen Sie mit der Microsoft Translator Text API unter Android ~ Implementierung ~
So erstellen Sie eine API mit GraphQL und Rails
[Rails] Implementierung des PV-Nummernrankings mit Impressionist
[Rails] Implementierung einer Bild-Diashow mit Bootstrap 3