iot_algyan_hands-on_20161129

48
PayPal/Braintree Hands-on IoT ALGYAN November 29 2016 ©2015 PayPal Inc. Confidential and proprietary.

Upload: junichi-okamura

Post on 15-Jan-2017

1.085 views

Category:

Internet


0 download

TRANSCRIPT

Page 1: Iot_algyan_hands-on_20161129

PayPal/Braintree Hands-onIoT ALGYAN

November 29 2016

©2015 PayPal Inc. Confidential and proprietary.

Page 2: Iot_algyan_hands-on_20161129

Who am I?

©2015 PayPal Inc. Confidential and proprietary. 2

岡村 純一 Junichi OkamuraPayPal Integration Manager/EvangelistScala/Java/Node.js/Python/Ruby/PHP/../Mobile/../ppt

Rock/Wine/DQ/JOJO/I18N/Marketing/Payment

API Lover/Midnight Developer/TDD (Talk Driven Development) Advocator/MANGA Creator (new)

@benzookapi

[email protected]

Page 3: Iot_algyan_hands-on_20161129

本日の内容

• PayPal とその API 、決済手段の概要( 10 分)

• v.zero Node.js SDK による PayPal 実装( 80 分)− システム概要・環境設定・確認( 10 分)− Sandbox でテストアカウントと認証情報作成( 20 分)− Node.js SDK でのサーバーサイド実装( 20 分)− JavaScript Client での決済画面実装( 20 分)− チェックアウトして決済してみる、本番運用その他( 10 分)

• Braintree Developer Site を使ったセルフチャレンジ( 30 分)− Vault をつかった継続課金の実装− Braintree Sandbox を使って Hosted Field に挑戦!− PayPal スタッフになんでも質問− ドキュメントを見ながら色々トライ

©2016 PayPal Inc. Confidential and proprietary.

Page 4: Iot_algyan_hands-on_20161129

©2016 PayPal Inc. Confidential and proprietary.

PayPal とその API 、決済手段の概要

Page 5: Iot_algyan_hands-on_20161129

PayPal とは?

• 様々な資金元に対応した決済サービス(デジタルお財布)

• 売り手、買い手に同一アカウントでなれる双方向プラットフォーム

• 売り手、買い手保護の仕組み

• 多通貨( 20 以上)、多地域( 200 以上)、多言語対応のグローバルサービス

• =汎用的で、安心な、どこでも使える決済

©2016 PayPal Inc. Confidential and proprietary.

Page 6: Iot_algyan_hands-on_20161129

PayPal Holdings

©2016 PayPal Inc. Confidential and proprietary.

eBay から独立し再上場、買収により決済全体を網羅する Payment 企業に成長

PayPalCredit CardApple Pay

Android PayBitcoin

P2PPrivate

Store-frontOffline

P2PInvoice

Cross border

Page 7: Iot_algyan_hands-on_20161129

API Platform

©2016 PayPal Inc. Confidential and proprietary.

Braintree の API プラットフォーム v.zero を基盤に様々な決済手段を網羅

Page 8: Iot_algyan_hands-on_20161129

  v.zero (Braintree)

API の変遷

©2016 PayPal Inc. Confidential and proprietary.

独自仕様のレガシーからオープン仕様( OAI や OAS )、様々な決済手段へ

Classic API   REST APIMobile SDK

Web Web

Mobile

Web

Mobile

Others…

  Holdlings

Page 9: Iot_algyan_hands-on_20161129

PayPal 決済の種類

• 都度決済( Checkout )

• 定期支払( Recurring Payment )

• 従量課金( Reference Transaction )

• マーケットプレイス用決済

• 送金( Payout )

©2016 PayPal Inc. Confidential and proprietary.

Page 10: Iot_algyan_hands-on_20161129

都度決済( Check out )

• 商品と金額を指定して支払うワンタイム決済

• EC サイトやスマホアプリでの購入

• 配送や予約の伴う取引にも対応

©2016 PayPal Inc. Confidential and proprietary.

Page 11: Iot_algyan_hands-on_20161129

定期支払( Recurring Payment )

• 事前承認をもとに決済を定期的に繰り返す

• 月額会費制のサービスなど

• PayPal 側で定期決済を行ってくれる

• 定期決済の成功、失敗は PayPal が通知

©2016 PayPal Inc. Confidential and proprietary.

Page 12: Iot_algyan_hands-on_20161129

従量課金( Reference Transaction )

• 事前承認をもとに任意のタイミングで任意の金額を決済する

• ゲーム課金、動画月額支払いなど

• 売り手の自由度が高い強力決済(別途審査必要)

©2016 PayPal Inc. Confidential and proprietary.

Page 13: Iot_algyan_hands-on_20161129

マーケットプレイス用決済

• 一度の決済に複数の受け取り者がいる決済

• 市場やクラウドソーシングなどの手数料

©2016 PayPal Inc. Confidential and proprietary.

Page 14: Iot_algyan_hands-on_20161129

送金( Payout )

• 複数の受け取り者に一括して支払う方法

• アフィリエイト報酬など

• 厳密には決済でなく送金

• 手数料計算は決済とは別

©2016 PayPal Inc. Confidential and proprietary.

Page 15: Iot_algyan_hands-on_20161129

詳細は…

日本向け特設サイト『 PayPal ビジネスガイド 開発者向け』

ページをご覧ください!https://www.paypal.jp/merchant/developer/

©2016 PayPal Inc. Confidential and proprietary.

Page 16: Iot_algyan_hands-on_20161129

お知らせ

Qiitaやってます!

http://qiita.com/tags/PayPal(フォロー、投稿してね!)

©2016 PayPal Inc. Confidential and proprietary.

Page 17: Iot_algyan_hands-on_20161129

お知らせ

QPayPal Tech Meetup #4年末スペシャル!

来てね!https://eventdots.jp/event/605049

©2016 PayPal Inc. Confidential and proprietary.

Page 18: Iot_algyan_hands-on_20161129

©2016 PayPal Inc. Confidential and proprietary.

v.zero Node.js SDK による PayPal 実装

Page 19: Iot_algyan_hands-on_20161129

ゴール

先ほどご説明した都度決済を  新しい API v.zero node.js SDK で

実装してみる!

©2016 PayPal Inc. Confidential and proprietary.

Page 20: Iot_algyan_hands-on_20161129

システム概要

©2016 PayPal Inc. Confidential and proprietary.

PayPalSandbox =Test

PayPal本番環境

BraintreeSandbox =Test

Braintree本番環境

v.zero=Braintree’s API

PayPal

Credit Card

Apple Pay, etc…

切り替え切り替え

作成に必要

Personal: 支払い用Business: 受け取り用

Page 21: Iot_algyan_hands-on_20161129

参照する URL

• PayPal Developer Site (コードは未完。深く学ぶにはここからコピペ+修正を推奨)− https://developer.paypal.com/

• ペイパルビジネスガイド - 開発者向け− https://www.paypal.jp/merchant/developer/

• PayPal Sandbox− https://www.sandbox.paypal.com/ (本番 URL に「 sandbox.」を付与)

• 正解コード(動作検証済み。詰まったらここからコピペ)− https://github.com/benzookapi/VZeroNodeDemo

©2016 PayPal Inc. Confidential and proprietary.

Page 22: Iot_algyan_hands-on_20161129

環境設定・確認

• Node.js (npm) セットアップ済み−参考: https://liginc.co.jp/web/programming/node-js/85318(「 LIG node」で検索)−「 npm」コマンドがターミナルで実行できる状態

• PayPal 本番アカウント取得済み(パーソナルでも OK !)− みんな今日の申し込みのためにアカウント持ってるはずだけど、もし持っていない方はこちら!− https://www.paypal.com/jp/signup/account(「ペイパル 登録」で検索)

©2016 PayPal Inc. Confidential and proprietary.

〜19:20

Page 23: Iot_algyan_hands-on_20161129

Sandbox でテストアカウントと認証情報作成(1)

• Sandbox アカウントの作成− Developer Site に本番アカウントでログインします− [Sandbox]->[Accounts] に移動します−パーソナルアカウント(支払い用)、ビジネスアカウント(受け取り用)を作ります• デフォルトで2つ用意されていますが、これを使う場合は、 [Profile] でパスワードを再設定してください!

• パーソナルアカウントは支払いに使うのでクレジットカードの登録を忘れずに!

− ビジネスガイドも参照!• https://www.paypal.jp/merchant/developer/sandbox/

− Sandbox に作成したアカウントでログインできるか確認してください!• https://www.sandbox.paypal.com/jp/webapps/mpp/merchant

©2016 PayPal Inc. Confidential and proprietary.

〜19:40

Page 24: Iot_algyan_hands-on_20161129

Sandbox でテストアカウントと認証情報作成(2)

• Sandbox 用の v.zero 認証情報の取得− 同じ Dashboard の「My Apps & Credentials」メニューで「 Generate Credential」ボタンを押す−先ほど作ったビジネスアカウントを選んで、 Credential を作成(ビジネスアカウントしか表示されません)−表示された「 Access Token」が後で必要になります。

©2016 PayPal Inc. Confidential and proprietary.

〜19:40

Page 25: Iot_algyan_hands-on_20161129

Sandbox でテストアカウントと認証情報作成(3)

• うまくいかない人は正解コードの README の作成済みアカウントを使ってください!− https://github.com/benzookapi/VZeroNodeDemo

©2016 PayPal Inc. Confidential and proprietary.

〜19:40

Page 26: Iot_algyan_hands-on_20161129

Node.js SDK でのサーバーサイド実装(1)

• 決済画面及びサーバー用の Node.js アプリを用意する− すでに Node.js のアプリがある方はそれを使ってください− ない方は、以下を参考に Express をインストールしてサンプルアプリを起動しましょう− https://gist.github.com/mitsuruog/fc48397a8e80f051a145(「 express 実践入門」で検索)− 以下のコマンドで作れます。

• 動作確認− http://localhost:3000/ にアクセスしてページが表示されることを確認− 動作確認できたら Ctrl+C で一旦終了©2016 PayPal Inc. Confidential and proprietary.

〜20:00

npm install express-generator –gexpress myappcd myappnpm installnpm start

Page 27: Iot_algyan_hands-on_20161129

Node.js SDK でのサーバーサイド実装(2)

• v.zero Node.js SDK のインストール− アプリの場所で以下のコマンド実行

• PayPal Developer Site 内の v.zero のページを開く− [Top]->[Docs]->[PayPal Checkout]->[Express Checkout ve.zero SDK]->[Setup Your Server]−「 Node.js」を選択

©2016 PayPal Inc. Confidential and proprietary.

〜20:00

npm install braintree

Page 28: Iot_algyan_hands-on_20161129

Node.js SDK でのサーバーサイド実装(3)

• ①Access Token− Credentials で生成したトークンです。サーバー側で管理し、他人に見せてはいけません。

• ②Client Token− Access Token を元にサーバー側で生成します。クライアント( WEB ページやアプリの決済画面)で使います。他人に見せても構いません。

• ③(Payment Method )Nonce− クライアントが Client Token を使って、ユーザー操作の後に生成します。他人に見せない方がいいです。

• ④サーバー側の決済処理−①の Access Token と③の Payment Method Nonce を使って行います。両者が正しくないと使えません。−③は使い回すことはできないワンタイムなものです。

©2016 PayPal Inc. Confidential and proprietary.

用語と処理フローの確認

Page 29: Iot_algyan_hands-on_20161129

Node.js SDK でのサーバーサイド実装(4)

• 初期画面表示で Client Token を生成します。− routes/index.js を修正−コードは先ほどの Developer Site のものを使用。−正解コードも参照。

©2016 PayPal Inc. Confidential and proprietary.

Client Token の生成(以後コードは冒頭の Express アプリで説明します)

var braintree = require('braintree')

router.get('/', function(req, res, next) { var gateway = braintree.connect({ accessToken: ‘ 自分の Credentails の Access Token を貼り付け ' }); gateway.clientToken.generate({}, function (err, response) { res.render('index', { title: 'Express', clientToken: response.clientToken }); }); });

Page 30: Iot_algyan_hands-on_20161129

Node.js SDK でのサーバーサイド実装(5)

• 初期画面に Client Token を埋め込みます。− views/index.jade を修正− サーバー側の変数名「 clientToken」に対応します。−ブラウザリロードする Client Token が表示されます。−反映されない場合はサーバーを再起動してください。

©2016 PayPal Inc. Confidential and proprietary.

Client Token の画面表示

p Welcome to #{title} #{clientToken}

Page 31: Iot_algyan_hands-on_20161129

Node.js SDK でのサーバーサイド実装(6)

• クライアントから呼ばれる処理を実装します。− routes/index.js にコード追加−コードは先ほどの Developer Site のものを使用。− order 、 shipping などの情報は削除可。− merchantAccountId で通貨設定−正解コードも参照。

©2016 PayPal Inc. Confidential and proprietary.

Nonce を受け取って決済をする実装 app.post("/checkout", function (req, res) { var gateway = braintree.connect({ accessToken: ‘ 前のページと同じ AccessToken'   }); var saleRequest = { amount: req.body.amount, merchantAccountId: ”JPY", paymentMethodNonce: req.body.payment_method_nonce, options: { submitForSettlement: true } }; gateway.transaction.sale(saleRequest, function (err, result) { if (err) { res.send("<h1>Error: " + err + "</h1>"); } else if (result.success) { res.send("<h1>Success! Transaction ID: " + result.transaction.id + "</h1>"); } else { res.send("<h1>Error: " + result.message + "</h1>"); } });});

Page 32: Iot_algyan_hands-on_20161129

JavaScript Client での決済画面実装(1)

• PayPal Developer Site 内のクライアント実装のページを開く− [Top]->[Docs]->[PayPal Checkout]->[Express Checkout ve.zero SDK]->[Setup Your Client]−「 JS v3」を選択

©2016 PayPal Inc. Confidential and proprietary.

〜20:20

Page 33: Iot_algyan_hands-on_20161129

JavaScript Client での決済画面実装( 2 )

• 決済ボタンを作ってイベント記述。−   views/index.jade を右に変更• 元のコードは消します

−コードは先ほどの Developer Site のものを使用。• Use the direct links• PayPal configuration• 「 div#paypal.」を使って jade に生 HTML を挿入

• 「 div#paypal.」以下はインデント下げる

• Button の Id は「 paypal-button」に

• authorization は‘#{clientToken}’ に

• shipping address は削除可

• data-locale=“ja_JP” で日本語ボタン可

• amount 、 currency で金額、通貨設定可

• locale で表示言語設定可

−正解コードも参照。

©2016 PayPal Inc. Confidential and proprietary.

Client Token から PayPal 画面を表示する実装div#paypal. <script src="https://js.braintreegateway.com/web/3.5.0/js/client.min.js"></script> <script src="https://js.braintreegateway.com/web/3.5.0/js/paypal.min.js"></script> <script src="https://www.paypalobjects.com/api/button.js?" data-merchant="braintree" data-id="paypal-button" data-button="checkout" data-color="gold" data-size="medium" data-shape="pill" data-button_type="submit" data-button_disabled="false” data-locale="ja_JP" ></script> <script> var paypalButton = document.getElementById('paypal-button'); braintree.client.create({ authorization: '#{clientToken}' }, function (clientErr, clientInstance) { braintree.paypal.create({ client: clientInstance }, function (err, paypalInstance) { paypalButton.addEventListener('click', function () { // Tokenize here! paypalInstance.tokenize({ flow: 'checkout', // Required amount: 1000, // Required currency: ‘JPY', // Required locale: ’ja_JP', }, function (err, tokenizationPayload) { // Tokenization complete // Send tokenizationPayload.nonce to server }); }); }); }); </script>

Page 34: Iot_algyan_hands-on_20161129

JavaScript Client での決済画面実装(3)

• サーバーへの通信を記述します−   views/index.jade に右を追加• Function(err, tokenizationPayLoad) 内に追加

• tokenizationPayLoad.nonce• amount と nonce を POST できればなんでも可

−正解コードも参照。

©2016 PayPal Inc. Confidential and proprietary.

サーバーへ Nonce を送る実装 function (err, tokenizationPayload) { // Tokenization complete // Send tokenizationPayload.nonce to server var form = document.createElement('form'); document.body.appendChild(form);

var inputNonce = document.createElement('input'); inputNonce.setAttribute('type', 'hidden'); inputNonce.setAttribute('name', 'payment_method_nonce'); inputNonce.setAttribute('value', tokenizationPayload.nonce); form.appendChild(inputNonce);

var inputAmount = document.createElement('input'); inputAmount.setAttribute('type', 'hidden'); inputAmount.setAttribute('name', 'amount'); inputAmount.setAttribute('value', '1000'); form.appendChild(inputAmount);

form.setAttribute('action', '/checkout'); form.setAttribute('method', 'post'); form.submit(); }

Page 35: Iot_algyan_hands-on_20161129

チェックアウトして決済してみる(1)

• http://localhost:3000/ にアクセス!(念のためサーバー再起動)

• ボタンを押して Sandbox の Personal アカウントでログイン!− Access Token を使った Business でログインしない!− Developer Site にログインした本番アカウントでログインしない!− ログインできない人は Developer Site に戻って、 [Profile] でパスワードチェンジ!

• しばらく待って以下の画面が出たら成功!

©2016 PayPal Inc. Confidential and proprietary.

〜20:30

Page 36: Iot_algyan_hands-on_20161129

チェックアウトして決済してみる(2)

• Sandbox に Business アカウントでログインして確認!− [ マイアカウント ]->[ 取引履歴 ] に移動

©2016 PayPal Inc. Confidential and proprietary.

〜20:30

Page 37: Iot_algyan_hands-on_20161129

目指せ Sandbox 長者!

©2016 PayPal Inc. Confidential and proprietary.

Page 38: Iot_algyan_hands-on_20161129

本番運用について

©2016 PayPal Inc. Confidential and proprietary.

• 本番のビジネスアカウントにログインし、 Access Token を入れ替えるだけ!− [ツール ]->[ すべてのツール ]->[API 認証情報 ]->[PayPal 決済 SDK の実装 ] で表示されます

Page 39: Iot_algyan_hands-on_20161129

ここまでで Q&A

©2016 PayPal Inc. Confidential and proprietary.

〜20:30

Page 40: Iot_algyan_hands-on_20161129

©2016 PayPal Inc. Confidential and proprietary.

Braintree Developer Site を使ったセルフチャレンジ

Page 41: Iot_algyan_hands-on_20161129

ゴール

冒頭でご説明した従量決済やBraintree の面白い機能を

   Braintree Developer Site を見ながら各自やってみる!

©2016 PayPal Inc. Confidential and proprietary.

Page 42: Iot_algyan_hands-on_20161129

参照する URL

• Braintree Developer Site− https://developers.braintreepayments.com/

• Braintree Sandbox− https://www.braintreepayments.com/ (「 Login」で「 Sandbox」を選択)

©2016 PayPal Inc. Confidential and proprietary.

Page 43: Iot_algyan_hands-on_20161129

Vault をつかった継続課金の実装

• Vault とは?− PayPal の支払い者の同意情報や、クレジットカード情報など支払い者ごとの支払いに必要な情報を Token化して

保存したもの− 受け取り者は、一度 Vault を作成するとそのキーだけで、 PayPal やクレジットカードを使った決済をサーバーサ

イドから任意のタイミングで行える=定期、従量課金などに使える− v.zero を使った PayPal の vault は、内部でリファレンストランザクションを使っています• https://www.paypal.jp/merchant/developer/reference-transaction/ (ビジネスガイドの従量課金を参照)

• Braintree Site の [Guides]->[PayPal]-「 Vault」を参照してください− https://developers.braintreepayments.com/guides/paypal/vault/javascript/v3

• 先ほどのチェックアウトのコードに少し修正と追加で出来ます− クライアント JS 側: flow -> ‘vault’ に、 deviceData を送信データに追加− サーバー側: deviceData と storeInVaultOnSuccess=true を sale に追加、レスポンス内の customerId を

Vault のキーとして次回決済可能

• 正解コード (vault系のファイル、コメント)も参照。

©2016 PayPal Inc. Confidential and proprietary.

Page 44: Iot_algyan_hands-on_20161129

Braintree Sandbox を使って Hosted Field に挑戦!

• Hosted Field とは?− div で自由にクレジットカード入力 UI を作り、そのデータは、 braintree のクライアントが提供する透明な

iframe フォームで braintree サーバーを経由して Token化し、受け取り者には一切カード情報が渡らないようにする仕組み

− これによって、クレジットカード決済の UI は受け取り者が自由に作れるが、クレジットカードが受け取り者に伝播する可能性がある場合(保存しない場合でも)準拠が必要になる PCIDSS を回避できる

• Braintree Site の [Guides]->[Hosted Field] を参照してください− https://developers.braintreepayments.com/guides/hosted-fields/overview/javascript/v3

• Braintree を使ったクレジットカード決済の取引は、 PayPal アカウントには入らないため、ここからは Braintree の Sandbox が必要になります

• 正解コード (hosted系のファイル、コメント)も参照。

©2016 PayPal Inc. Confidential and proprietary.

Page 45: Iot_algyan_hands-on_20161129

DEMO

©2016 PayPal Inc. Confidential and proprietary.

Page 46: Iot_algyan_hands-on_20161129

残りの時間は各自好きなことにトライしてみてください

• その他やってみてほしいこと− 決済した取引情報の詳細を v.zero SDK で参照してみる− v.zero SDK で返金してみる− Vault を初回支払いなく作成してみる(後払い)=> Transaction.sale の代わりに Customer オブジェクトを作ります。

• 質問は適宜受け付けますので気軽に声をかけてください− ただし、 Node.js そのもののことはあまり詳しくないです

©2016 PayPal Inc. Confidential and proprietary.

Page 47: Iot_algyan_hands-on_20161129

最後に( IoT との親和性)

• Vault を使った継続・従量課金は、 IoT に応用がききそう−例:事前承認 ID を使った自作 ETC など−参考: http://www.slideshare.net/junichiokamura/paypal-reference-transaction-api

• 深センなどの海外の IoT デバイスベンダからの仕入れは PayPal 使われていること多い

• IoT の最大の課題であるセキュリティにおいて安心

©2016 PayPal Inc. Confidential and proprietary.

Page 48: Iot_algyan_hands-on_20161129

Thank YouIoT ALGYAN

November 29 2016

©2015 PayPal Inc. Confidential and proprietary.