OpenZeppelin Contracts v3.1 included ERC1155.
The OpenZeppelin Contracts implementation uses a single uri for the contract. The uri can include the string {id} which clients must replace with the actual token ID, in lowercase hexadecimal (with no 0x prefix) and leading zero padded to 64 hex characters.
This is done to reduce gas costs. Though it means that unlike in ERC721 where we could specify ipfs://ipfs/QmTy8w65yBXgyfG2ZBg5TrfB2hPjrDQH3RCQFJGkARStJb we need to use a URI that supports the {id} replacement scheme.