I am trying to follow the PHP example found in https://github.com/AuthorizeNet/sample-code-php.git example update-customer-payment-profile.php to update an existing payment profile's credit card expiration but the example is not clear on how to do it. The best it says is:
// For card information you can pass exactly what comes back from an GetCustomerPaymentProfile // if you don't need to update that info
Since I need to modify the card information I thought it would be a simple case of doing a getCreditCard()->setExpirationDate() on the payment information returned from the getCustomerPaymentProfile(). The editing appears to work but I cannot add the payment back to a new customerPaymentProfile without failing. Here is my code snippet:
// getting the existing PaymentProfile $request = new AnetAPI\GetCustomerPaymentProfileRequest(); $request->setMerchantAuthentication($merchantAuthentication) ->setRefId($refId) ->setCustomerProfileId($cpid) ->setCustomerPaymentProfileId($ppid); $controller = new AnetController\GetCustomerPaymentProfileController($request); $response = $controller->executeWithApiResponse( \net\authorize\api\constants\ANetEnvironment::SANDBOX); if (($response != null) && ($response->getMessages()->getResultCode() == "Ok") ) { $payment = $response->getPaymentProfile()->getPayment(); $payment->getCreditCard()->setExpirationDate($expDate); } else { errorReturn($response); } $paymentprofile = new AnetAPI\CustomerPaymentProfileExType(); $paymentprofile->setCustomerPaymentProfileId($ppid) ->setBillTo($billto) ->setPayment($payment);
The format of the $expDate is 'MMYY'. When I remove the setPayment() -no problems. Any thoughts?
Solved! Go to Solution.
02-15-2017 10:37 AM
Hi @wdbaker54,
The setPayment() function takes an instance of PaymentType, but what's returned by $response->getPaymentProfile()->getPayment(); is an instance of PaymentMaskedType. So, it's not quite as simple as getting the response and feeding it right back in. You'll probably have to be more explicit about it.
If you replaced your $controller section with the following, it should work:
$controller = new AnetController\GetCustomerPaymentProfileController($request); $response = $controller->executeWithApiResponse( \net\authorize\api\constants\ANetEnvironment::SANDBOX); if (($response != null) && ($response->getMessages()->getResultCode() == "Ok") ) { $payCard = new AnetAPI\CreditCardType(); $payCard->setCardNumber($response->getPaymentProfile()->getPayment()->getCreditCard()->getCardNumber()); $payCard->setExpirationDate($expDate); $payment = new AnetAPI\PaymentType(); $payment->setCreditCard($payCard);
02-15-2017 02:33 PM - edited 02-15-2017 02:34 PM
Hi @wdbaker54,
The setPayment() function takes an instance of PaymentType, but what's returned by $response->getPaymentProfile()->getPayment(); is an instance of PaymentMaskedType. So, it's not quite as simple as getting the response and feeding it right back in. You'll probably have to be more explicit about it.
If you replaced your $controller section with the following, it should work:
$controller = new AnetController\GetCustomerPaymentProfileController($request); $response = $controller->executeWithApiResponse( \net\authorize\api\constants\ANetEnvironment::SANDBOX); if (($response != null) && ($response->getMessages()->getResultCode() == "Ok") ) { $payCard = new AnetAPI\CreditCardType(); $payCard->setCardNumber($response->getPaymentProfile()->getPayment()->getCreditCard()->getCardNumber()); $payCard->setExpirationDate($expDate); $payment = new AnetAPI\PaymentType(); $payment->setCreditCard($payCard);
02-15-2017 02:33 PM - edited 02-15-2017 02:34 PM
I appreciate the help, Aaron. I was chasing my tail something fierce and couldn't understand the documentation since PHP is something I picked up this last couple years and using the ANetAPI is something in the last month - still learning!
02-15-2017 03:19 PM