1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-11-08 20:22:42 +01:00

Partial WePay ACH support

This commit is contained in:
Joshua Dwire 2016-05-17 14:09:39 -04:00
parent 43fade2339
commit e905b29510
9 changed files with 103 additions and 65 deletions

View File

@ -301,7 +301,7 @@ class AccountGatewayController extends BaseController
$config->plaidPublicKey = $oldConfig->plaidPublicKey;
}
if ($gatewayId == GATEWAY_STRIPE) {
if ($gatewayId == GATEWAY_STRIPE || $gatewayId == GATEWAY_WEPAY) {
$config->enableAch = boolval(Input::get('enable_ach'));
}

View File

@ -293,6 +293,7 @@ class PublicClientController extends BaseController
'color' => $color,
'account' => $account,
'client' => $client,
'contact' => $invitation->contact,
'clientFontUrl' => $account->getFontsUrl(),
'gateway' => $account->getTokenGateway(),
'paymentMethods' => $this->paymentService->getClientPaymentMethods($client),
@ -757,6 +758,7 @@ class PublicClientController extends BaseController
'account' => $account,
'color' => $account->primary_color ? $account->primary_color : '#0b4d78',
'client' => $client,
'contact' => $invitation->contact,
'clientViewCSS' => $account->clientViewCSS(),
'clientFontUrl' => $account->getFontsUrl(),
'paymentMethods' => $paymentMethods,
@ -828,20 +830,21 @@ class PublicClientController extends BaseController
$accountGateway = $invoice->client->account->getTokenGateway();
$gateway = $accountGateway->gateway;
if ($token && $paymentType == PAYMENT_TYPE_BRAINTREE_PAYPAL) {
$sourceReference = $this->paymentService->createToken($this->paymentService->createGateway($accountGateway), array('token'=>$token), $accountGateway, $client, $invitation->contact_id);
if ($token) {
if ($paymentType == PAYMENT_TYPE_BRAINTREE_PAYPAL) {
$sourceReference = $this->paymentService->createToken($this->paymentService->createGateway($accountGateway), array('token' => $token), $accountGateway, $client, $invitation->contact_id);
if(empty($sourceReference)) {
$this->paymentMethodError('Token-No-Ref', $this->paymentService->lastError, $accountGateway);
} else {
Session::flash('message', trans('texts.payment_method_added'));
if (empty($sourceReference)) {
$this->paymentMethodError('Token-No-Ref', $this->paymentService->lastError, $accountGateway);
} else {
Session::flash('message', trans('texts.payment_method_added'));
}
return redirect()->to($account->enable_client_portal ? '/client/dashboard' : '/client/paymentmethods/');
}
return redirect()->to($account->enable_client_portal?'/client/dashboard':'/client/paymentmethods/');
}
$acceptedCreditCardTypes = $accountGateway->getCreditcardTypes();
$data = [
'showBreadcrumbs' => false,
'client' => $client,

View File

@ -665,6 +665,7 @@ if (!defined('CONTACT_EMAIL')) {
define('PAYMENT_TYPE_STRIPE_CREDIT_CARD', 'PAYMENT_TYPE_STRIPE_CREDIT_CARD');
define('PAYMENT_TYPE_STRIPE_ACH', 'PAYMENT_TYPE_STRIPE_ACH');
define('PAYMENT_TYPE_BRAINTREE_PAYPAL', 'PAYMENT_TYPE_BRAINTREE_PAYPAL');
define('PAYMENT_TYPE_WEPAY_ACH', 'PAYMENT_TYPE_WEPAY_ACH');
define('PAYMENT_TYPE_CREDIT_CARD', 'PAYMENT_TYPE_CREDIT_CARD');
define('PAYMENT_TYPE_DIRECT_DEBIT', 'PAYMENT_TYPE_DIRECT_DEBIT');
define('PAYMENT_TYPE_BITCOIN', 'PAYMENT_TYPE_BITCOIN');

View File

@ -379,26 +379,27 @@ class Account extends Eloquent
return $format;
}
public function getGatewayByType($type = PAYMENT_TYPE_ANY)
public function getGatewayByType($type = PAYMENT_TYPE_ANY, $exceptFor = null)
{
if ($type == PAYMENT_TYPE_STRIPE_ACH || $type == PAYMENT_TYPE_STRIPE_CREDIT_CARD) {
$type = PAYMENT_TYPE_STRIPE;
}
if ($type == PAYMENT_TYPE_BRAINTREE_PAYPAL) {
$gateway = $this->getGatewayConfig(GATEWAY_BRAINTREE);
if (!$gateway || !$gateway->getPayPalEnabled()){
return false;
}
return $gateway;
}
foreach ($this->account_gateways as $gateway) {
if ($exceptFor && ($gateway->id == $exceptFor->id)) {
continue;
}
if (!$type || $type == PAYMENT_TYPE_ANY) {
return $gateway;
} elseif ($gateway->isPaymentType($type)) {
return $gateway;
} elseif ($type == PAYMENT_TYPE_CREDIT_CARD && $gateway->isPaymentType(PAYMENT_TYPE_STRIPE)) {
return $gateway;
} elseif ($type == PAYMENT_TYPE_DIRECT_DEBIT && $gateway->getAchEnabled()) {
return $gateway;
} elseif ($type == PAYMENT_TYPE_PAYPAL && $gateway->getPayPalEnabled()) {
return $gateway;
}
}
@ -1414,32 +1415,13 @@ class Account extends Eloquent
}
public function canAddGateway($type){
if ($type == PAYMENT_TYPE_STRIPE) {
$type == PAYMENT_TYPE_CREDIT_CARD;
}
if($this->getGatewayByType($type)) {
return false;
}
if ($type == PAYMENT_TYPE_CREDIT_CARD && $this->getGatewayByType(PAYMENT_TYPE_STRIPE)) {
// Stripe is already handling credit card payments
return false;
}
if ($type == PAYMENT_TYPE_STRIPE && $this->getGatewayByType(PAYMENT_TYPE_CREDIT_CARD)) {
// Another gateway is already handling credit card payments
return false;
}
if ($type == PAYMENT_TYPE_DIRECT_DEBIT && $stripeGateway = $this->getGatewayByType(PAYMENT_TYPE_STRIPE)) {
if (!empty($stripeGateway->getAchEnabled())) {
// Stripe is already handling ACH payments
return false;
}
}
if ($type == PAYMENT_TYPE_PAYPAL && $braintreeGateway = $this->getGatewayConfig(GATEWAY_BRAINTREE)) {
if (!empty($braintreeGateway->getPayPalEnabled())) {
// PayPal is already enabled
return false;
}
}
return true;
}

View File

@ -1219,7 +1219,7 @@ $LANG = array(
'ach' => 'ACH',
'enable_ach' => 'Enable ACH',
'stripe_ach_help' => 'ACH support must also be enabled at Stripe.',
'stripe_ach_disabled' => 'Another gateway is already configured for direct debit.',
'ach_disabled' => 'Another gateway is already configured for direct debit.',
'plaid' => 'Plaid',
'client_id' => 'Client Id',

View File

@ -113,7 +113,7 @@
@endif
@if ($gateway->id == GATEWAY_BRAINTREE)
@if ($account->getGatewayByType(PAYMENT_TYPE_PAYPAL))
@if ($account->getGatewayByType(PAYMENT_TYPE_PAYPAL, isset($accountGateway)?$accountGateway:null))
{!! Former::checkbox('enable_paypal')
->label(trans('texts.paypal'))
->text(trans('texts.braintree_enable_paypal'))
@ -149,33 +149,49 @@
->class('creditcard-types')
->addGroupClass('gateway-option')
!!}
<div class="stripe-ach">
@if ($account->getGatewayByType(PAYMENT_TYPE_DIRECT_DEBIT))
@if(isset($accountGateway) && $accountGateway->gateway_id == GATEWAY_WEPAY)
@if ($account->getGatewayByType(PAYMENT_TYPE_DIRECT_DEBIT, $accountGateway))
{!! Former::checkbox('enable_ach')
->label(trans('texts.ach'))
->text(trans('texts.enable_ach'))
->value(null)
->disabled(true)
->help(trans('texts.stripe_ach_disabled')) !!}
->help(trans('texts.ach_disabled')) !!}
@else
{!! Former::checkbox('enable_ach')
->label(trans('texts.ach'))
->text(trans('texts.enable_ach'))
->help(trans('texts.stripe_ach_help')) !!}
<div class="stripe-ach-options">
<div class="form-group">
<div class="col-sm-8 col-sm-offset-4">
<h4>{{trans('texts.plaid')}}</h4>
<div class="help-block">{{trans('texts.plaid_optional')}}</div>
</div>
</div>
{!! Former::text('plaid_client_id')->label(trans('texts.client_id')) !!}
{!! Former::text('plaid_secret')->label(trans('texts.secret')) !!}
{!! Former::text('plaid_public_key')->label(trans('texts.public_key'))
->help(trans('texts.plaid_environment_help')) !!}
</div>
{!! Former::checkbox('enable_ach')
->label(trans('texts.ach'))
->text(trans('texts.enable_ach')) !!}
@endif
</div>
@elseif(!isset($accountGateway) || $accountGateway->gateway_id == GATEWAY_STRIPE)
<div class="stripe-ach">
@if ($account->getGatewayByType(PAYMENT_TYPE_DIRECT_DEBIT, isset($accountGateway)?$accountGateway:null))
{!! Former::checkbox('enable_ach')
->label(trans('texts.ach'))
->text(trans('texts.enable_ach'))
->value(null)
->disabled(true)
->help(trans('texts.ach_disabled')) !!}
@else
{!! Former::checkbox('enable_ach')
->label(trans('texts.ach'))
->text(trans('texts.enable_ach'))
->help(trans('texts.stripe_ach_help')) !!}
<div class="stripe-ach-options">
<div class="form-group">
<div class="col-sm-8 col-sm-offset-4">
<h4>{{trans('texts.plaid')}}</h4>
<div class="help-block">{{trans('texts.plaid_optional')}}</div>
</div>
</div>
{!! Former::text('plaid_client_id')->label(trans('texts.client_id')) !!}
{!! Former::text('plaid_secret')->label(trans('texts.secret')) !!}
{!! Former::text('plaid_public_key')->label(trans('texts.public_key'))
->help(trans('texts.plaid_environment_help')) !!}
</div>
@endif
</div>
@endif
</div>
</div>

View File

@ -53,6 +53,18 @@
->label('Accepted Credit Cards')
->checkboxes($creditCardTypes)
->class('creditcard-types') !!}
@if ($account->getGatewayByType(PAYMENT_TYPE_DIRECT_DEBIT))
{!! Former::checkbox('enable_ach')
->label(trans('texts.ach'))
->text(trans('texts.enable_ach'))
->value(null)
->disabled(true)
->help(trans('texts.ach_disabled')) !!}
@else
{!! Former::checkbox('enable_ach')
->label(trans('texts.ach'))
->text(trans('texts.enable_ach')) !!}
@endif
{!! Former::checkbox('tos_agree')->label(' ')->text(trans('texts.wepay_tos_agree',
['link'=>'<a id="wepay-tos-link" href="https://go.wepay.com/terms-of-service-us" target="_blank">'.trans('texts.wepay_tos_link_text').'</a>']
))->value('true') !!}

View File

@ -124,7 +124,7 @@
<p>&nbsp;<br/>&nbsp;</p>
<div>
<div id="paypal-container"></div>
@if($paymentType != PAYMENT_TYPE_STRIPE_ACH && $paymentType != PAYMENT_TYPE_BRAINTREE_PAYPAL)
@if($paymentType != PAYMENT_TYPE_STRIPE_ACH && $paymentType != PAYMENT_TYPE_BRAINTREE_PAYPAL && $paymentType != PAYMENT_TYPE_WEPAY_ACH)
<h3>{{ trans('texts.contact_information') }}</h3>
<div class="row">
<div class="col-md-6">

View File

@ -48,6 +48,24 @@
})
});
</script>
@elseif($gateway->gateway_id == GATEWAY_WEPAY && $gateway->getAchEnabled())
<script type="text/javascript" src="https://static.wepay.com/js/tokenization.v2.js"></script>
<script type="text/javascript">
$(function() {
WePay.set_endpoint('{{ WEPAY_ENVIRONMENT }}');
// Shortcuts
$('#add-ach').click(function(e) {
e.preventDefault();
WePay.bank_account.create({
'client_id': '{{ WEPAY_CLIENT_ID }}',
'email':{!! json_encode($contact->email) !!}
}, function(data){
window.location.href = $('#add-ach').attr('href') + '/' + encodeURIComponent(data.bank_account_id)
});
});
});
</script>
@endif
@if(!empty($paymentMethods))
@foreach ($paymentMethods as $paymentMethod)
@ -88,8 +106,14 @@
->asLinkTo(URL::to('/client/paymentmethods/add/'.($gateway->getPaymentType() == PAYMENT_TYPE_STRIPE ? 'stripe_credit_card' : 'credit_card'))) !!}
@if($gateway->getACHEnabled())
&nbsp;
@if($gateway->gateway_id == GATEWAY_STRIPE)
{!! Button::success(strtoupper(trans('texts.add_bank_account')))
->asLinkTo(URL::to('/client/paymentmethods/add/stripe_ach')) !!}
@elseif($gateway->gateway_id == GATEWAY_WEPAY)
{!! Button::success(strtoupper(trans('texts.add_bank_account')))
->withAttributes(['id'=>'add-ach'])
->asLinkTo(URL::to('/client/paymentmethods/add/wepay_ach')) !!}
@endif
@endif
@if($gateway->getPayPalEnabled())
&nbsp;