Hi @jj7302,
Two transactions are required, one to approve an allowance and the second to call payIn
which then calls transferFrom
.
If you are creating a dapp, then you make both calls from web3. See: https://docs.openzeppelin.com/learn/deploying-and-interacting#interacting-programmatically
Example on how to use ERC20 token in another contract just uses the Truffle console for convenience to interact with the contracts.