html 前端de KANPAI! #02 - エンジョイ!フロントエンド - 「付款请求APIで実现できる网决済の体験」

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了html 前端de KANPAI! #02 - エンジョイ!フロントエンド - 「付款请求APIで実现できる网决済の体験」相关的知识,希望对你有一定的参考价值。

'use strict'

document.addEventListener('DOMContentLoaded', () => {
  init()
}, false)

function init () {
  document.querySelectorAll('.buyButton').forEach((e) => {
    e.addEventListener('click', () => {
      onBuyClicked(e.getAttribute('data-price'))
    }, false)
  })
}

function onBuyClicked (_price) {
  // ブラウザがPayment Requestに対応していない場合はページ遷移する
  if (!window.PaymentRequest) {
    location.href = '/checkout'
    return
  }

  // 支払い方法の設定
  const supportedInstruments = [{
    supportedMethods: ['basic-card'],
    data: {
      supportedNetworks: [
        'visa', 'mastercard', 'amex', 'discover',
        'diners', 'jcb', 'unionpay'
      ]
    }
  }]

  // 取引の詳細を設定
  const price = Number(_price)
  const shipping = 500
  const total = price + shipping
  const details = {
    displayItems: [{
      label: '小計',
      amount: {currency: 'JPY', value: price}
    }, {
      label: '送料',
      amount: {currency: 'JPY', value: shipping}
    }],
    total: {
      label: 'ご請求額',
      amount: {currency: 'JPY', value: total}
    }
  }

  // Payment Requestインスタンスを作成
  const request = new PaymentRequest(supportedInstruments, details)

  // 支払いのUIを表示
  request.show()
    // 決済処理を行う
    .then((result) => {
      console.log(result)
      // resultに支払い情報が入っている。カード番号とかも入っているので取り扱いに注意
      // 本来ならトークン化するなどしてサーバにPOSTする
      // 今回はそのままサーバにPOSTする(POST先がないのでエラーになる)
      return fetch('/pay', {
        method: 'POST',
        credentials: 'include',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify(result.toJSON())
      }).then((respnse) => {
        // 決済結果を表示する
        if (response.status === 200) {
          return result.complete('success');
        } else {
          return result.complete('fail');
        }
      }).catch(() => {
        return result.complete('fail');
      })
    })
}
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>Payment Request API Test</title>

  <style>
    body {
      color: #333;
      padding: 20px;
    }

    h1 {
      margin: 40px 20px 0;
    }

    ul {
      display: flex;
      list-style-type: none;
      justify-content: space-between;
      margin: 60px 0 0;
      padding: 0;
    }

    li {
      background-color: #eee;
      width: 100%;
      margin: 0 20px;
      padding: 20px;
    }

    .buyButton {
      margin-top: 20px;
      text-align: center;
      background-color: #FF5252;
      color: #fff;
      padding: 10px 20px;
      cursor: pointer;
    }
    .buyButton:hover {
      opacity: 0.7;
    }
  </style>

  <script src="./prapi.js"></script>
</head>
<body>
  <h1>Payment Request API Test</h1>
  <ul>
    <li>
      <div>商品A</div>
      <div>3,980円</div>
      <div class="buyButton" data-price="3980">購入する</div>
    </li>
    <li>
      <div>商品B</div>
      <div>1,980円</div>
      <div class="buyButton" data-price="1980">購入する</div>
    </li>
    <li>
      <div>商品C</div>
      <div>680円</div>
      <div class="buyButton" data-price="680">購入する</div>
    </li>
  </ul>
</body>
</html>

以上是关于html 前端de KANPAI! #02 - エンジョイ!フロントエンド - 「付款请求APIで実现できる网决済の体験」的主要内容,如果未能解决你的问题,请参考以下文章

javascript Exemplo arquivo de client查询前端graphql

Jquery.validate.js实现前端表单验证

前端 网络三剑客之html 02

大前端 一HTML

大前端 一HTML

前端分类目录