Just posting here in case someone finds my post before wasting further time on this issue.
I have an app that uses authnet's API to take payments. I also use their fraud detection suite, specifically for many of the IP address-related filters (velocity, shipping mismatch, regional blocking, etc). I'd been conducting business like normal for some time, no issues. I recently had my web host enable IPv6 for my site to get the benefits it providers for mobile shoppers who often see faster performance over v6 due to not having to go through carrier NAT for IPv4 in high density areas. Everything seemed like it was working fine initially, but then I heard from a customer who could not pay.
After some debugging, we found that my payment code was populating the authorize.net API field customerIP / x_customer_ip with the customer's IP, which is obviously what it is intended for. I was populating it with both IPv4 and IPv6 addresses. The field is only usable for IPv4 ;if you pass IPv6, it will decline the transaction.
What's worse, is that since I have fraud suite features enabled, I have to pass an IP. So what to do for an IPv6 shopper? I can't pass a placeholder IPv4 address, such as always passing my site's own IP when the shopper is IPv6, because I'd end up triggering the velocity filter. So ended up having to go back to not having my site IPv6 enabled.
I found someone asking about IPv6 and that field as far back as 2011, and authnet still hasn't caught on. Comcast is IPv6-enabled nationwide, as is nearly every 4g cell network, so this isn't just a fringe customerbase I'm wanting to support.