I've got a c# application that accepts credit cards and saves the profiles to authorize.net. It successfully charges the cards and successfully saves the profiles.
If the user wants to update all the information and re-enters their credit card number, expiration, and cvc, they can update their profile.
However, we want to be able to update the billTo information without updating the credit card information. Unfortunately, whenever I try calling the updateCustomerPaymentProfileRequest, I get the error that the payment information is required.
I can read the current profile, but the cardnumber and expiration dates are masked. I can unmask the expiration date but not the card number.
Unfortunately the call to updateCustomerPaymentProfileRequest requires paymentType and the getProfile call returns a masked payment type, and they don't seem to be interchangeable.
In fact if I even try to request the unmasked expiration date, it doesn't return it.
var request = new getCustomerPaymentProfileRequest();
request.customerProfileId = customerProfileId;
request.customerPaymentProfileId = paymentProfileId;
request.unmaskExpirationDate = true;
the payment info is a masked type, and the expiration date is masked.
Even if this gave me the unmasked expiration date though, I still don't have the credit card number, which I really don't even want as I just want to update the billTo.
Is this even possible? I found this article on authorize.net but they didn't actually answer the question, and the person who asked seems to have given up.
I was able to successfully update a payment profile using the masked credit card information. Here is the JSON requests and responses I used which hopefully points you in the right direction. I would post my code but I used PHP which won't be helpful for you.
CREATE CUSTOMER PROFILE
Request
Response
GET CUSTOMER PROFILE
Request
Response
UPDATE CUSTOMER PAYMENT PROFILE
Request
Response