Changing the vt to use fetch
This commit is contained in:
		
							
								
								
									
										105
									
								
								static/js/terminal.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								static/js/terminal.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,105 @@
 | 
			
		||||
import {
 | 
			
		||||
    hidePayButton,
 | 
			
		||||
    showPayButton,
 | 
			
		||||
    showError,
 | 
			
		||||
    showSuccess,
 | 
			
		||||
    stripe,
 | 
			
		||||
    card,
 | 
			
		||||
    processing,
 | 
			
		||||
} from './common.js';
 | 
			
		||||
 | 
			
		||||
export function val(api) {
 | 
			
		||||
    let form = document.getElementById("charge_form");
 | 
			
		||||
 | 
			
		||||
    if (form.checkValidity() === false) {
 | 
			
		||||
        this.event.preventDefault();
 | 
			
		||||
        this.event.stopPropagation();
 | 
			
		||||
        form.classList.add("was-validated");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    form.classList.add("was-validated");
 | 
			
		||||
    hidePayButton();
 | 
			
		||||
 | 
			
		||||
    let amountToCharge = document.getElementById("amount").value;
 | 
			
		||||
    console.log(amountToCharge);
 | 
			
		||||
    let payload = {
 | 
			
		||||
        amount: amountToCharge,
 | 
			
		||||
        currency: 'eur',
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    const requestOptions = {
 | 
			
		||||
        method: 'post',
 | 
			
		||||
        headers: {
 | 
			
		||||
            'Accept': 'application/json',
 | 
			
		||||
            'Content-Type': 'application/json',
 | 
			
		||||
        },
 | 
			
		||||
        body: JSON.stringify(payload),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    fetch(api + "/api/payment-intent", requestOptions)
 | 
			
		||||
        .then(response => response.text())
 | 
			
		||||
        .then(response => {
 | 
			
		||||
            let data;
 | 
			
		||||
            try {
 | 
			
		||||
                data = JSON.parse(response);
 | 
			
		||||
                stripe.confirmCardPayment(data.client_secret, {
 | 
			
		||||
                    payment_method: {
 | 
			
		||||
                        card: card,
 | 
			
		||||
                        billing_details: {
 | 
			
		||||
                            name: document.getElementById("cardholder-name").value,
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }).then(function (result) {
 | 
			
		||||
                    if (result.error) {
 | 
			
		||||
                        // card declined, or sth went wrong with the card
 | 
			
		||||
                        showError("card-messages", result.error.message);
 | 
			
		||||
                        showPayButton();
 | 
			
		||||
                    } else if (result.paymentIntent) {
 | 
			
		||||
                        if (result.paymentIntent.status === "succeeded") {
 | 
			
		||||
                            saveTransaction(api, result);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                })
 | 
			
		||||
                console.log(data);
 | 
			
		||||
 | 
			
		||||
            } catch (err) {
 | 
			
		||||
                console.log(err);
 | 
			
		||||
                showCardError("Invalid response from payment gateway!");
 | 
			
		||||
                showPayButton();
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function saveTransaction(api, result) {
 | 
			
		||||
    let payload = {
 | 
			
		||||
        amount: parseInt(document.getElementById("amount").value, 10),
 | 
			
		||||
        currency: result.paymentIntent.currency,
 | 
			
		||||
        first_name: "",
 | 
			
		||||
        last_name: "",
 | 
			
		||||
        email: document.getElementById("cardholder-email").value,
 | 
			
		||||
        payment_intent: result.paymentIntent.id,
 | 
			
		||||
        payment_method: result.paymentIntent.payment_method,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    let token = localStorage.getItem("token");
 | 
			
		||||
    const requestOptions = {
 | 
			
		||||
        method: "post",
 | 
			
		||||
        headers: {
 | 
			
		||||
            'Accept': 'application/json',
 | 
			
		||||
            'Content-Type': 'application/json',
 | 
			
		||||
            'Authorization': 'Bearer ' + token,
 | 
			
		||||
        },
 | 
			
		||||
        body: JSON.stringify(payload),
 | 
			
		||||
    };
 | 
			
		||||
    fetch(api + "/api/admin/virtual-terminal-succeeded", requestOptions)
 | 
			
		||||
        .then(response => response.json())
 | 
			
		||||
        .then(function (data) {
 | 
			
		||||
            console.log(data);
 | 
			
		||||
            processing.classList.add("d-none");
 | 
			
		||||
            showSuccess("card-messages", "Trasaction successful!");
 | 
			
		||||
            document.getElementById("bank-return-code").innerHTML = data.bank_return_code;
 | 
			
		||||
            document.getElementById("receipt").classList.remove("d-none");
 | 
			
		||||
        })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user