วิธีการติดตั้งใช้งาน Omise [ PHP ] ระบบชำระเงินออนไลน์

23 September 2021     MatumWeb

        Omise อ่านว่า โอมิเซะ คือ ระบบชำระเงินออนไลน์ ( Online Payment Gateway ) รองรับช่องทางการชำระเงินที่หลากหลาย บัตรเครดิต / เดบิต Truemoney Wallet / PromptPay / Alipay เป็นต้น ดูเพิ่มเติมได้ที่ Omise Payment Method

เริ่มติดตั้งใช้งาน Omise กับ Codeigniter

สามารถ Download Omise.php ได้ที่ Download omise.php


Code View

<!doctype html>

<html lang="en">

    <head>

        <meta charset="utf-8">

        <meta name="viewport" content="width=device-width, initial-scale=1">

        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css">

        <title>เติมเงิน</title>

    </head>

    <body>

        <div class="container">

            <form id="checkoutTrueWallet" method="POST" action="omise/charge">

            <input type="hidden" name="omiseToken">

            <input type="hidden" name="omiseSource">

            <input type="text" name="money" value="300">

            <button type="submit" id="checkoutButton">Checkout</button>

            </form>

        </div>

        <script type="text/javascript" src="https://cdn.omise.co/omise.js"></script>

        <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js"></script>

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

        <script>

$(document).ready(function() {

    OmiseCard.configure({

        publicKey: "pkey_test_xxxxxx"

    });

    var button = document.querySelector("#checkoutButton");

    var form = document.querySelector("#checkoutTrueWallet");


    button.addEventListener("click", (event) => {

        event.preventDefault();

        OmiseCard.open({

            amount: 300*100, // จำนวนเงิน 300 ต้องระบุเป็น 30000 หรือ คูณด้วย 100

            currency: "THB",

            locale: "TH",

            defaultPaymentMethod: "truemoney", // สามารถใช้เป็น rabbit_linepay, promptpay,credit_card

            frameDescription: "ร้าน Matumweb",

            image: "img/logo.img",

            onCreateTokenSuccess: (nonce) => {

                if (nonce.startsWith("tokn_")) {

                    form.omiseToken.value = nonce;

                } else {

                    form.omiseSource.value = nonce;

                };

                form.submit();

            }

                    });

                });

            });

        </script>

        </body>

</html>


Code PHP

<?php

defined('BASEPATH') OR exit('No direct script access allowed');


require_once APPPATH.'third_party/omise-php/lib/Omise.php';

define('OMISE_API_VERSION', "2019-05-29");

define('OMISE_PUBLIC_KEY', "pkey_test_xxxxxx");

define('OMISE_SECRET_KEY', "skey_test_xxxxxx");


class Omise extends MY_Controller {


        public function __construct()

        {

            parent::__construct();

        }

    

    public function charge()

    {

        $source       = $this->input->post('omiseSource'); // omiseToken จะถูกส่งมาอัตโนมัติผ่าน omise form

        $money        = $this->input->post('money');  

        $currencyCode = 764;

        $amount_conv  = $money * 100; //จำนวนเงิน 300 ต้องระบุเป็น 30000 หรือ คูณด้วย 100

         

        $return_uri = base_url("omise/check/".$topup_id); // ในขั้นตอนนี้ให้สร้าง topup_id สำหรับอ้างอิงไว้ใช้ในขั้นตอนต่อไป อาจจะใช้เป็น order id ก็ได้ ประมาณว่า order นี้กำลังจะชำระเงิน


        $charge = OmiseCharge::create([

            'amount'     => $amount_conv,

            'currency'   => "THB",

            'return_uri' => $return_uri,

            'source'     => $source,

        ]);


        $charge_id = $charge['id'];

        $authorize_uri = $charge['authorize_uri'];

        

        // จังหวะนี้สำคัญ ก่อนที่จะ redirect ไปจากหน้านี้ ให้บันทึก topup_id และ charge_id ไว้ในฐานข้อมูลของเรา 

        // เพื่อใช้อ้างอิงว่า transaction นี้ สำเร็จ หรือ ไม่สำเร็จ


        redirect($authorize_uri,'refresh'); // เราจะรีไปยังหน้าการยืนยันตัวตนผ่านระบบ OTP ของธนาคารนั้น ๆ 

    }


    public function check($topup_id){

        sleep(5); // เพื่อรอให้ Omise ทำงานสมบูรณ์ก่อน


        // ใช้ topup_id คิวรี่หา charge_id แล้วใช้หาค่า status ว่า transaction นี้สำเร็จหรือไม่สำเร็จ

        $charge = OmiseCharge::retrieve($charge_id);

        if($charge['status'] === 'successful') {

           // เงินเข้าบัญชีเรียบร้อยแล้ว

        }else{

           // อาจจะ failed หรือ pending อยู่

        }

    }

}      

               

?>   


ที่มาโดย : https://www.omise.co/