Skip to content

Commit

Permalink
Merge pull request #65 from omise/ib-make-charge
Browse files Browse the repository at this point in the history
Be able to make a charge with Internet Banking payment method
  • Loading branch information
guzzilar authored Mar 29, 2017
2 parents 0b9c435 + 656bea3 commit 0af1881
Show file tree
Hide file tree
Showing 9 changed files with 268 additions and 58 deletions.
15 changes: 15 additions & 0 deletions Gateway/Http/Client/OffsiteInternetbanking.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php
namespace Omise\Payment\Gateway\Http\Client;

class OffsiteInternetbanking extends AbstractOmiseClient
{
/**
* @param array $body
*
* @return array
*/
public function request(Array $body)
{
return \OmiseCharge::create($body, $this->publicKey, $this->secretKey);
}
}
35 changes: 35 additions & 0 deletions Gateway/Request/PaymentOffsiteBuilder.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?php
namespace Omise\Payment\Gateway\Request;

use Magento\Payment\Gateway\Helper\SubjectReader;
use Magento\Payment\Gateway\Request\BuilderInterface;
use Omise\Payment\Observer\OffsiteInternetbankingDataAssignObserver;

class PaymentOffsiteBuilder implements BuilderInterface
{
/**
* @var string
*/
const OFFSITE = 'offsite';

/**
* @var string
*/
const RETURN_URI = 'return_uri';

/**
* @param array $buildSubject
*
* @return array
*/
public function build(array $buildSubject)
{
$payment = SubjectReader::readPayment($buildSubject);
$method = $payment->getPayment();

return [
self::OFFSITE => $method->getAdditionalInformation(OffsiteInternetbankingDataAssignObserver::OFFSITE),
self::RETURN_URI => 'http://127.0.0.1' // TODO: Remove this dump-data
];
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php
namespace Omise\Payment\Gateway\Validator\Offsite;

use Magento\Payment\Gateway\Command\CommandException;
use Magento\Payment\Gateway\Validator\AbstractValidator;

class InternetbankingChargeCommandResponseValidator extends AbstractValidator
{
/**
* @var string
*/
protected $message;

/**
* Performs domain-related validation for business object
*
* @param array $validationSubject
*
* @return ResultInterface
*/
public function validate(array $validationSubject)
{
return $this->createResult(true, []);
}
}
48 changes: 48 additions & 0 deletions Observer/OffsiteInternetbankingDataAssignObserver.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?php
namespace Omise\Payment\Observer;

use Magento\Framework\Event\Observer;
use Magento\Payment\Observer\AbstractDataAssignObserver;
use Magento\Quote\Api\Data\PaymentInterface;

class OffsiteInternetbankingDataAssignObserver extends AbstractDataAssignObserver
{
/**
* @var string
*/
const OFFSITE = 'offsite';

/**
* @var array
*/
protected $additionalInformationList = [
self::OFFSITE
];

/**
* @param \Magento\Framework\Event\Observer $observer
*/
public function execute(Observer $observer)
{
$dataObject = $this->readDataArgument($observer);

$additionalData = $dataObject->getData(PaymentInterface::KEY_ADDITIONAL_DATA);

if (! is_array($additionalData)) {
return;
}

$paymentInfo = $this->readPaymentModelArgument($observer);

$paymentInfo->setOffsite($additionalData[self::OFFSITE]);

foreach ($this->additionalInformationList as $additionalInformationKey) {
if (isset($additionalData[$additionalInformationKey])) {
$paymentInfo->setAdditionalInformation(
$additionalInformationKey,
$additionalData[$additionalInformationKey]
);
}
}
}
}
29 changes: 28 additions & 1 deletion etc/di.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<argument name="infoBlockType" xsi:type="string">Magento\Payment\Block\Info</argument>
<argument name="valueHandlerPool" xsi:type="object">OmiseOffsiteInternetbankingValueHandlerPool</argument>
<argument name="validatorPool" xsi:type="object">OmiseValidatorPool</argument>
<argument name="commandPool" xsi:type="object">OmiseCommandPool</argument>
<argument name="commandPool" xsi:type="object">OmiseOffsiteInternetbankingCommandPool</argument>
</arguments>
</virtualType>

Expand All @@ -32,6 +32,33 @@
</arguments>
</virtualType>

<virtualType name="OmiseOffsiteInternetbankingCommandPool" type="Magento\Payment\Gateway\Command\CommandPool">
<arguments>
<argument name="commands" xsi:type="array">
<item name="capture" xsi:type="string">OmiseOffsiteInternetbankingChargeCommand</item>
</argument>
</arguments>
</virtualType>

<virtualType name="OmiseOffsiteInternetbankingChargeCommand" type="Magento\Payment\Gateway\Command\GatewayCommand">
<arguments>
<argument name="requestBuilder" xsi:type="object">OmiseOffsiteInternetbankingChargeRequest</argument>
<argument name="transferFactory" xsi:type="object">Omise\Payment\Gateway\Http\TransferFactory</argument>
<argument name="client" xsi:type="object">Omise\Payment\Gateway\Http\Client\OffsiteInternetbanking</argument>
<argument name="handler" xsi:type="object">Magento\Payment\Gateway\Response\HandlerChain</argument>
<argument name="validator" xsi:type="object">Omise\Payment\Gateway\Validator\Offsite\InternetbankingChargeCommandResponseValidator</argument>
</arguments>
</virtualType>

<virtualType name="OmiseOffsiteInternetbankingChargeRequest" type="Magento\Payment\Gateway\Request\BuilderComposite">
<arguments>
<argument name="builders" xsi:type="array">
<item name="payment" xsi:type="string">Omise\Payment\Gateway\Request\PaymentDataBuilder</item>
<item name="offsite" xsi:type="string">Omise\Payment\Gateway\Request\PaymentOffsiteBuilder</item>
</argument>
</arguments>
</virtualType>

<!-- Credit Card payment solution -->
<virtualType name="OmiseCcAdapter" type="Magento\Payment\Model\Method\Adapter">
<arguments>
Expand Down
4 changes: 4 additions & 0 deletions etc/events.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,8 @@
<event name="payment_method_assign_data_omise_cc">
<observer name="omise_data_assign" instance="Omise\Payment\Observer\OmiseDataAssignObserver" />
</event>

<event name="payment_method_assign_data_omise_offsite_internetbanking">
<observer name="omise_data_assign" instance="Omise\Payment\Observer\OffsiteInternetbankingDataAssignObserver" />
</event>
</config>
2 changes: 1 addition & 1 deletion view/frontend/web/css/offsite-internetbanking.css
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
#omise_offsite_internetbankingForm .omise-logo-wrapper img {
width: 30px;
height: 30px;
display: inline-block;
display: block;
}

#omise_offsite_internetbankingForm .omise-banking-text-wrapper {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
define(
[
'ko',
'Magento_Payment/js/view/payment/cc-form',
'Magento_Checkout/js/view/payment/default',
'Magento_Checkout/js/action/redirect-on-success',
'Magento_Checkout/js/model/quote'
],
Expand Down Expand Up @@ -29,14 +29,31 @@ define(
return 'omise_offsite_internetbanking';
},

/**
* Initiate observable fields
*
* @return this
*/
initObservable: function() {
this._super()
.observe([
'omiseOffsite'
]);

return this;
},

/**
* Get a checkout form data
*
* @return {Object}
*/
getData: function() {
return {
'method': this.item.method
'method': this.item.method,
'additional_data': {
'offsite': this.omiseOffsite()
}
};
},

Expand Down
147 changes: 93 additions & 54 deletions view/frontend/web/template/payment/offsite-internetbanking-form.html
Original file line number Diff line number Diff line change
Expand Up @@ -27,63 +27,102 @@
data-bind="attr: {
id: getCode() + 'Form',
}">
<ul class="form-list">
<!-- SCB -->
<li class="items">
<input id="internet_banking_scb" type="radio" name="payment[offsite]" value="internet_banking_scb" />
<label for="internet_banking_scb">
<div class="omise-logo-wrapper scb">
<img class="scb" />
</div>
<div class="omise-banking-text-wrapper">
<span class="title">Siam Commercial Bank</span><br/>
<span class="rate secondary-text">Fee: 15 THB (same zone), 30 THB (out zone)</span>
</div>
</label>
</li>

<!-- KTB -->
<li class="items">
<input id="internet_banking_ktb" type="radio" name="payment[offsite]" value="internet_banking_ktb" />
<label for="internet_banking_ktb">
<div class="omise-logo-wrapper ktb">
<img class="ktb" />
</div>
<div class="omise-banking-text-wrapper">
<span class="title">Krungthai Bank</span><br/>
<span class="rate secondary-text">Fee: 15 THB (same zone), 15 THB (out zone)</span>
</div>
</label>
</li>
<fieldset data-bind="attr: {class: 'fieldset payment items ' + getCode(), id: 'payment_form_' + getCode()}">
<ul class="form-list">
<!-- SCB -->
<li class="items">
<input
type="radio"
name="offsite"
value="internet_banking_scb"
data-bind="
attr: {
id: getCode() + '_scb'
},
checked: omiseOffsite"
/>
<label for="omise_offsite_internetbanking_scb">
<div class="omise-logo-wrapper scb">
<img class="scb" />
</div>
<div class="omise-banking-text-wrapper">
<span class="title">Siam Commercial Bank</span><br/>
<span class="rate secondary-text">Fee: 15 THB (same zone), 30 THB (out zone)</span>
</div>
</label>
</li>

<!-- BAY -->
<li class="items">
<input id="internet_banking_bay" type="radio" name="payment[offsite]" value="internet_banking_bay" />
<label for="internet_banking_bay">
<div class="omise-logo-wrapper bay">
<img class="bay" />
</div>
<div class="omise-banking-text-wrapper">
<span class="title">Krungsri Bank</span><br/>
<span class="rate secondary-text">Fee: 15 THB (same zone), 15 THB (out zone)</span>
</div>
</label>
</li>
<!-- KTB -->
<li class="items">
<input
type="radio"
name="offsite"
value="internet_banking_ktb"
data-bind="
attr: {
id: getCode() + '_ktb'
},
checked: omiseOffsite"
/>
<label for="omise_offsite_internetbanking_ktb">
<div class="omise-logo-wrapper ktb">
<img class="ktb" />
</div>
<div class="omise-banking-text-wrapper">
<span class="title">Krungthai Bank</span><br/>
<span class="rate secondary-text">Fee: 15 THB (same zone), 15 THB (out zone)</span>
</div>
</label>
</li>

<!-- BBL -->
<li class="items">
<input id="internet_banking_bbl" type="radio" name="payment[offsite]" value="internet_banking_bbl" />
<label for="internet_banking_bbl">
<div class="omise-logo-wrapper bbl">
<img class="bbl" />
</div>
<div class="omise-banking-text-wrapper">
<span class="title">Bangkok Bank</span><br/>
<span class="rate secondary-text">Fee: 10 THB (same zone), 20 THB (out zone)</span>
</div>
</label>
</li>
</ul>
<!-- BAY -->
<li class="items">
<input
type="radio"
name="offsite"
value="internet_banking_bay"
data-bind="
attr: {
id: getCode() + '_bay'
},
checked: omiseOffsite"
/>
<label for="omise_offsite_internetbanking_bay">
<div class="omise-logo-wrapper bay">
<img class="bay" />
</div>
<div class="omise-banking-text-wrapper">
<span class="title">Krungsri Bank</span><br/>
<span class="rate secondary-text">Fee: 15 THB (same zone), 15 THB (out zone)</span>
</div>
</label>
</li>

<!-- BBL -->
<li class="items">
<input
type="radio"
name="offsite"
value="internet_banking_bbl"
data-bind="
attr: {
id: getCode() + '_bbl'
},
checked: omiseOffsite"
/>
<label for="omise_offsite_internetbanking_bbl">
<div class="omise-logo-wrapper bbl">
<img class="bbl" />
</div>
<div class="omise-banking-text-wrapper">
<span class="title">Bangkok Bank</span><br/>
<span class="rate secondary-text">Fee: 10 THB (same zone), 20 THB (out zone)</span>
</div>
</label>
</li>
</ul>
</fieldset>
</form>
<div class="checkout-agreements-block">
<!-- ko foreach: $parent.getRegion('before-place-order') -->
Expand Down

0 comments on commit 0af1881

Please sign in to comment.