Generally, you would want to configure it with Bitcoin Core and the relevant RPCs. The process would go like this: Customer goes to the payment page -> You generate a unique address for them and set a callback using Bitcoin Core's RPCs -> Listen for callbacks for X confirmations and subsequently confirm their transaction and send whatever goods you're selling.
The easy part is implementing this, but the difficult part is ensuring that it doesn't run into any errors, ie. Bitcoin Core crashing, attackers gaining access to your backend, etc, etc. The easiest way, by far is to just use BitPay as a POS and have them handle it for you. They do have integration with plenty of languages.
Do you really think that using BitPay is easiest? When I see those "third-party" bitcoin companies, which offers something for me as a programmer, I think that it all only becomes more complicated with them. (And worst is that usually they want money for all that complicated stuff: I may spend a lot of time to make it work, reading their documentations, and finally it still will not work, or would be too expensive to use).
You say that
"Generally, you would want to configure it with Bitcoin Core and the relevant RPCs. The process would go like this: Customer goes to the payment page -> You generate a unique address"
OK. Why do you offer to generate unique wallet-addresses for every transaction?
I myself was thinking recently about blockchain.info website, which provides all transactions for anyone. In the beginning I thought that I would ask a buyer to provide his "transaction ID" (and maybe also "FROM-wallet-address" from which he sent money, plus amount). But then I thought that there is one problem. It can happen with non-sincere users/buyers.
For example, some buyer is "too clever", and he understands that he can easily watch all transactions which happened with my destination "TO-wallet-address". I mean, suppose I don't generate wallet-addresses everytime for each transaction, for every user. So, any buyer (or even one who never bought anything on my site), can surf through blockchain.info, and see all previous transactions. And he can just copy-paste some transaction ID which is not his, claiming that it is his (writing its transaction-ID into some input box which I may provide on website for him for this exact order ID). So what can happen, is that some buyer can click "buy this", I give him always same TO-wallet-address (destination in my Bitcoin-Core wallet). Then he goes to list of all transaction which happened with my Destination-wallet-address, and copy paste some transaction-ID which has same amount (same amount which he has to pay, but didn't pay). So, if this is all done without any info like Name Surname etc (KYC - know your client), then he can misuse this openness of information, transactions list on site blockchain.info (or any similar site). Thus, my website/shop can make a mistake and think that he payed money for this order, but in fact it can be some other guy who made a transaction, payed for it honestly, (same amount of money, which, by the way, is not always easy to hack, maybe) - but he didn't have time to confirm his transaction-id by copy-pasting to website/shop into input-field.
Thus, problem can be with dishonest guys who can prened that it were them who payed, and we can never know if that were them or not them, because info in blockchain is anonymous.
So, as I can understand, this problem can be solved by generating new unique wallet-addresses each time for my Bitcoin-Core wallet (using RPC). OK, suppose, I have some my shop at some hosting company (yes, I have to pay to them each year, maybe 20$/year or maybe more). But more complicated here is to have additional always running computer, maybe laptop, which is somewhere at my home (or say office of web-shop), and it is always running Bitcoin-Core-CLI RPC on some IP address x.x.x.x:port. Ok, I understand that it maybe can a problem for security. I don't know. There seems to be special settings file for bitcoin-core cli/rpc, where I can create some user and password, so there seem to be no problem with security, and hacker should be not able to run any command in bitcoin rpc on that IP:port, without knowing login+password. For me bigger problem here seems to be that here in Ukraine we have war (Russia is attacking electric stations etc), so we can have electricity "black-outs", which means there can be some days or hours when there is totally no electricity, so even if I have laptop running bitcoin-RPC at that time, it will discharge after several hours (I don't have some big charging station). And I would need to reconnect to another ISP (Internet service provider), which claims to provide internet even when there is "black-out", but they also use some electricity generators from patrol etc, or some new technologies like optical fibre etc. And that would require to connect router also to some charging station / powerbank etc. And thus it is all more costly. But well, seem to be simpler that using some third-party company in between buyer and seller to do all this.
I have a question. Say, I would configure my bitcoin-core-cli-rpc to generate unique wallet-addresses for each transaction (so it is connected to unique buyer and his order-id, his goods/services there, payment amount etc). I don't understand what would happen to my wallet balance if I have multiple wallet-addresses?
Let's take a simple example. Suppose I sell some test / cheap service/good at my webshop. Price is 1$. Say, User1 registers, places order#1, and bitcoin-rpc generate unique wallet address A. Then he pays that 1$ (and some cents commision), and money goes to my wallet address A.
Then user2 registers, also creates order to buy serice/good for amount of 1$, for him again is generated unique destination (TO) wallet address, he sends 1$ to it, places his confirmation transaction ID (maybe it is not necessary if all wallet addresses are unique, so I can probably check them automatically through blockchain.info say, once every minute. yes, i think they have a limit of 100 such API calls within a minute, so maybe I'ld have to do that later to my Bitcoin Core CLI/RPC at my home/office computer). Anyway, say, user2 made a payment of 1$ to address B, payed some fee, and money goes to address B to my Bitcoin Core wallet.
Question is: if these two wallet addresses are unque, different, but belong to same wallet, does it mean I would see that my wallet now has 2$? I mean, is it like this, that say, I have one room (bank etc), but so many doors (many keys), so I can enter into it through any of doors/keys (wallet addresses), but total amount/balance / sum is same for each of these wallet-addresses?
I mean, if buyer2 will pay 1$ to wallet B, will I automatically have that 2nd dollar in wallet address A? (and vice versa)? Or I will have to send money from wallet B to wallet A (say, it is primary), and thus spend additional money / fee to send from each uniques wallet address (wallets B, C, D, E, F ...) - to wallet-A? How it works? If each wallet address has own unique separate money balance, which is not connected / united with other wallet address in same wallet, then it is not convenient/good enough, because it means I would have to pay to bitcoin network to send money from hundreds or maybe thousands of wallets addresses to wallet-A address, paying fee for each such additional transaction. If that is so, that one wallet would hold multiple balances (each wallet address has its own separate balance), then it makes services/goods sold on website even more expensive (and that extra cost/fee is to be included into price, which user pays to seller).