Uniswap router swapExactTokensForETHSupportingFeeOnTransferTokens() gives error

When I try to invoke
IUniswapV2Router02.swapExactTokensForETHSupportingFeeOnTransferTokens(), I am getting this below error. Can someone please help what is the issue.
Fail with error ‘TransferHelper: TRANSFER_FROM_FAILED’

Below is code snippet.

function swapTokensForBNB(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> wBNB
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of BNB
            path,
            address(this),
            block.timestamp
        );
           
    }

 function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "BEP20: approve from the zero address");
        require(spender != address(0), "BEP20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }	
	
	
When I dig into uniswap router code, i could see that the below stack trace

IUniswapV2Router02.swapExactTokensForETHSupportingFeeOnTransferTokens() 
=> 
TransferHelper.safeTransferFrom(path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amountIn); 
=> 
function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

Hi rhat! Welcome to Open Zeppelin. In the future please use proper code formatting by placing code between two ``` . Refer to How do I ask a good question?

The code piece you posted is the basic way of doing that and should work provided that your liquidity pool is set up correctly.

Are you sure that you have set up the LP Pair and have provided liquidity to it?

Hi @Yoshiko ,
Thank you so much for your response. Below is my current LP details

0.002 WBNB = 1000 BEP20 Token.

And total supply is Quadrillion. (1000000000 * 10 ** 6 * 10 ** 9).
Currently I have tried to transfer 40,000 tokens which fails.
Do you see any issue with this set up.

Can you please post your entire code by linking us the contract address?

Are you using swap and liquify? I so you have too little BNB probably. Set that to false. If you are figuring out safemoon issues then visit PSA Regarding SafeMoon Forks on PancakeSwap - Transfers not working? Read This!

Below is the solution to this famous error:

It concludes that this is a design error of the ERC20 standard itself applied to contracts that make exchanges from other accounts. If I'm wrong, please correct me.

Does anyone know how to guide me on how to open a discussion on the subject, for possible improvements in this?