0

Magento 2 Payment Method not showing in checkout page

app/code/payhere/payhere/registration.php

\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Payhere_Payhere',
__DIR__

);

app/code/payhere/payhere/etc/config.xml

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../Store/etc/config.xsd">
    <default>
        <payment>
                <payhere>
                <active>1</active>
                <title>PayHere</title>
                <order_status>pending_payment</order_status>
                <instructions>Instruction.</instructions>
                <title>PayHere</title>
                <payment_action>true</payment_action>
                <model>Payhere\Payhere\Model\Payhere</model>
                <group>offline</group>
            </payhere>
            <!-- payment-config -->
        </payment>
    </default>
</config>

app.code/payhere/payhere/etc/module.xml

   <?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
  <module name="Payhere_Payhere" setup_version="2.0.0">
  </module>

app/code/payhere/payhere/etc/payment.xml

<payment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="../../../Magento/Payment/etc/payment.xsd">
    <groups>
        <group id="offline">
            <label>Offline Payment Methods</label>
        </group>
    </groups>
    <methods>
        <method name="payhere">
            <allow_multiple_address>1</allow_multiple_address>
        </method>

    </methods>
</payment>

app/code/payhere/payhere/view/frontend/web/js/view/payment/payhere.js

define(
    [
        'uiComponent',
        'Magento_Checkout/js/model/payment/renderer-list'
    ],
    function (
        Component,
        rendererList
    ) {
        'use strict';
        rendererList.push(
            {
                type: 'payhere',
                component: 'Payhere_Payhere/js/view/payment/method-renderer/payhere-method'
            }
        );
        /** Add view logic here if needed */
        return Component.extend({});
    }
);

app/code/payhere/payhere/view/frontend/web/js/view/method-renderer/payhere-method.js

define(
    [
        'Magento_Checkout/js/view/payment/default',
        'mage/url'
    ],
    function (Component, url) {
        'use strict';

        return Component.extend({
            defaults: {
                template: 'Payhere_Payhere/payment/payhere'
            },
            redirectAfterPlaceOrder: false,
            /** Returns send check to info */
            getMailingAddress: function() {
                return window.checkoutConfig.payment.checkmo.mailingAddress;
            },
            afterPlaceOrder: function () {
               window.location.replace(url.build('payhere/payment/request'));
            },

        });
    }
);
  • could you please tell me the Magento 2 version? – Milan Chandro Jan 16 at 8:54
  • @MilanChandro magento version is 2.2.5 . This worked fine in version 2.1.16 – ashanr Jan 16 at 10:06
  • any error messages in the console for checkout page? – Milan Chandro Jan 16 at 10:10
  • @MilanChandro There is no any error in the console. Checkout/Money Order, Bank Transfer, Cash On Delivery, Purchase order and Zero Cart Checkout options are working. But none of the custom payment module are visible in the checkout page. Even Modules like Paypal, Stripe, Square, Authorized.net are not visible in checkout – ashanr Jan 16 at 10:12
0

app/code/Payhere/Payhere/etc/module.xml


<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Payhere_Payhere" setup_version="2.0.0"/>
</config>

app/code/Payhere/Payhere/etc/adminhtml/system.xml


<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
    <system>
        <section id="payment">
            <group id="payhere" translate="label" type="text" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="1">
                <label>PayHere</label>
                <field id="active" translate="label" type="select" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="0">
                    <label>Enabled</label>
                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
                </field>
                <field id="title" translate="label" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
                    <label>Title</label>
                </field>
                <field id="debug" translate="label" type="select" sortOrder="85" showInDefault="1" showInWebsite="1" showInStore="0">
                    <label>Debug</label>
                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
                </field>
                <field id="allowspecific" translate="label" type="allowspecific" sortOrder="130" showInDefault="9"
                       showInWebsite="1" showInStore="0">
                    <label>Payment From Applicable Countries</label>
                    <source_model>Magento\Payment\Model\Config\Source\Allspecificcountries</source_model>
                </field>
                <field id="specificcountry" translate="label" type="multiselect" sortOrder="140" showInDefault="1"
                       showInWebsite="1" showInStore="0">
                    <label>Payment From Specific Countries</label>
                    <source_model>Magento\Directory\Model\Config\Source\Country</source_model>
                </field>
                <field id="sort_order" translate="label" type="text" sortOrder="160" showInDefault="1" showInWebsite="1"
                       showInStore="0">
                    <label>Sort Order</label>
                    <frontend_class>validate-number</frontend_class>
                </field>
            </group>
        </section>
    </system>
</config>

app/code/Payhere/Payhere/etc/config.xml


<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
    <default>
        <payment>
            <payhere>
                <active>1</active>
                <title>PayHere</title>
                <order_status>pending_payment</order_status>
                <instructions>Instruction.</instructions>
                <title>PayHere</title>
                <payment_action>authorize</payment_action>
                <model>Payhere\Payhere\Model\Payhere</model>
                <group>offline</group>
            </payhere>
            <!-- payment-config -->
        </payment>
    </default>
</config>

app/code/Payhere/Payhere/Model/Payhere.php


<?php
namespace Payhere\Payhere\Model;

class Payhere extends \Magento\Payment\Model\Method\AbstractMethod
{
    /**
     * Payment method code
     *
     * @var string
     */
    protected $_code = 'payhere';

    /**
     * Send authorize request to gateway
     *
     * @param \Magento\Framework\DataObject|\Magento\Payment\Model\InfoInterface $payment
     * @param  float $amount
     * @return void
     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
     */
    public function authorize(\Magento\Payment\Model\InfoInterface $payment, $amount)
    {
        $payment->setAdditionalInformation('payment_type', $this->getConfigData('payment_action'));
    }
}

app/code/Payhere/Payhere/view/frontend/layout/checkout_index_index.xml


<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="checkout.root">
            <arguments>
                <argument name="jsLayout" xsi:type="array">
                    <item name="components" xsi:type="array">
                        <item name="checkout" xsi:type="array">
                            <item name="children" xsi:type="array">
                                <item name="steps" xsi:type="array">
                                    <item name="children" xsi:type="array">
                                        <item name="billing-step" xsi:type="array">
                                            <item name="component" xsi:type="string">uiComponent</item>
                                            <item name="children" xsi:type="array">
                                                <item name="payment" xsi:type="array">
                                                    <item name="children" xsi:type="array">
                                                        <item name="renders" xsi:type="array">
                                                            <!-- merge payment method renders here -->
                                                            <item name="children" xsi:type="array">
                                                                <item name="payhere" xsi:type="array">
                                                                    <item name="component" xsi:type="string">Payhere_Payhere/js/view/payment/payhere</item>
                                                                    <item name="methods" xsi:type="array">
                                                                        <item name="payhere" xsi:type="array">
                                                                            <item name="isBillingAddressRequired" xsi:type="boolean">true</item>
                                                                        </item>
                                                                    </item>
                                                                </item>
                                                            </item>
                                                        </item>
                                                    </item>
                                                </item>
                                            </item>
                                        </item>
                                    </item>
                                </item>
                            </item>
                        </item>
                    </item>
                </argument>
            </arguments>
        </referenceBlock>
    </body>
</page>

app/code/Payhere/Payhere/view/frontend/web/template/payment/payhere.html


<div class="payment-method" data-bind="css: {'_active': (getCode() == isChecked())}">
    <div class="payment-method-title field choice">
        <input type="radio"
               name="payment[method]"
               class="radio"
               data-bind="attr: {'id': getCode()}, value: getCode(), checked: isChecked, click: selectPaymentMethod, visible: isRadioButtonVisible()"/>
        <label data-bind="attr: {'for': getCode()}" class="label"><span data-bind="text: getTitle()"></span></label>
    </div>

    <div class="payment-method-content">
        <!-- ko foreach: getRegion('messages') -->
        <!-- ko template: getTemplate() --><!-- /ko -->
        <!--/ko-->
        <div class="payment-method-billing-address">
            <!-- ko foreach: $parent.getRegion(getBillingAddressFormName()) -->
            <!-- ko template: getTemplate() --><!-- /ko -->
            <!--/ko-->
        </div>
        <div class="checkout-agreements-block">
            <!-- ko foreach: $parent.getRegion('before-place-order') -->
            <!-- ko template: getTemplate() --><!-- /ko -->
            <!--/ko-->
        </div>
        <div class="actions-toolbar">
            <div class="primary">
                <button class="action primary checkout"
                        type="submit"
                        data-bind="
                        click: placeOrder,
                        attr: {title: $t('Place Order')},
                        enable: (getCode() == isChecked()),
                        css: {disabled: !isPlaceOrderActionAllowed()}
                        "
                        disabled>
                    <span data-bind="i18n: 'Place Order'"></span>
                </button>
            </div>
        </div>

    </div>
</div>

app/code/Payhere/Payhere/view/frontend/web/js/view/payment/payhere.js


define(
    [
        'uiComponent',
        'Magento_Checkout/js/model/payment/renderer-list'
    ],
    function (
        Component,
        rendererList
    ) {
        'use strict';
        rendererList.push(
            {
                type: 'payhere',
                component: 'Payhere_Payhere/js/view/payment/method-renderer/payhere'
            }
        );
        /** Add view logic here if needed */
        return Component.extend({});
    }
);

app/code/Payhere/Payhere/view/frontend/web/js/view/payment/method-renderer/payhere.js


define(
    [
        'Magento_Checkout/js/view/payment/default'
    ],
    function (Component) {
        'use strict';

        return Component.extend({
            defaults: {
                template: 'Payhere_Payhere/payment/payhere'
            },
            redirectAfterPlaceOrder: false,
            /** Returns send check to info */
            getMailingAddress: function() {
                return window.checkoutConfig.payment.checkmo.mailingAddress;
            },
            afterPlaceOrder: function () {
                window.location.replace(url.build('payhere/payment/request'));
            }
        });
    }
);
  • I tried your code but it is not showing on frontend – coderGeek Jun 18 at 18:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.