Workflow Quy trình xử lý Thanh toán của Trang web TMĐT khi tích hợp cổng Thanh toán Stripe

Step 3: viết code tích hợp cổng thanh toán Stripe vào trang web

Xem tài liệu dành cho Developer

Step 3.1: kết nối trang web với database vừa tạo

  • Sử dụng Visual Studio Code để tiến hành viết code. https://code.visualstudio.com/
  • Mở Visual Studio Code -> Open Folder đến thư mục gốc của dự án c:\xampp\htdocs\workshop.ecommerce
  • Hiệu chỉnh file thông số kết nối database config.php như sau:
<?php
public static $DB_CONNECTION_HOST           = 'localhost';
public static $DB_CONNECTION_USERNAME       = 'root';
public static $DB_CONNECTION_PASSWORD       = '';
public static $DB_CONNECTION_DATABASE_NAME  = 'admin_ws1';

Step 3.2: tạo AJAX gởi request cho STRIPE

  • Tạo file tên frontend/ajax/create-checkout-session.php.
  • Nội dung file:
<?php
// Include file cấu hình ban đầu của `Twig`
require_once __DIR__ . '/../../bootstrap.php';

// Truy vấn database để lấy danh sách
// 1. Include file cấu hình kết nối đến database, khởi tạo kết nối $conn
include_once(__DIR__ . '/../../dbconnect.php');

// ************* Tích hợp cổng thông tin STRIPE thanh toán **************
// 2. Set khóa bí mật (secret key) để gởi yêu cầu Thanh toán đến Cổng thanh toán Stripe
// See your keys here: https://dashboard.stripe.com/apikeys
\Stripe\Stripe::setApiKey('sk_test_51IgWCYG9O8Lzt9jNiH4XoJRQak3UnduavjtfhKzPOZxQCwdprwKWsEm4yDwRP28UBzDPkFWqcifs6QcGTn2nXdrG00Ndyoew2h');

// 3. Gởi yêu cầu (request) đến Stripe
$stripeData = [
  'payment_method_types' => ['card'],
  'line_items' => [],
  'mode' => 'payment',
  'success_url' => 'http://workshop.ecommerce.nentang.vn/frontend/checkout/onepage-checkout-finish',
  'cancel_url' => 'http://workshop.ecommerce.nentang.vn/frontend/checkout/onepage-checkout-cancel',
  ];

foreach($_POST['sanphamgiohang'] as $sp) {
  $stripeData['line_items'][] = [
    'price_data' => [
      'currency' => 'vnd',
      'unit_amount' => round($sp['list_price_after_discount'], 0),
      'product_data' => [
        'name' => $sp['product_name'],
      ],
    ],
    'quantity' => round($sp['quantity']),
  ];
}

$session = \Stripe\Checkout\Session::create($stripeData);
echo json_encode([ 'id' => $session->id ]);
?>

Lưu ý:

  • Thay thế chỗ setApiKey (dòng 12) thành secret key của bạn.
  • Thay thế http://workshop.ecommerce.nentang.vn (dòng 19,20) thành tên miền đang chạy của bạn, có thể là http://localhost:1000/workshop.ecommerce/

Step 3.4: bổ sung nút Thanh toán bằng Stripe trên giao diện

  • Mở file tên templates/frontend/checkout/onepage-checkout.html.twig.
  • Bổ sung vào dòng 137 như sau:
<button id="checkout-button" type="button" class="btn btn-success">Thanh toán với Stripe</button>
  • Bổ sung dòng 147 đoạn code như sau:
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script src="https://js.stripe.com/v3/"></script>
<script type="text/javascript">
    function serialize (data) {
        let obj = {};
        for (let [key, value] of data) {
            if (obj[key] !== undefined) {
                if (!Array.isArray(obj[key])) {
                    obj[key] = [obj[key]];
                }
                obj[key].push(value);
            } else {
                obj[key] = value;
            }
        }
        return obj;
    }

    // Chuẩn bị dữ liệu Giỏ hàng để gởi đến cổng thanh toán Stripe
    // Get the form
    let form = document.querySelector('#frmCheckOut');
    // Get all field data from the form
    let data = new FormData(form);
    // Convert to an object
    let sendData = serialize(data);

    // Create an instance of the Stripe object with your publishable API key
    var stripe = Stripe('pk_test_51IgWCYG9O8Lzt9jNYWrungybX1ypQceExeBM5nEiCFRydpupgWAzKe51QpNLpMtnj7YhwhojzYWIkrWFV92LWrP200DOgLmMNV');
    var checkoutButton = document.getElementById('checkout-button');

    checkoutButton.addEventListener('click', function() {
    $.ajax({
        url: '{{ root_url }}/frontend/ajax/create-checkout-session',
        method: "POST",
        dataType: 'json',
        data: sendData,
        success: function (session) {
            return stripe.redirectToCheckout({ sessionId: session.id });
        },
        error: function (jqXHR, textStatus, errorThrown) {
            console.log(textStatus, errorThrown);
            // Hiện thông báo
            alert(errorThrown);
        }
    });
});
</script>

Lưu ý:

  • Thay thế chỗ var stripe = Stripe() (dòng 28) thành publishable key của bạn.

DONE! Hoàn thành.