A Morningtrain package to simple handle NETS Easy payments.
To get started install the package as described below in Installation.
To use the tool have a look at Usage
Install with composer
composer require morningtrain/wp-nets-easy
Initialize \Morningtrain\WpNetsEasy\NetsEasy
with NETS Easy test or live secret key.
\Morningtrain\WpNetsEasy\NetsEasy::init('live-secret-key-abcdefghijklmnopqrstuvwxyz123456789');
This needs to be done before using the package, or after updating the package.
You can run all new migrations like so:
Using wp cli
:
wp dbmigrate
Using php
:
<?php
\Morningtrain\WP\Database\Database::migrate();
?>
use Morningtrain\WpNetsEasy\Classes\Payment\Payment;
use Morningtrain\WpNetsEasy\Classes\Payment\Customer;
use Morningtrain\WpNetsEasy\Classes\Payment\Address;
use Morningtrain\WpNetsEasy\Classes\Payment\Item;
// Create payment and set payment information and urls
$payment = Payment::create()
->setReference($orderId)
->setCustomer(
Customer::create()
->setReference($customer->id)
->setEmail($customer->email)
->setPhone($customer->phone)
->setName($customer->firstName, $customer->lastName)
->setCompanyName($customer->companyName)
->setShippingAddress(
Address::create()
->setAddressLine1($customer->address1)
->setAddressLine2($customer->address2)
->setPostalCode($customer->zipCode)
->setCity($customer->city())
)
)
->setTermsUrl(get_post_permalink($termsPageId))
->setReturnUrl(Route::route('payment-success', ['token' => $order->token]))
->setCancelUrl(Route::route('payment-cancel', ['token' => $order->token]));
// Add items to payments
foreach($order->items as $item) {
$payment->addItem(
Item::create($item->sku)
->setName($item->name)
->setQuantity($item->quantity)
->setUnitPriceInclusiveTax($item->price)
);
}
// Persist payment in NETS Easy
$response = $payment->createRequest();
if(wp_remote_retrieve_response_code($response) !== 201) {
// Error handling when something was wrong with the payment
wp_redirect($checkoutUrl);
exit();
}
// Save payment reference to order
$order->setPaymentId($payment->getPaymentId());
// Redirect to payment page
wp_redirect($payment->getPaymentPageUrl());
exit();
If your product allows you to auto charge payment. You can tell Nets Easy to charge the payment automatically before you persist the payment.
$payment->autoCharge()
When a payment requrest has been created, the payment reference will be saved to the database.
Payment is a model implementet with Eloquent. To get payments you can use all methods from Eloquent (see documentation).
You can use the custom method Payment::getByPaymentId($paymentId);
$payment = Payment::getByPaymentId($order->payment_id);
To terminate payment, the customer must not have finished checkout. You can use it on the cancel callback to avoid double payments later.
$payment->terminate()
$payment->isReserved()
$payment->isCharged()
$payment->charge()
NOTE: Partly charges is not implementet yet
NOTE: Refund and partly refund is not implementet yet
NOTE: Subscriptions is not implementet yet
NOTE: Subscriptions is not implementet yet
The implementation handle webhooks and sets the payment status automatically.
If you need to do something on a specific webhook, you can do that throug actions and filters.
Name | Descritpion |
---|---|
payment.created | A payment has been created. |
payment.reservation.created | The amount of the payment has been reserved. |
payment.reservation.failed | A reservation attempt has failed. |
payment.checkout.completed | The customer has completed the checkout. |
payment.charge.created.v2 | The customer has successfully been charged, partially or fully. |
payment.charge.failed | A charge attempt has failed. |
payment.refund.initiated.v2 | A refund has been initiated. |
payment.refund.failed | A refund attempt has failed. |
payment.refund.completed | A refund has successfully been completed. |
payment.cancel.created | A reservation has been canceled. |
payment.cancel.failed | A cancellation has failed. |
Hook Name | Description |
---|---|
morningtrain/nets-easy/webhook/{$webhookName} | Do something on the webhook (before the implementet handling but after we have checked for previous handling) |
Hook Name | Filtered value | Extra parameters | Description |
---|---|---|---|
morningtrain/nets-easy/webhook/{$webhookName}/bypass | false | none | Return something to bypass all webhook handling logic |
morningtrain/nets-easy/webhook/{$webhookName}/after-handle | false or value from handle function | $webhook - The Webhook object with data | Do something after default handling. Return something to bypass setting the webhook as handled and return status 200 |
morningtrain/nets-easy/webhook/{$webhookName}/response | WP_REST_Response with default values (status 200) | $webhook - The Webhook object with data | Filter the response after webhook fully handled |
The MIT License (MIT). Please see License File for more information.