Square Payment Integration - mivaecommerce/booc-readytheme GitHub Wiki

Since Booc ships with floating label functionality on the checkout pages, this needs to be accommodated for if you choose to add Square as a payment method.

In the administration portal, update the OPAY page with the following code:

<mvt:item name="html_profile" />
<head>
	<mvt:if expr="NOT ISNULL l.settings:page:title">
		<title>&mvt:page:title;</title>
	<mvt:else>
		<title>&mvt:store:name;: Checkout: Payment Information</title>
	</mvt:if>
	<mvt:item name="head" param="head_tag" />
	<mvt:if expr="l.settings:payment:capabilities:split">
		<script>
			function AmountType_Changed(amounttype) {
				var balance_amount, amount, additional;

				balance_amount = document.getElementById( 'payment-balance-amount' );
				amount = document.getElementById( 'payment-amount' );
				additional = document.getElementById( 'payment-additional' );

				if (amounttype === 'total') {
					amount.disabled = true;
					additional.style.display = 'none';

					if (balance_amount) {
						balance_amount.disabled = true;
					}
				}
				else if (amounttype === 'balance') {
					amount.disabled = true;
					additional.style.display = '';

					if (balance_amount) {
						balance_amount.disabled = false;
					}
				}
				else if (amounttype === 'partial') {
					amount.disabled = false;
					additional.style.display = '';

					if (balance_amount) {
						balance_amount.disabled	= true;
					}
				}
			}
		</script>
	</mvt:if>
	<mvt:if expr="NOT('check' CIN g.PaymentMethod) AND NOT('cod' CIN g.PaymentMethod) AND NOT('pal' CIN g.PaymentMethod)">
		<script>
			var supportedPaymentMethods = [
				<mvt:foreach array="paymentmethods" iterator="method">
					<mvt:if expr="l.settings:method:module NE 'check' AND l.settings:method:module NE 'cod' AND l.settings:method:module NE 'customercredit' AND NOT('pal' CIN l.settings:method:module)">
					// &mvt:method:module;
						<mvt:if expr="'am' CIN l.settings:method:code OR 'ax' CIN l.settings:method:code OR '003' CIN l.settings:method:code">
							{name: 'american-express', value: '&mvte:method:module;:&mvte:method:code;'},
						<mvt:elseif expr="'di' CIN l.settings:method:code OR '004' CIN l.settings:method:code">
							{name: 'discover', value: '&mvte:method:module;:&mvte:method:code;'},
						<mvt:elseif expr="'mc' CIN l.settings:method:code OR 'master' CIN l.settings:method:code OR '002' CIN l.settings:method:code">
							{name: 'mastercard', value: '&mvte:method:module;:&mvte:method:code;'},
						<mvt:elseif expr="'vi' CIN l.settings:method:code OR '001' CIN l.settings:method:code">
							{name: 'visa', value: '&mvte:method:module;:&mvte:method:code;'},
						</mvt:if>
						<mvt:assign name="g.cc_payment" value="1" />
						<mvt:assign name="g.payment_module_class" value="l.settings:method:module $ '-payment-form'" />
					<mvt:else>
					</mvt:if>
				</mvt:foreach>
			]
		</script>
	</mvt:if>
</head>
<body class="&mvt:global:pageClass; checkout-page" id="js-&mvte:page:code;">
<mvt:item name="hdft" param="global_header" />
<div class="column whole hdft-header">
	<mvt:item name="hdft" param="header" />
</div>
<div class="column whole large-seven-twelfths">
	<section class="checkout-progress">
		<div class="row h-nm">
			<div class="column one-third h-align-center">
				<small class="color--gray font--medium font--uppercase checkout-progress__step">Customer Info</small>
			</div>
			<div class="column one-third h-align-center">
				<small class="color--gray font--medium font--uppercase checkout-progress__step">Shipping</small>
			</div>
			<div class="column one-third h-align-center">
				<small class="font--medium font--uppercase checkout-progress__step checkout-progress__step--current border--primary">Payment</small>
			</div>
		</div>
	</section>
	<!-- end .checkout-progress -->
	<section class="customer-information">
		<div class="row h-nm">
			<div class="column whole">
				<h1 class="font--regular h2">Payment</h1>
			</div>
		</div>
		<div class="h-breaker"></div>
		<div class="row h-nm">
			<div class="column whole">
				<form class="floating-labels payment-details-form" data-hook="floating-labels payment-details-form" method="post" action="&mvt:payment:url;">
					<input type="hidden" name="Action" value="AUTH" />
					<input type="hidden" name="Screen" value="INVC" />
					<input type="hidden" name="Store_Code" value="&mvte:global:Store_Code;" />
					<mvt:item name="payment" />
					<input data-hook="payment-method" type="hidden" name="PaymentMethod" value="&mvte:global:PaymentMethod;">
					<input type="hidden" name="SplitPaymentData" value="&mvte:global:SplitPaymentData;" />

					<mvt:if expr="l.settings:paymentsettings:mivapay:enabled AND ( l.settings:mivapay:paymentcardtype:id OR l.settings:mivapay:paymentcard:id )">
						<div class="row bg--secondary border--gray h-nm payment-details-form__header--miva-pay">
							<div class="column whole medium-two-thirds font--bold font--uppercase">Payment Method: &mvt:payment:desc;</div>
							<div class="column whole medium-one-third h-np">
								<small class="bg--white border--gray font--medium font--uppercase payment-details-form__header__badge" data-theme-icon="&#x2e;">&nbsp;&nbsp;Secure Payment</small>
							</div>
						</div>
						<div class="h-breaker"></div>
						<mvt:item name="mivapay" />
					<mvt:elseif expr="'brain' CIN g.PaymentMethod OR 'square' CIN g.PaymentMethod">
						<div class="row bg--secondary border--gray h-nm payment-details-form__header--miva-pay">
							<div class="column whole medium-two-thirds font--bold font--uppercase">Payment Method: &mvt:payment:desc;</div>
							<div class="column whole medium-one-third h-np">
								<small class="bg--white border--gray font--medium font--uppercase payment-details-form__header__badge" data-icon="&#x27;">&nbsp;&nbsp;Secure Payment</small>
							</div>
						</div>
						<div id="payment-fields" class="row border--gray h-nm payment-details-form__content &mvt:global:payment_module_class;">
							<mvt:foreach array="payment:fields" iterator="field">
								<mvt:item name="payment" param="field:code" />
							</mvt:foreach>
							<br>
						</div>
					<mvt:else>
						<mvt:if expr="g.cc_payment EQ 1">
							<div class="row bg--secondary border--gray h-nm payment-details-form__header">
								<mvt:if expr="l.settings:payment:capabilities:split">
									<div class="column whole medium-two-thirds font--bold font--uppercase">Payment Method: &mvt:payment:desc;</div>
								<mvt:else>
									<div class="column whole medium-two-thirds font--bold font--uppercase">Credit Card Information</div>
								</mvt:if>
								<div class="column whole medium-one-third h-np">
									<small class="bg--white border--gray font--medium font--uppercase payment-details-form__header__badge" data-theme-icon="&#x2e;">&nbsp;&nbsp;Secure Payment</small>
								</div>
							</div>
							<mvt:foreach array="payment:fields" iterator="field">
								<div data-hook="payment-field-row payment-field-row-&mvte:field:code;" data-code="&mvte:field:code;" data-invalid="&mvte:field:invalid;" data-prompt="&mvte:field:prompt;">
									<mvt:item name="payment" param="field:code" />
								</div>
								<mvt:if expr="l.settings:field:code CIN 'cc_fname,cc_lname'">
									<mvt:assign name="l.settings:payment:proxy:cc_name_split:active" value="1" />
								<mvt:elseif expr="l.settings:field:code CIN 'cc_name'">
									<mvt:assign name="l.settings:payment:proxy:cc_name_full:active" value="1" />
								<mvt:elseif expr="l.settings:field:code EQ 'cc_number'">
									<mvt:assign name="l.settings:payment:proxy:cc_number:active" value="1" />
								<mvt:elseif expr="l.settings:field:code EQ 'cc_exp'">
									<mvt:assign name="l.settings:payment:proxy:cc_exp:active" value="1" />
								<mvt:elseif expr="l.settings:field:code EQ 'cc_cvv'">
									<mvt:assign name="l.settings:payment:proxy:cc_cvv:active" value="1" />
								<mvt:elseif expr="l.settings:field:code EQ 'cvv'">
									<mvt:assign name="l.settings:payment:proxy:cvv:active" value="1" />
								</mvt:if>
							</mvt:foreach>
							<div class="row border--gray h-nm payment-details-form__content proxy-payment h-all-hidden" data-hook="proxy-payment-fields">
								<mvt:if expr="NOT ISNULL l.settings:payment:message">
									<div class="column whole">
										<p class="message message--info h-ntm">&mvt:payment:message;</p>
									</div>
								</mvt:if>
								<mvt:if expr="l.settings:payment:proxy:cc_name_full:active">
									<div class="column whole form-row proxy-payment__field-row" data-hook="cc_name">
										<label for="l-cc_name">Name on Card</label>
										<input class="input--medium border--gray" id="l-cc_name" data-code="cc_name" data-hook="proxy-input proxy-input-cc_name" type="text">
									</div>
								</mvt:if>
								<mvt:if expr="l.settings:payment:proxy:cc_name_split:active">
									<div class="column whole medium-half form-row proxy-payment__field-row" data-hook="cc_fname">
										<label for="l-cc_fname">First Name</label>
										<input class="input--medium border--gray h-corner" id="l-cc_fname" data-code="cc_fname" data-hook="proxy-input proxy-input-cc_fname" type="text">
									</div>
									<div class="column whole medium-half form-row proxy-payment__field-row" data-hook="cc_lname">
										<label for="l-cc_lname">Last Name</label>
										<input class="input--medium border--gray" id="l-cc_lname" data-code="cc_lname" data-hook="proxy-input proxy-input-cc_lname" type="text">
									</div>
								</mvt:if>
								<mvt:if expr="l.settings:payment:proxy:cc_number:active">
									<div class="column whole medium-two-thirds form-row h-nm proxy-payment__field-row">
										<label for="l-cc_number">Credit Card Number</label>
										<input class="input--medium border--gray" id="l-cc_number" data-code="cc_number" data-hook="proxy-input proxy-input-cc_number" type="text">
									</div>
									<div class="column whole medium-two-thirds color--red form-row payment-details-form__content__card-type" data-hook="payment-details-form__content__card-type">
										<mvt:foreach array="paymentmethods" iterator="method">
											<mvt:if expr="'am' CIN l.settings:method:code OR 'ax' CIN l.settings:method:code OR '003' CIN l.settings:method:code">
												<img data-hook="card-type-american-express" src="&mvte:global:theme_path;/images/icons/logo_amex.png">
											<mvt:elseif expr="'vi' CIN l.settings:method:code OR '001' CIN l.settings:method:code">
												<img data-hook="card-type-visa" src="&mvte:global:theme_path;/images/icons/logo_visa.png">
											<mvt:elseif expr="'mc' CIN l.settings:method:code OR 'master' CIN l.settings:method:code OR '002' CIN l.settings:method:code">
												<img data-hook="card-type-mastercard" src="&mvte:global:theme_path;/images/icons/logo_mastercard.png">
											<mvt:elseif expr="'di' CIN l.settings:method:code OR '004' CIN l.settings:method:code">
												<img data-hook="card-type-discover" src="&mvte:global:theme_path;/images/icons/logo_discover.png">
											</mvt:if>
										</mvt:foreach>
									</div>
								</mvt:if>
								<br class="h-clear">
								<mvt:if expr="l.settings:payment:proxy:cc_exp:active">
									<div class="column whole medium-half x-large-one-third form-row proxy-payment__field-row">
										<label for="l-cc_exp_month">Month</label>
										<select class="input--medium border--gray" id="l-cc_exp_month" data-code="cc_exp_month" data-hook="proxy-input proxy-input-cc_exp_month">
											<option value="">Select Month</option>
											<mvt:while expr="g.cc_exp_month_counter LT 12">
												<mvt:assign name="g.cc_exp_month_counter" value="g.cc_exp_month_counter + 1" />
												<option value="&mvte:global:cc_exp_month_counter;">&mvte:global:cc_exp_month_counter;</option>
											</mvt:while>
										</select>
									</div>
									<div class="column whole medium-half x-large-one-third form-row proxy-payment__field-row">
										<label for="l-cc_exp_year">Year</label>
										<select class="input--medium border--gray" id="l-cc_exp_year" data-code="cc_exp_year" data-hook="proxy-input proxy-input-cc_exp_year">
											<option value="" selected>Select Year</option>
											<mvt:assign name="g.cc_exp_year" value="s.dyn_tm_year" />
											<mvt:while expr="g.cc_exp_year_counter LT 25">
												<option value="&mvte:global:cc_exp_year;">&mvte:global:cc_exp_year;</option>
												<mvt:assign name="g.cc_exp_year_counter" value="g.cc_exp_year_counter + 1" />
												<mvt:assign name="g.cc_exp_year" value="s.dyn_tm_year + g.cc_exp_year_counter" />
											</mvt:while>
										</select>
									</div>
								</mvt:if>
								<mvt:if expr="l.settings:payment:proxy:cc_cvv:active">
									<div class="column whole medium-one-sixth form-row proxy-payment__field-row">
										<label for="l-cc_cvv">CVV</label>
										<input class="input--medium border--gray" id="l-cc_cvv" data-code="cc_cvv" data-hook="proxy-input proxy-input-cc_cvv" type="text">
									</div>
								</mvt:if>
								<mvt:if expr="l.settings:payment:proxy:cvv:active">
									<div class="column whole medium-one-sixth form-row proxy-payment__field-row">
										<label for="l-cvv">CVV</label>
										<input class="input--medium border--gray" id="l-cvv" data-code="cvv" data-hook="proxy-input proxy-input-cc_cvv" type="text">
									</div>
								</mvt:if>
								<mvt:if expr="l.settings:payment:capabilities:split">
									<mvt:if expr="g.Amount_Invalid">
										<mvt:assign name="l.settings:invalid:class" value="'color--red'" />
									<mvt:else>
										<mvt:assign name="l.settings:invalid:class" value="''" />
									</mvt:if>
									<div class="column whole" id="payment-amount-fields">
										<p class="font--bold">Payment Amount</p>
										<mvt:if expr="( NOT l.settings:payment:capabilities:balance ) OR ( l.settings:payment:balance GE l.settings:splitpayment:remaining )">
											<mvt:if expr="NOT g.UI_Exception">
												<mvt:assign name="g.AmountType" value="'total'" />
												<mvt:assign name="g.Amount" value="l.settings:splitpayment:remaining ROUND 2" />
											</mvt:if>
											<p>
												<label class="floating-labels__check-radio &mvt:invalid:class;">
													<mvt:if expr="g.AmountType EQ 'total'">
														<input type="radio" name="AmountType" value="total" onClick="AmountType_Changed( this.value );" checked />
													<mvt:else>
														<input type="radio" name="AmountType" value="total" onClick="AmountType_Changed( this.value );" />
													</mvt:if>
													<mvt:if expr="NOT ISNULL l.settings:payment:split_data">
														Remaining Order Total (&mvt:payment:formatted_remaining;)
													<mvt:else>
														Entire Order Total (&mvt:basket:formatted_total;)
													</mvt:if>
												</label>
											</p>
										<mvt:else>
											<p>
												<label class="floating-labels__check-radio &mvt:invalid:class;">
													<mvt:if expr="NOT g.UI_Exception">
														<mvt:assign name="g.AmountType" value="'balance'" />
														<mvt:assign name="g.Amount" value="l.settings:payment:balance ROUND 2" />
													</mvt:if>
													<mvt:if expr="g.AmountType EQ 'balance'">
														<input type="radio" name="AmountType" value="balance" onClick="AmountType_Changed( this.value );" checked />
														<input type="hidden" id="payment-balance-amount" name="Amount" value="&mvte:payment:balance;" />
													<mvt:else>
														<input type="radio" name="AmountType" value="balance" onClick="AmountType_Changed( this.value );" />
														<input type="hidden" id="payment-balance-amount" name="Amount" value="&mvte:payment:balance;" disabled />
													</mvt:if>
													Available Balance (&mvt:payment:formatted_balance;)
												</label>
											</p>
										</mvt:if>
										<mvt:if expr="g.AmountType EQ 'partial'">
											<div class="form-row">
												<label class="floating-labels__check-radio &mvt:invalid:class;">
													<input type="radio" name="AmountType" value="partial" onClick="AmountType_Changed( this.value );" checked />
													Partial:
													<input class="input--medium border--gray" id="payment-amount" type="text" name="Amount" value="&mvte:global:Amount;" />
												</label>
											</div>
										<mvt:else>
											<div class="form-row">
												<label class="floating-labels__check-radio &mvt:invalid:class;">
													<input type="radio" name="AmountType" value="partial" onClick="AmountType_Changed( this.value );" />
													Partial:
													<input class="input--medium border--gray" id="payment-amount" type="text" name="Amount" value="&mvte:global:Amount;" disabled />
												</label>
											</div>
										</mvt:if>
									</div>
									<mvt:if expr="g.AmountType EQ 'total'">
										<mvt:assign name="g.totalPayment" value="'display: none;'" />
									</mvt:if>
									<div class="column whole form-row" id="payment-additional" style="&mvt:global:totalPayment;">
										<label class="&mvt:invalid:class;" for="l-AdditionalPaymentMethod">Pay Additional Balance With:</label>
										<select class="input--medium border--gray" id="l-AdditionalPaymentMethod" name="AdditionalPaymentMethod">
											<option value="" selected>Select Method</option>
											<mvt:foreach array="paymentmethods" iterator="method">
												<mvt:if expr="(l.settings:method:module NE 'customercredit') OR ((g.PaymentMethod NE 'customercredit:credit') AND  (NOT miva_array_search(l.settings:splitpayment:splits, 1, l.split, 'l.split:module:code EQ l.settings:method:module')))">
													<mvt:if expr="l.settings:method:paymentcard:id">
														<option value="paymentcard:&mvte:method:paymentcard:id;">&mvt:method:name;</option>
													<mvt:elseif expr="l.settings:method:paymentcardtype:id">
														<option value="paymentcardtype:&mvte:method:paymentcardtype:id;">&mvt:method:name;</option>
													<mvt:else>
														<option value="&mvte:method:module;:&mvte:method:code;">&mvt:method:name;</option>
													</mvt:if>
												</mvt:if>
											</mvt:foreach>
										</select>
									</div>
								</mvt:if>
							</div>
						<mvt:else>
							<div class="row bg--secondary border--gray h-nm payment-details-form__header">
								<div class="column whole medium-two-thirds font--bold font--uppercase">Payment Method: &mvt:payment:desc;</div>
								<div class="column whole medium-one-third h-np">
									<small class="bg--white border--gray font--medium font--uppercase payment-details-form__header__badge" data-theme-icon="&#x2e;">&nbsp;&nbsp;Secure Payment</small>
								</div>
							</div>
							<div class="row border--gray h-nm payment-details-form__content proxy-payment h-all-hidden" data-hook="proxy-payment-fields">
								<mvt:if expr="NOT ISNULL l.settings:payment:message">
									<div class="column whole">
										<p class="message message--info h-ntm">&mvt:payment:message;</p>
									</div>
								</mvt:if>
								<mvt:foreach array="payment:fields" iterator="field">
									<div class="column whole form-row" data-hook="mvt-input" data-classlist="input--medium border--gray" data-id="l-&mvt:field:code;">
										<mvt:if expr="l.settings:field:invalid">
											<label class="color--red" for="l-&mvt:field:code;">&mvt:field:prompt;</label>
										<mvt:else>
											<label for="l-&mvt:field:code;">&mvt:field:prompt;</label>
										</mvt:if>
										<mvt:item name="payment" param="field:code" />
									</div>
								</mvt:foreach>
								<mvt:if expr="l.settings:payment:capabilities:split">
									<mvt:if expr="g.Amount_Invalid">
										<mvt:assign name="l.settings:invalid:class" value="'color--red'" />
									<mvt:else>
										<mvt:assign name="l.settings:invalid:class" value="''" />
									</mvt:if>
									<div class="column whole" id="payment-amount-fields">
										<p class="font--bold">Payment Amount</p>
										<mvt:if expr="( NOT l.settings:payment:capabilities:balance ) OR ( l.settings:payment:balance GE l.settings:splitpayment:remaining )">
											<mvt:if expr="NOT g.UI_Exception">
												<mvt:assign name="g.AmountType" value="'total'" />
												<mvt:assign name="g.Amount" value="l.settings:splitpayment:remaining ROUND 2" />
											</mvt:if>
											<p>
												<label class="floating-labels__check-radio &mvt:invalid:class;">
													<mvt:if expr="g.AmountType EQ 'total'">
														<input type="radio" name="AmountType" value="total" onClick="AmountType_Changed( this.value );" checked />
													<mvt:else>
														<input type="radio" name="AmountType" value="total" onClick="AmountType_Changed( this.value );" />
													</mvt:if>
													<mvt:if expr="NOT ISNULL l.settings:payment:split_data">
														Remaining Order Total (&mvt:payment:formatted_remaining;)
													<mvt:else>
														Entire Order Total (&mvt:basket:formatted_total;)
													</mvt:if>
												</label>
											</p>
											<mvt:else>
												<p>
													<label class="floating-labels__check-radio &mvt:invalid:class;">
														<mvt:if expr="NOT g.UI_Exception">
															<mvt:assign name="g.AmountType" value="'balance'" />
															<mvt:assign name="g.Amount" value="l.settings:payment:balance ROUND 2" />
														</mvt:if>
														<mvt:if expr="g.AmountType EQ 'balance'">
															<input type="radio" name="AmountType" value="balance" onClick="AmountType_Changed( this.value );" checked />
															<input type="hidden" id="payment-balance-amount" name="Amount" value="&mvte:payment:balance;" />
														<mvt:else>
															<input type="radio" name="AmountType" value="balance" onClick="AmountType_Changed( this.value );" />
															<input type="hidden" id="payment-balance-amount" name="Amount" value="&mvte:payment:balance;" disabled />
														</mvt:if>
														Available Balance (&mvt:payment:formatted_balance;)
													</label>
												</p>
										</mvt:if>
										<mvt:if expr="g.AmountType EQ 'partial'">
											<div class="form-row">
												<label class="floating-labels__check-radio &mvt:invalid:class;">
													<input type="radio" name="AmountType" value="partial" onClick="AmountType_Changed( this.value );" checked />
													Partial:
													<input class="input--medium border--gray" id="payment-amount" type="text" name="Amount" value="&mvte:global:Amount;" />
												</label>
											</div>
										<mvt:else>
											<div class="form-row">
												<label class="floating-labels__check-radio &mvt:invalid:class;">
													<input type="radio" name="AmountType" value="partial" onClick="AmountType_Changed( this.value );" />
													Partial:
													<input class="input--medium border--gray" id="payment-amount" type="text" name="Amount" value="&mvte:global:Amount;" disabled />
												</label>
											</div>
										</mvt:if>
									</div>
									<mvt:if expr="g.AmountType EQ 'total'">
										<mvt:assign name="g.totalPayment" value="'display: none;'" />
									</mvt:if>
									<div class="column whole form-row" id="payment-additional" style="&mvt:global:totalPayment;">
										<label class="&mvt:invalid:class;" for="l-AdditionalPaymentMethod">Pay Additional Balance With:</label>
										<select class="input--medium border--gray" id="l-AdditionalPaymentMethod" name="AdditionalPaymentMethod">
											<option value="" selected>Select Method</option>
											<mvt:foreach array="paymentmethods" iterator="method">
												<mvt:if expr="(l.settings:method:module NE 'customercredit') OR ((g.PaymentMethod NE 'customercredit:credit') AND  (NOT miva_array_search(l.settings:splitpayment:splits, 1, l.split, 'l.split:module:code EQ l.settings:method:module')))">
													<mvt:if expr="l.settings:method:paymentcard:id">
														<option value="paymentcard:&mvte:method:paymentcard:id;">&mvt:method:name;</option>
													<mvt:elseif expr="l.settings:method:paymentcardtype:id">
														<option value="paymentcardtype:&mvte:method:paymentcardtype:id;">&mvt:method:name;</option>
													<mvt:else>
														<option value="&mvte:method:module;:&mvte:method:code;">&mvt:method:name;</option>
													</mvt:if>
												</mvt:if>
											</mvt:foreach>
										</select>
									</div>
								</mvt:if>
							</div>
						</mvt:if>
					</mvt:if>
					<div class="h-breaker"></div>
					<div class="row form-row">
						<div class="column whole form-row h-align-center h-align-right---m">
							<mvt:if expr="l.settings:paymentsettings:mivapay:enabled AND ( l.settings:mivapay:paymentcardtype:id OR l.settings:mivapay:paymentcard:id )">
								<script>
									var onclick_submit = function (event) {
										if (MivaPay && (typeof MivaPay.Submit === 'function')) {
											MivaPay.Submit(function () {
												var form;
		
												form = document.querySelector('[data-hook*="payment-details-form"]');
												form.submit();
											});
										}
									}
								</script>
								<span onclick="onclick_submit(); return false;">
									<input class="button button--large bg--primary color--black font--bold font--uppercase h-nb" type="submit" value="Complete Order">
								</span>
							<mvt:elseif expr="'brain' CIN g.PaymentMethod OR 'square' CIN g.PaymentMethod">
								<input class="button button--large bg--primary color--black font--bold font--uppercase h-nb" type="submit" value="Complete Order">
							<mvt:else>
								<mvt:if expr="g.cc_payment EQ 1">
									<input class="button button--large bg--primary color--black font--bold font--uppercase h-nb" data-hook="submit-form" type="submit" value="Complete Order">
								<mvt:else>
									<input class="button button--large bg--primary color--black font--bold font--uppercase h-nb" data-hook="submit-form" type="submit" value="Complete Order">
								</mvt:if>
							</mvt:if>
						</div>
					</div>
				</form>
				<div class="h-breaker"></div>
			</div>
		</div>
	</section>
	<!-- end .customer-information -->
</div>
<div class="column whole large-five-twelfths">
	<mvt:item name="basket" />
	<mvt:item name="customer" />
</div>
<div class="column whole hdft-footer">
	<mvt:item name="hdft" param="footer" />
</div>
<mvt:item name="hdft" param="global_footer" />
</body>
</html>

In your theme.css file [mm5/themes/booc/css/theme/theme.css], add this code:

/**
	Square Payment Module
 */
.square-payment-form label:not(.floating-labels__check-radio) {
	display: block;
	width: auto;
	padding: 0;
	position: static;
	top: auto;
	left: auto;
	-webkit-transform: none;
	-ms-transform: none;
	transform: none;
}

.square-payment-form .sq-input {
	display: block;
	width: auto;
	margin-bottom: 1em;
}
⚠️ **GitHub.com Fallback** ⚠️