Just like you said above, you want to execute payable(serviceFeeReceiver_).sendValue(serviceFee_);, but it seems like you do not assign a valid value to serviceFeeReceiver_, I think it is always equal to address(0).
I think the statement of address(0) is wrong since the serviceFeeReceiver is a valid address
my point is the "serviceFeeReceiver_" is bound to be in the constructor and will use an example address of 0x123
so in the payable code it should be "serviceFeeReceiver_"(eg. 0x123) will receive "serviceFee_"(eg. 0.1 ETH/BNB) upon deployment of the contract