Utilisation de l'API PAY.JP avec Rails ~ Préparation de l'implémentation ~ (payjp.js v2)

Aperçu

Il s'agit d'un mémorandum de mise en œuvre de la fonction d'enregistrement / modification / suppression de carte dans l'API PAY.JP. Cette fois, nous résumerons la procédure jusqu'à l'acquisition des jetons en guise de préparation à la mise en œuvre.

Si vous avez des erreurs, nous vous serions reconnaissants de bien vouloir demander une modification.

Au fait, payjp.js contient de nombreux articles sur la v1, mais il convient de noter qu'il existe de nombreuses parties différentes de la v2 actuelle.

environnement

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

# Ruby Version
ruby:           2.6.5p114
Rails:          6.0.3.3

procédure

Inscrivez-vous avec PAY.JP

Sélectionnez ʻAPI` sur l'écran après l'enregistrement / la connexion. Il existe une «clé de test» et une «clé de production», mais utilisez la «clé de test».

Installez les gemmes requises

Gemfile


gem 'payjp'
gem 'dotenv-rails'

dotenv-rails est un joyau qui gère les variables d'environnement, donc ce n'est pas obligatoire, mais prenons la forme de ne pas écrire la clé privée directement dans le code. N'oubliez pas «bundle install» après avoir écrit.

Définir les variables d'environnement

Créez un fichier .env dans le répertoire de l'application et écrivez comme suit.

.env


PAYJP_SECRET_KEY = 'Tester la clé privée confirmée plus tôt'
PAYJP_PUBLIC_KEY = 'Tester la clé publique confirmée plus tôt'

En faisant cela, la clé peut être rendue variable, par exemple, la clé de test peut être exprimée en écrivant ʻENV [PAYJP_SECRET_KEY] . Vous pouvez vérifier le fonctionnement avec rails console`.

terminal


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

Soit dit en passant, si le nom du fichier est «.env.development», c'est un environnement de développement, et s'il s'agit de «.env.production», c'est un environnement de production. Vous pouvez utiliser des variables pour chaque environnement sans changer le code. Voir le github officiel (https://github.com/bkeepers/dotenv) pour plus de détails.

* Ne pas pousser les fichiers .env vers github. Définissons-le sur .gitignore. </ font>

Créer un modèle

Créez un modèle de carte.

terminal


$ rails g model card

Ce que vous devez enregistrer en tant que données reçues de PAY.JP est la colonne pour enregistrer l'ID client et l'ID de la carte. Avec ces deux, vous pouvez importer la plupart des données. Le code ci-dessous est également lié au «modèle utilisateur».

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

N'oubliez pas de migrer.

terminal


$ rails db:migrate

Ecrire un fichier JS

Ceci est presque une copie complète du guide officiel (https://pay.jp/docs/payjs-guidance). Officiellement, j'utilise onclick pour déclencher la génération de jetons, mais dans mon cas, cela n'a pas fonctionné, j'ai donc utilisé AddEventListener. Pour le moment, affichez le jeton et vérifiez le fonctionnement.

card_form.js


//Exécuter lorsque le chargement du DOM est terminé
document.addEventListener('DOMContentLoaded', () => {
  //Enregistrez la clé publique et obtenez l'objet de départ
  var payjp = Payjp('pk_test_hogehoge')

  //Obtient les éléments. Si vous souhaitez préparer plusieurs formulaires sur la page, veuillez en obtenir plusieurs
  var elements = payjp.elements()

  // element(Unité de formulaire d'entrée)Générer
  var numberElement = elements.create('cardNumber', {style: style})
  var expiryElement = elements.create('cardExpiry', {style: style})
  var cvcElement = elements.create('cardCvc', {style: style})
  //Placer l'élément sur DOM
  numberElement.mount('#number-form')
  expiryElement.mount('#expiry-form')
  cvcElement.mount('#cvc-form')
  
  //Préparer une fonction pour générer un jeton lorsque le bouton est enfoncé
  create_token.addEventListener("click", function() {
    payjp.createToken(numberElement).then(function(r) {
      document.querySelector('#token').innerText = r.error ? r.error.message : r.id
    })
  });
})

Écrire un fichier de vue

Pour le moment, je vais faire une description minimum pour afficher le formulaire. Réécrivons-le plus tard comme vous le souhaitez.

haml:_card_form.html.haml


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

-#En fait l'application.html.Il est préférable de l'écrire dans la partie en-tête telle que haml.
= 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"}
Création de jetons
  %span#token
jeton:

Contrôle de fonctionnement

Vous pouvez créer un formulaire comme celui-ci, alors entrez votre numéro de carte préféré à partir de la carte de test (https://pay.jp/docs/testcard) et vérifiez le fonctionnement. J'ai pu confirmer la génération du jeton.

Jusqu'à présent cette fois, je voudrais résumer la prochaine fois la mise en œuvre de la fonction d'enregistrement de carte.

référence

Après tout, l'API et le guide officiels sont les plus puissants. Cependant, avant de vous habituer à le lire, vous pouvez vous en faire une idée en regardant la procédure de mise en œuvre réelle sur Qiita, etc.

Référence de l'API PAY.JP https://pay.jp/docs/api/

Guide de l'utilisateur de l'API PAY.JP | PAY.JP https://pay.jp/docs/started
Le blog officiel est également utile, mais sachez que les informations sont souvent anciennes et conformes à la v1.

Utilisation très basique de PAY.JP (édition Ruby) - Blog d'ingénierie PAY.JP https://payjp.hatenablog.com/entry/2017/11/21/191916
Autres articles auxquels j'ai fait référence

Payjp.js V2 avec Rails Implémentation de la fonction d'enregistrement de carte de crédit Application Flima --Qiita https://qiita.com/ta9301/items/6b736390c49c3f40edb6

[HowTo] De la mise en œuvre de la fonction d'achat de produit à l'aide de Pay.jp à la configuration après l'achat du produit https://qiita.com/Tatsu88/items/eb420e372077939a4627

Recommended Posts

Utilisation de l'API PAY.JP avec Rails ~ Préparation de l'implémentation ~ (payjp.js v2)
Utilisation de l'API PAY.JP avec Rails ~ Enregistrement de la carte ~ (payjp.js v2)
Payjp.js V2 avec Rails Implémentation de la fonction d'enregistrement de carte de crédit Application Flima
[Rails] Implémentation de la fonction de catégorie multicouche en utilisant l'ascendance "Préparation"
Japaneseize en utilisant i18n avec Rails
Préparation au développement avec Rails
Comment définir des variables d'environnement lors de l'utilisation de Payjp avec Rails
[Rails] Recherche de livres (communication asynchrone) avec l'API Amazon PA v5.0
[Rails 6] Développement d'API à l'aide de GraphQL (Query)
[Rails] Implémentation de la fonction coupon (avec fonction de suppression automatique par traitement par lots)
Utilisation de Java avec AWS Lambda-Eclipse Préparation
J'ai essayé d'implémenter l'API Rails avec TDD par RSpec. part3-Implémentation d'action avec authentification-
Implémentation n ° 8 pour créer une API de tableau d'affichage avec autorisation de certification dans Rails 6
Implémentation de vérification des signes (Rails) pour détecter la falsification des paramètres de demande à l'aide de JWT
Construction de l'environnement du serveur API Rails à l'aide de docker-compose
Remarques sur l'utilisation de FCM avec Ruby on Rails
[Rails] Recherche de livres avec l'API Amazon PA
Créez une API de tableau d'affichage avec certification et autorisation dans Rails 6 # 6 show, créez une implémentation
API Rails
Construire une API de tableau d'affichage avec certification et autorisation dans le contrôleur Rails 6 # 5, implémentation des routes
Créer une API de tableau d'affichage avec autorisation de certification dans la mise à jour Rails 6 # 7, détruire l'implémentation
Interagir avec l'API de message LINE à l'aide de Lambda (Java)
[Rails] Résolution d'erreur lors de la génération de jetons avec PAYJP
[Rails] Implémentation de la fonction d'agrandissement d'image à l'aide de lightbox2
[Rails] Gestion des horaires à l'aide du calendrier complet Implémentation d'hier
[Nuxt / Rails] Implémentation POSTed en utilisant axios et devise_token_auth
Traduire à l'aide de l'API Microsoft Translator Text sur Android ~ Implémentation ~
Comment créer une API avec GraphQL et Rails
[Rails] Mise en œuvre du classement des nombres PV à l'aide de l'impressionniste
[Rails] Implémentation du diaporama d'images à l'aide de Bootstrap 3