mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2024-11-10 05:02:36 +01:00
BTCPay: New payment flow (#76)
* pass livewirePaymentView & processPaymentView thru base driver * add paymentData to the interface * btcpay
This commit is contained in:
parent
59666dc5db
commit
f966a2b846
@ -14,6 +14,7 @@ namespace App\PaymentDrivers\BTCPay;
|
||||
|
||||
use App\Models\Payment;
|
||||
use App\PaymentDrivers\BTCPayPaymentDriver;
|
||||
use App\PaymentDrivers\Common\LivewireMethodInterface;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
use App\PaymentDrivers\Common\MethodInterface;
|
||||
use App\Http\Requests\ClientPortal\Payments\PaymentResponseRequest;
|
||||
@ -24,7 +25,7 @@ use App\Services\Email\EmailObject;
|
||||
use App\Services\Email\Email;
|
||||
use Illuminate\Support\Facades\App;
|
||||
|
||||
class BTCPay implements MethodInterface
|
||||
class BTCPay implements MethodInterface, LivewireMethodInterface
|
||||
{
|
||||
use MakesHash;
|
||||
|
||||
@ -49,9 +50,7 @@ class BTCPay implements MethodInterface
|
||||
|
||||
public function paymentView($data)
|
||||
{
|
||||
$data['gateway'] = $this->driver_class;
|
||||
$data['amount'] = $data['total']['amount_with_fee'];
|
||||
$data['currency'] = $this->driver_class->client->getCurrencyCode();
|
||||
$data = $this->paymentData($data);
|
||||
|
||||
return render('gateways.btcpay.pay', $data);
|
||||
}
|
||||
@ -176,4 +175,24 @@ class BTCPay implements MethodInterface
|
||||
throw new PaymentFailed('Error during BTCPay refund : ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function livewirePaymentView(array $data): string
|
||||
{
|
||||
return 'gateways.btcpay.pay_livewire';
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function paymentData(array $data): array
|
||||
{
|
||||
$data['gateway'] = $this->driver_class;
|
||||
$data['amount'] = $data['total']['amount_with_fee'];
|
||||
$data['currency'] = $this->driver_class->client->getCurrencyCode();
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
9
public/build/assets/authorize-credit-card-payment-9071bd46.js
vendored
Normal file
9
public/build/assets/authorize-credit-card-payment-9071bd46.js
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
var l=Object.defineProperty;var s=(n,e,t)=>e in n?l(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var o=(n,e,t)=>(s(n,typeof e!="symbol"?e+"":e,t),t);import{i,w as u}from"./wait-8f4ae121.js";/**
|
||||
* Invoice Ninja (https://invoiceninja.com)
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/class m{constructor(e,t){o(this,"handleAuthorization",()=>{if(cvvRequired=="1"&&document.getElementById("cvv").value.length<3){var e=$("#errors");e.show().html("<p>CVV is required</p>"),document.getElementById("pay-now").disabled=!1,document.querySelector("#pay-now > svg").classList.add("hidden"),document.querySelector("#pay-now > span").classList.remove("hidden");return}var t=$("#my-card"),d={};d.clientKey=this.publicKey,d.apiLoginID=this.loginId;var a={};a.cardNumber=t.CardJs("cardNumber").replace(/[^\d]/g,""),a.month=t.CardJs("expiryMonth").replace(/[^\d]/g,""),a.year=t.CardJs("expiryYear").replace(/[^\d]/g,""),a.cardCode=document.getElementById("cvv").value.replace(/[^\d]/g,"");var r={};return r.authData=d,r.cardData=a,document.getElementById("pay-now")&&(document.getElementById("pay-now").disabled=!0,document.querySelector("#pay-now > svg").classList.remove("hidden"),document.querySelector("#pay-now > span").classList.add("hidden")),Accept.dispatchData(r,this.responseHandler),!1});o(this,"responseHandler",e=>{if(e.messages.resultCode==="Error"){var t=0,d=$("#errors");d.show().html("<p>"+e.messages.message[t].code+": "+e.messages.message[t].text+"</p>"),document.getElementById("pay-now").disabled=!1,document.querySelector("#pay-now > svg").classList.add("hidden"),document.querySelector("#pay-now > span").classList.remove("hidden")}else if(e.messages.resultCode==="Ok"){document.getElementById("dataDescriptor").value=e.opaqueData.dataDescriptor,document.getElementById("dataValue").value=e.opaqueData.dataValue;let a=document.querySelector("input[name=token-billing-checkbox]:checked");a&&(document.getElementById("store_card").value=a.value),document.getElementById("server_response").submit()}return!1});o(this,"handle",()=>{Array.from(document.getElementsByClassName("toggle-payment-with-token")).forEach(d=>d.addEventListener("click",a=>{document.getElementById("save-card--container").style.display="none",document.getElementById("authorize--credit-card-container").style.display="none",document.getElementById("token").value=a.target.dataset.token}));let e=document.getElementById("toggle-payment-with-credit-card");e&&e.addEventListener("click",()=>{document.getElementById("save-card--container").style.display="grid",document.getElementById("authorize--credit-card-container").style.display="flex",document.getElementById("token").value=null});let t=document.getElementById("pay-now");return t&&t.addEventListener("click",d=>{let a=document.getElementById("token");a.value?this.handlePayNowAction(a.value):this.handleAuthorization()}),this});this.publicKey=e,this.loginId=t,this.cardHolderName=document.getElementById("cardholder_name")}handlePayNowAction(e){document.getElementById("pay-now").disabled=!0,document.querySelector("#pay-now > svg").classList.remove("hidden"),document.querySelector("#pay-now > span").classList.add("hidden"),document.getElementById("token").value=e,document.getElementById("server_response").submit()}}function c(){const n=document.querySelector('meta[name="authorize-public-key"]').content,e=document.querySelector('meta[name="authorize-login-id"]').content;document.querySelector('meta[name="authnet-require-cvv"]').content,new m(n,e).handle()}i()?c():u("#authorize-net-credit-card-payment").then(()=>c());
|
@ -0,0 +1,27 @@
|
||||
<div class="rounded-lg border bg-card text-card-foreground shadow-sm overflow-hidden py-5 bg-white sm:gap-4"
|
||||
id="btcpay-payment">
|
||||
<div class="alert alert-failure mb-4" hidden id="errors"></div>
|
||||
|
||||
@include('portal.ninja2020.gateways.includes.payment_details')
|
||||
|
||||
<form action="{{ route('client.payments.response') }}" method="post" id="server-response">
|
||||
@csrf
|
||||
<input type="hidden" name="gateway_response">
|
||||
<input type="hidden" name="company_gateway_id" value="{{ $gateway->getCompanyGatewayId() }}">
|
||||
<input type="hidden" name="payment_method_id" value="{{ $payment_method_id }}">
|
||||
<input type="hidden" name="token">
|
||||
<input type="hidden" name="amount" value="{{ $amount }}">
|
||||
<input type="hidden" name="currency" value="{{ $currency }}">
|
||||
<input type="hidden" name="payment_hash" value="{{ $payment_hash }}">
|
||||
</form>
|
||||
|
||||
@include('portal.ninja2020.gateways.includes.pay_now')
|
||||
</div>
|
||||
|
||||
@script
|
||||
<script>
|
||||
document.getElementById('pay-now').addEventListener('click', function () {
|
||||
document.getElementById('server-response').submit();
|
||||
});
|
||||
</script>
|
||||
@endscript
|
Loading…
Reference in New Issue
Block a user