Sending Native Token to Contract Fails

I used the openzeppelin wizard (link) to create a 'basic' contract with mint, burn and pause features. Added uniswap v2 contracts, functions related to uniswap. Deployed on polygon (matic) chain.

Sending ERC20 token (wmatic) to the contract succeeds but sending native token (matic) to the contract fails.

// SPDX-License-Identifier: Unlicensed

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
import "@openzeppelin/contracts/security/Pausable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol";
import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol";
import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol";
import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol";

pragma solidity ^0.8.4;


contract SOL1 is ERC20, ERC20Burnable, Pausable, Ownable {
    // DEBUG TESTING
    address immutable public zdebugUniswapFactory;
    address immutable public zdebugUniswapRouter;
    address public zdebugWETHaddress;
    address public zdebugUniswapPair;

    
    constructor() ERC20("SOLIDITY1", "SOL1") {
        zdebugUniswapFactory = 0x5757371414417b8C6CAad45bAeF941aBc7d3Ab32;
        zdebugUniswapRouter = 0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff;
        zdebugWETHaddress = 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270;
        
        _approve(address(this), address(zdebugUniswapFactory), type(uint256).max);
        _approve(address(this), address(zdebugUniswapRouter), type(uint256).max);
        //_approve(address(_msgSender()), address(zdebugUniswapFactory), type(uint256).max);
        //_approve(address(_msgSender()), address(zdebugUniswapRouter), type(uint256).max);
                

        _mint(address(this), 1000 * 10 ** decimals());
        _mint(address(owner()), 1000 * 10 ** decimals());
    }
    
    function zwithdrawNativeTokenFromContract() public onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

    function mint(address to, uint256 amount) public onlyOwner {
        _mint(to, amount);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount)
        internal
        whenNotPaused
        override
    {
        super._beforeTokenTransfer(from, to, amount);
    }
}

Transaction: https://polygonscan.com/tx/0x4bea7053ae8913b08e064686d17ca2dc18671d9ee70230964727919fda235bd7

Is this expected behaviour when using the open zeppeling contracts?

The contract missed "payable" option, added the following:
receive() external payable {}