If I receive ether in a payable function on a my smart contract, is there any way to tell if the msg.sender is also capable of receiving ether short of sending a few wei back to the sender to see if it fails or not? (which is an expensive "fail safe" I think) Assume for example, I am collecting a deposit which should be returned if the requested service can't be performed.
It seems as if any address can be converted to an address payable, but that doesn't tell you whether or not the address is a contract that has no payable fallback function. In that case I'd like to revert the transaction so the value isn't collected in the first place.