Skip to the content.

TapPay Payment Button

DEMO

iPhone Phone 打開後

Android Phone 打開後

注意

在 Sandbox 環境下使用 Pay with Google 的時候,底下出現紅字『無法識別應用程式』
這是正常行為,毋須擔心。這是在測試環境下面會出現的警告
在 Production 環境下使用 Pay with Google,底下就不會出現紅字

Required

  1. 請到 TapPay Portal 申請帳號,取得 APP_ID 和 APP_KEY
  2. 必須使用 v3 版的 SDK
  3. 根據所需要不同的付款方式選擇不同的參數設定,此範例是把_所有付款方式_都融合進來,所以需要 Apple Pay、Pay with Google 所有特有參數才能進行
  4. Pay with Google 僅支援 Android Mobile Web、Chrome M61 版本後以及 Google Play Services version 11.4.x 版本後

Overview

  1. 引入 SDK 並且初始化 APP_ID, APP_KEY, SERVER_TYPE
  2. 使用 TPDirect.paymentRequestApi.checkAvailability() 檢查瀏覽器是否可以用 Payment Request API
  3. 設置 Payment Request Data, 並且在 supportedMethods 填入 ["card", "android_pay", "pay_with_google", "apple_pay"] 四種
  4. 設置 Pay with Google 特有的參數 TPDirect.paymentRequestApi.setupPayWithGoogle,Pay with Google 相關必要參數可以參考 Pay with Google 教學
  5. 設置 Apple Pay 特有的參數 TPDirect.paymentRequestApi.setupApplePay,Apple Pay 相關必要參數可以參考 Apple Pay 教學
  6. 設置 click 事件綁定在客製化的按鈕下,然後去觸發 TPDirect.paymentRequestApi.getPrime

教學

Step 1

首先我們要建立出付款頁面 index.html 並且在 <head></head> 中引入 SDK

<script src="https://js.tappaysdk.com/sdk/tpdirect/v5.19.1"></script>
<script>
    TPDirect.setupSDK(APP_ID, "APP_KEY", 'SERVER_TYPE')
</script>

Step 2

再來要檢查瀏覽器使否可以使用 Payment Request API
可以使用 TPDirect.paymentRequestApi.checkAvailability() 確認使否能使用

Step 3

確認可以使用 Payment Request API 之後
建立出 Payment Request Data,並且在 supportedMethods 裡面填入 card android_pay apple_pay
詳細參數設定請參考文件

var data = {
    supportedNetworks: ['MASTERCARD', 'VISA', 'AMEX'],
    supportedMethods: ['card', 'pay_with_google', 'apple_pay'],
    displayItems: [{
        label: 'iPhone8',
        amount: {
            currency: 'TWD',
            value: '1.00'
        }
    }],
    total: {
        label: '付給 TapPay',
        amount: {
            currency: 'TWD',
            value: '1.00'
        }
    },
    shippingOptions: [{
            id: "standard",
            label: "🚛 Ground Shipping (2 days)",
            // apple pay only
            detail: 'Estimated delivery time: 2 days',
            amount: {
                currency: "TWD",
                value: "5.00"
            }
        },
        {
            id: "drone",
            label: "🚀 Drone Express (2 hours)",
            // apple pay only
            detail: 'Estimated delivery time: 2 hours',
            amount: {
                currency: "TWD",
                value: "25.00"
            }
        },
    ],
    // optional
    options: {
        requestPayerEmail: false,
        requestPayerName: false,
        requestPayerPhone: false,
        requestShipping: false,
        // https://docs.tappaysdk.com/payment-request-api/zh/reference.html#shippingtype
        shippingType: 'shipping'
    }
}

Step 4

設置 Pay with Google 特有的參數

TPDirect.paymentRequestApi.setupPayWithGoogle({
    // defaults to ['CARD', 'TOKENIZED_CARD']
    allowedPaymentMethods: ['CARD', 'TOKENIZED_CARD'],

    // Indicates whether or not you allow prepaid debit cards as a form of payment.
    // Set to true to allow prepaid debit cards. Otherwise, set to false.
    // defaults to true
    allowPrepaidCards: true,

    // defaults to false
    billingAddressRequired: false,
    // defaults to  'MIN'
    billingAddressFormat: 'MIN', // FULL, MIN

    // Set the ISO 3166-1 alpha-2 formatted country codes of the countries to which shipping is allowed.
    // If not specified, all countries are allowed.
    // defaults to undefined (allow all shipping address)
    // allowedCountryCodes: ['TW']
})

Step 5

設置 Apple Pay 特有的參數

TPDirect.paymentRequestApi.setupApplePay({
    // required, your apple merchant id
    // merchant.tech.cherri.global.test 是 DEMO 頁面專門使用的 merchant id
    // 如果要在自己頁面上使用 Apple Pay 請參考 Required 去申請 Apple Pay merchant id
    merchantIdentifier: 'merchant.tech.cherri.global.test',
    // defaults to 'TW'
    countryCode: 'TW'
})

Step 6

接下來啟用 Payment Request API TPDirect.paymentRequestApi.setupPaymentRequest(data, function(result){})
第一個參數 data 是剛剛宣告的 payment request data
第二個參數回傳的 result 會有以下幾個屬性

  1. result.browserSupportPaymentRequest

  2. result.canMakePaymentWithActiveCard canMakePaymentWithActiveCard 在 apple pay 只會檢查使用者使否會綁定卡片

設置完之後,在客製化的 button 底下加上 click 事件去觸發 TPDirect.paymentRequestApi.getPrime Get Prime Result 可以參考文件上的資料

TPDirect.paymentRequestApi.setupPaymentRequest(data, function (result) {
    // result.browserSupportPaymentRequest
    // result.canMakePaymentWithActiveCard
    if (!result.browserSupportPaymentRequest) {
        $('#pr-button').css('display', 'none')
        $('#browser-no-support-message').removeClass('hidden')
        return
    }

    var pay_button = document.getElementById("pay-button")
    pay_button.addEventListener('click', function (event) {
        TPDirect.paymentRequestApi.getPrime((getPrimeResult) => {
            $('#get-prime-result').removeClass('hidden')
            $('#get-prime-result pre code').text(JSON.stringify(getPrimeResult, null, 2))
            $('.get-prime-status').addClass('hidden')
            console.log(getPrimeResult)
            if (getPrimeResult.status !== 0) {
                console.log('getPrime failed: ' + getPrimeResult.msg)
                $('#get-prime-failed-message').removeClass('hidden')
                return
            }
            // send prime to server
            console.log('prime: ' + getPrimeResult.prime)
            $('#get-prime-success-message').removeClass('hidden')
            $('#get-prime-success-message p').text(getPrimeResult.prime)
        })
    }
})

完整 index.html 頁面

TapPay Payment Request API Example