Jump to content

PaymentMollie (PW3)


Typografics
 Share

Recommended Posts

  • 6 months later...

I ran into this issue too. I edited the Mollie module to fit my own needs, a bit too many changes to create a merge request, but it deals with this issue. 

 

<?php namespace ProcessWire;

// Here you can find more information about the Mollie php api https://github.com/mollie/mollie-api-php

require_once __DIR__ . "/vendor/autoload.php";

class PaymentMollie extends PaymentModule
{

    public static function getModuleInfo()
    {
        return [
            'title' => 'PaymentMollie',
            'version' => '0.0.2',
            'summary' => 'Mollie Payment method',
            'singular' => false,
            'autoload' => false,
            'requires' => 'ProcessWire>=3.0.98, PaymentModule',
        ];
    }

    public function init()
    {
        ini_set('display_errors', 1);
        ini_set('display_startup_errors', 1);
        error_reporting(E_ALL);
    }

    public function getTitle()
    {
        return $this->_("Mollie: iDeal, Bancontact");
    }

    public function getFailureReason()
    {
        return "Error";
    }

    public function processPayment()
    {
        $payment_id = wire()->input->post->id;
        $order_id = wire()->input->urlSegment2;

        $mollie = new \Mollie\Api\MollieApiClient();

        $mollie->setApiKey($this->test_api_key);
        if ($this->live_check == "1") {
            $mollie->setApiKey($this->api_key);
        }

        $payment = $mollie->payments->get($payment_id);
        $order_id = $payment->metadata->order_id;

        wire()->log->save("mollie", "Processing payment for... $order_id");

        if ($payment->isPaid() == true) {

            wire()->log->save("mollie", "Order $order_id was paid using mollie!");

            $order = wire()->pages->get($order_id);
            $order->of(false);
            $order->pad_paid = time();
            $order->addNote($this->_("Order paid using Mollie") . ": " . $payment->id);
            $order->removeStatus(Page::statusUnpublished);
            $order->save();

            return true;
        } elseif ($payment->isOpen() == FALSE) {
            return false;
        }
        return false;
    }

    public function getMollieMethods()
    {
        $mollie = new \Mollie\Api\MollieApiClient();

        $mollie->setApiKey($this->test_api_key);
        if ($this->live_check == "1") {
            $mollie->setApiKey($this->api_key);
        }

        $methods = $mollie->methods->all();
        $return = [

        ];

        foreach ($methods as $method) {
            $return[] = [
                "title" => htmlspecialchars($method->description),
                "icon" => htmlspecialchars($method->image->size1x),
                "icon2x" => htmlspecialchars($method->image->size2x),
            ];
        }

        return $return;
    }

    public function render()
    {
        $output = "";

        $mollie = new \Mollie\Api\MollieApiClient();

        $mollie->setApiKey($this->test_api_key);
        if ($this->live_check == "1") {
            $mollie->setApiKey($this->api_key);
        }

        $paymentInfo = [
            "amount"   => [
                    "value" => number_format(($this->getTotalAmount() /100), 2, '.', ''),
                    "currency" => 'EUR',
                ],
            "description" => "Bestelling van: " . $this->customer->givenName . " " . $this->customer->familyName,
            "redirectUrl" => $this->httphost . "checkout/?id=" . $this->id,
            "webhookUrl"  => $this->httphost. "checkout/processmollie/" . $this->id . "/",

            // Specify here wat you want
            "metadata" => [
                "order_id" => $this->id,
                /*
                    "customer_name" => $this->customer->givenName,
                    "customer_familyName" => $this->customer->familyName,
                    "customer_address" => $this->customer->streetAddress,
                    "customer_locality" => $this->customer->locality,
                    "customer_postalCode" => $this->customer->postalCode,
                    "customer_country" => $this->customer->country,
                    "customer_email" => $this->customer->email
                */
            ],
        ];

        // $output .= "<pre>" . print_r($paymentInfo, true) . "</pre>";

        $payment = $mollie->payments->create($paymentInfo);

        wire()->log->save("mollie", "Creating the payment... $order_id");

        // Type here your custom HTML
        // use $payment->getPaymentUrl() as url for your payment link

        foreach ($methods as $method) {
            $output .= '<div style="line-height:40px; vertical-align:top">';
            $output .= '<img src="' . htmlspecialchars($method->image->size1x) . '" srcset="' . htmlspecialchars($method->image->size2x) . ' 2x"> ';
            $output .= htmlspecialchars($method->description) . ' (' . htmlspecialchars($method->id) . ')';
            $output .= '</div>';
        }
        $output .= "</div>";

        $output  .= "<div><form action='{$payment->getCheckoutUrl()}'>
            <button type='submit'>". __('Pay') ."</button></form></div>";

        return $output;
    }

    public static function getModuleConfigInputfields(array $data)
    {
        $inputfields = new InputfieldWrapper();

        // Test API
        $live_api_field = wire('modules')->get('InputfieldText');
        $live_api_field->name = 'test_api_key';
        $live_api_field->label = __("Test API Key");
        $live_api_field->notes = __("");
        if (isset($data['test_api_key'])) {
            $live_api_field->value = $data['test_api_key'];
        }

        $inputfields->add($live_api_field);

        // Live API
        $test_api_field = wire('modules')->get('InputfieldText');
        $test_api_field->name = 'api_key';
        $test_api_field->label = __("Live API Key");
        $test_api_field->notes = __("");
        if (isset($data['api_key'])) {
            $test_api_field->value = $data['api_key'];
        }

        $inputfields->add($test_api_field);

        // Select live or test API
        $check_api_field = wire('modules')->get('InputfieldCheckbox');
        $check_api_field->name = 'live_check';
        $check_api_field->checked = $data['live_check'];
        $check_api_field->label = __("Use Live API Key");
        $check_api_field->notes = __("If not selected, the test-api will be used. Keep in mind that you also have to activate the Live api on your Mollie dashboard");
        if (isset($data['live_check'])) {
            $check_api_field->value = $data['live_check'];
        }

        $inputfields->add($check_api_field);

        // HTTP Host url
        $httphost_field = wire('modules')->get('InputfieldURL');
        $httphost_field->name = 'httphost';
        $httphost_field->label = __("HTTP Host");
        $httphost_field->notes = __("");
        if (isset($data['httphost'])) {
            $httphost_field->value = $data['httphost'];
        }

        $inputfields->add($httphost_field);

        return $inputfields;
    }
}

 

  • Like 1
Link to comment
Share on other sites

  • 4 months later...
  • 2 years later...

Hi all, I am trying to use PaymentMollie with Padloper. Unfortunately I could not find any detailed information how to use this module. 

I have read the instructions on the GitHub page but I am struggling a bit with the integration. Are there any more detailed information available somewhere?

Kind regards, Christian

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...