Re: Stripe payment module -Duplicate orders
I do see several successful transactions followed within 0 minutes with an "incomplete" transaction from the same customer. The 1st transaction is successful on Stripe dashboard, the 2nd is "incomplete". It is the 2nd incomplete transaction that is captured within Zen
Re: Stripe payment module -Duplicate orders
i want to see your checkout.js.
Re: Stripe payment module -Duplicate orders
i checked 218module. I found an incorrect code.
Re: Stripe payment module -Duplicate orders
Quote:
Originally Posted by
Gozzandes
i want to see your checkout.js.
from /includes/checkout.js
Code:
const stripe = Stripe (PublishableKey);
let elements;
initialize();
checkStatus();
document
.querySelector("#payment-form")
.addEventListener("submit", handleSubmit);
// Fetches a payment intent and captures the client secret
async function initialize(){
const { clientSecret } = await clientS;
// const { clientSecret } =await fetch("/create.php", {
// method: "POST",
// headers: { "Content-Type": "application/json" },
// body: JSON.stringify({ items }),
// }).then((r) => r.json());
elements = stripe.elements({ clientSecret });
const paymentElementOptions = {
layout: "tabs",
};
const paymentElement = elements.create("payment", paymentElementOptions);
paymentElement.mount("#payment-element");
}
async function handleSubmit(e) {
e.preventDefault();
setLoading(true);
const response = await stripe.confirmPayment({
elements,
confirmParams: {
return_url: confirmationURL,
},
redirect: 'if_required'
}
)
if (response.error) {
showMessage(response.error.message);
} else {
document.getElementById('checkoutConfirmDefaultHeading').textContent = PaymentSuccess;
showMessage(PaymentSuccess);
document.getElementById("btn_submit").click();
}
setLoading(false);
}
// Fetches the payment intent status after payment submission
async function checkStatus() {
const clientSecret = new URLSearchParams(window.location.search).get(
"payment_intent_client_secret"
);
if (!clientSecret) {
return;
}
const { paymentIntent } = await stripe.retrievePaymentIntent(clientSecret);
switch (paymentIntent.status) {
case "succeeded":
document.getElementById('checkoutConfirmDefaultHeading').textContent = PaymentSuccess;
showMessage(PaymentSuccess);
document.getElementById("btn_submit").click();
break;
case "processing":
document.getElementById('checkoutConfirmDefaultHeading').textContent='Your payment is processing.';
showMessage("Your payment is processing.");
break;
case "requires_payment_method":
document.getElementById('checkoutConfirmDefaultHeading').textContent='Your payment was not successful, please try again.';
showMessage("Your payment was not successful, please try again.");
break;
default:
document.getElementById('checkoutConfirmDefaultHeading').textContent='Something went wrong.';
showMessage("Something went wrong.");
break;
}
}
// ------- UI helpers -------
function showMessage(messageText) {
const messageContainer = document.querySelector("#payment-message");
messageContainer.classList.remove("hidden");
messageContainer.textContent = messageText;
setTimeout(function () {
messageContainer.classList.add("hidden");
messageText.textContent = "";
}, 4000);
}
// Show a spinner on payment submission
function setLoading(isLoading) {
if (isLoading) {
// Disable the button and show a spinner
document.querySelector("#submit").disabled = true;
document.querySelector("#spinner").classList.remove("hidden");
document.querySelector("#button-text").classList.add("hidden");
} else {
document.querySelector("#submit").disabled = false;
document.querySelector("#spinner").classList.add("hidden");
document.querySelector("#button-text").classList.remove("hidden");
}
}
Re: Stripe payment module -Duplicate orders
Quote:
Originally Posted by
split63
from /includes/checkout.js
Code:
const stripe = Stripe (PublishableKey);
let elements;
initialize();
checkStatus();
document
.querySelector("#payment-form")
.addEventListener("submit", handleSubmit);
// Fetches a payment intent and captures the client secret
async function initialize(){
const { clientSecret } = await clientS;
// const { clientSecret } =await fetch("/create.php", {
// method: "POST",
// headers: { "Content-Type": "application/json" },
// body: JSON.stringify({ items }),
// }).then((r) => r.json());
elements = stripe.elements({ clientSecret });
const paymentElementOptions = {
layout: "tabs",
};
const paymentElement = elements.create("payment", paymentElementOptions);
paymentElement.mount("#payment-element");
}
async function handleSubmit(e) {
e.preventDefault();
setLoading(true);
const response = await stripe.confirmPayment({
elements,
confirmParams: {
return_url: confirmationURL,
},
redirect: 'if_required'
}
)
if (response.error) {
showMessage(response.error.message);
} else {
document.getElementById('checkoutConfirmDefaultHeading').textContent = PaymentSuccess;
showMessage(PaymentSuccess);
document.getElementById("btn_submit").click();
}
setLoading(false);
}
// Fetches the payment intent status after payment submission
async function checkStatus() {
const clientSecret = new URLSearchParams(window.location.search).get(
"payment_intent_client_secret"
);
if (!clientSecret) {
return;
}
const { paymentIntent } = await stripe.retrievePaymentIntent(clientSecret);
switch (paymentIntent.status) {
case "succeeded":
document.getElementById('checkoutConfirmDefaultHeading').textContent = PaymentSuccess;
showMessage(PaymentSuccess);
document.getElementById("btn_submit").click();
break;
case "processing":
document.getElementById('checkoutConfirmDefaultHeading').textContent='Your payment is processing.';
showMessage("Your payment is processing.");
break;
case "requires_payment_method":
document.getElementById('checkoutConfirmDefaultHeading').textContent='Your payment was not successful, please try again.';
showMessage("Your payment was not successful, please try again.");
break;
default:
document.getElementById('checkoutConfirmDefaultHeading').textContent='Something went wrong.';
showMessage("Something went wrong.");
break;
}
}
// ------- UI helpers -------
function showMessage(messageText) {
const messageContainer = document.querySelector("#payment-message");
messageContainer.classList.remove("hidden");
messageContainer.textContent = messageText;
setTimeout(function () {
messageContainer.classList.add("hidden");
messageText.textContent = "";
}, 4000);
}
// Show a spinner on payment submission
function setLoading(isLoading) {
if (isLoading) {
// Disable the button and show a spinner
document.querySelector("#submit").disabled = true;
document.querySelector("#spinner").classList.remove("hidden");
document.querySelector("#button-text").classList.add("hidden");
} else {
document.querySelector("#submit").disabled = false;
document.querySelector("#spinner").classList.add("hidden");
document.querySelector("#button-text").classList.remove("hidden");
}
}
Can you erase line 39?
Code:
return_url: confirmationURL,
Nihon yokane corporation
Re: Stripe payment module -Duplicate orders
Quote:
Originally Posted by
Gozzandes
This is a live site.....is this safe?
PHP Code:
confirmParams: {
// return_url: confirmationURL,
},
Re: Stripe payment module -Duplicate orders
Quote:
Originally Posted by
split63
This is a live site.....is this safe?
PHP Code:
confirmParams: {
// return_url: confirmationURL,
},
I've check it using xampp.
it works without any problem.
Re: Stripe payment module -Duplicate orders
Ok, I commented out line 39. In test mode I ran a few credit card transactions. They all went fine. Zen captured the orders and Strip dashboard showed successful.
After I click "Confirm Order" on the 3rd checkout page, I also then repeatedly clicked "Confirm Order", as I know my impatient customers do, it did not seem to create any problems
Re: Stripe payment module -Duplicate orders
Hello, I have Zen Cart 2.1.0 installed and am trying to get the Stripe Payments Module up and running. I have it installed and connected to my Stripe account. Have it in "Test Mode" but keep gettting hung up going to step 3 of checkout.
I get a blank page with a "WARNING: an error has occured" message.
I have my test keys correctly applied to the module settings... not sure what is making this hang.
This is what the DeBug Log File says... not sure what it's trying to tell me... any input on where to look is appreciated, thanks
[30-Dec-2024 00:11:49 UTC] Request URI: /index.php?main_page=checkout_confirmation, IP address: 35.140.xx.x, Language id 1
#1 trigger_error() called at [/includes/classes/db/mysql/query_factory.php:733]
#2 queryFactory->show_error() called at [/includes/classes/db/mysql/query_factory.php:678]
#3 queryFactory->set_error() called at [/includes/classes/db/mysql/query_factory.php:307]
#4 queryFactory->Execute() called at [/includes/modules/payment/stripe.php:165]
#5 stripe->pre_confirmation_check() called at [/includes/classes/payment.php:309]
#6 payment->pre_confirmation_check() called at [/includes/modules/pages/checkout_confirmation/header_php.php:92]
#7 require(/includes/modules/pages/checkout_confirmation/header_php.php) called at [/index.php:35]
--> PHP Fatal error: MySQL error 1146: Table 'xxxx670_zenc936.zenen_stripe' doesn't exist :: SELECT stripe_customers_id FROM zenen_stripe WHERE customers_id = '2' order by id DESC LIMIT 1 ==> (as called by) /includes/modules/payment/stripe.php on line 165 <== in /includes/classes/db/mysql/query_factory.php on line 733.
Re: Stripe payment module -Duplicate orders
Quote:
Originally Posted by
BigB
Hello, I have Zen Cart 2.1.0 installed and am trying to get the Stripe Payments Module up and running. I have it installed and connected to my Stripe account. Have it in "Test Mode" but keep gettting hung up going to step 3 of checkout.
I get a blank page with a "WARNING: an error has occured" message.
I have my test keys correctly applied to the module settings... not sure what is making this hang.
This is what the DeBug Log File says... not sure what it's trying to tell me... any input on where to look is appreciated, thanks
[30-Dec-2024 00:11:49 UTC] Request URI: /index.php?main_page=checkout_confirmation, IP address: 35.140.xx.x, Language id 1
#1 trigger_error() called at [/includes/classes/db/mysql/query_factory.php:733]
#2 queryFactory->show_error() called at [/includes/classes/db/mysql/query_factory.php:678]
#3 queryFactory->set_error() called at [/includes/classes/db/mysql/query_factory.php:307]
#4 queryFactory->Execute() called at [/includes/modules/payment/stripe.php:165]
#5 stripe->pre_confirmation_check() called at [/includes/classes/payment.php:309]
#6 payment->pre_confirmation_check() called at [/includes/modules/pages/checkout_confirmation/header_php.php:92]
#7 require(/includes/modules/pages/checkout_confirmation/header_php.php) called at [/index.php:35]
--> PHP Fatal error: MySQL error 1146: Table 'xxxx670_zenc936.zenen_stripe' doesn't exist :: SELECT stripe_customers_id FROM zenen_stripe WHERE customers_id = '2' order by id DESC LIMIT 1 ==> (as called by) /includes/modules/payment/stripe.php on line 165 <== in /includes/classes/db/mysql/query_factory.php on line 733.
Upload following sql code from the admin page.
[CODE]
TRUNCATE `zenen_stripe `;
[/CODE]