Jump to content

Recommended Posts

  • 6 months later...
Posted

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
  • 4 months later...
  • 2 years later...
Posted

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

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
×
×
  • Create New...