sdk-php icon indicating copy to clipboard operation
sdk-php copied to clipboard

Get Customer Profile with merchantCustomerID

Open xzitlou opened this issue 4 years ago • 3 comments

I'm trying the API using this endpoint https://developer.authorize.net/api/reference/index.html#customer-profiles-get-customer-profile and in the Request Field information I see that I can send merchantCustomerId, but every time I tried it always return the error Failed to get customer profile information with id None

xzitlou avatar Jan 27 '21 20:01 xzitlou

I am trying the same query using the PHP SDK, but this time it returns

{
    "messages": {
        "resultCode": "Error",
        "message": [
            {
                "code": "E00040",
                "text": "The record cannot be found."
            }
        ]
    }
}

Here is an example of the request I am making. Not sure what is wrong:

<?php
use net\authorize\api\contract\v1 as AnetAPI;
use net\authorize\api\contract\v1\GetCustomerProfileIdsResponse;
use net\authorize\api\controller as AnetController;
use net\authorize\util\LogFactory;

// ...

$tmpFullLogFilePath = $this->generateTemporaryLogFilePath();

$logger = LogFactory::getLog(get_class($this));
$logger->setLogFile($tmpFullLogFilePath);

$merchantAuthentication = $this->getAuthenticator();

$request = new AnetAPI\GetCustomerProfileRequest();
$request->setMerchantAuthentication($merchantAuthentication);
$request->setMerchantCustomerId($merchantId); // <----- Use the merchantCustomerID instead of the customerProfileId
$controller = new AnetController\GetCustomerProfileController($request);

/** @var AnetAPI\GetCustomerProfileResponse $response */
$response = $controller->executeWithApiResponse($this->getEndpoint());
$result   = $this->evaluateAuthorizeNetResponse($response);

if ($result->isError()) {
    dump(file_get_contents($tmpFullLogFilePath));
    return $result;
}

The log captures the following contents:

 Wed, 26 May 2021 14:03:50 -0700 INFO : [execute] (/var/www/lf/vendor/authorizenet/authorizenet/lib/net/authorize/api/controller/base/ApiOperationBase.php : 114) - Request Creation Begin
 Wed, 26 May 2021 14:03:50 -0700 DEBUG : [execute] (/var/www/lf/vendor/authorizenet/authorizenet/lib/net/authorize/api/controller/base/ApiOperationBase.php : 115) - net\authorize\api\contract\v1\GetCustomerProfileRequest Object
(
    [customerProfileId:net\authorize\api\contract\v1\GetCustomerProfileRequest:private] => 
    [merchantCustomerId:net\authorize\api\contract\v1\GetCustomerProfileRequest:private] => 778156132
    [email:net\authorize\api\contract\v1\GetCustomerProfileRequest:private] => 
    [unmaskExpirationDate:net\authorize\api\contract\v1\GetCustomerProfileRequest:private] => 
    [includeIssuerInfo:net\authorize\api\contract\v1\GetCustomerProfileRequest:private] => 
    [merchantAuthentication:net\authorize\api\contract\v1\ANetApiRequestType:private] => net\authorize\api\contract\v1\MerchantAuthenticationType Object
        (
            [name:net\authorize\api\contract\v1\MerchantAuthenticationType:private] => xxxx
            [transactionKey:net\authorize\api\contract\v1\MerchantAuthenticationType:private] => xxxx
            [sessionToken:net\authorize\api\contract\v1\MerchantAuthenticationType:private] => 
            [password:net\authorize\api\contract\v1\MerchantAuthenticationType:private] => 
            [impersonationAuthentication:net\authorize\api\contract\v1\MerchantAuthenticationType:private] => 
            [fingerPrint:net\authorize\api\contract\v1\MerchantAuthenticationType:private] => 
            [clientKey:net\authorize\api\contract\v1\MerchantAuthenticationType:private] => 
            [accessToken:net\authorize\api\contract\v1\MerchantAuthenticationType:private] => 
            [mobileDeviceId:net\authorize\api\contract\v1\MerchantAuthenticationType:private] => 
        )

    [clientId:net\authorize\api\contract\v1\ANetApiRequestType:private] => sdk-php-2.0.2
    [refId:net\authorize\api\contract\v1\ANetApiRequestType:private] => 
)

 Wed, 26 May 2021 14:03:50 -0700 INFO : [execute] (/var/www/lf/vendor/authorizenet/authorizenet/lib/net/authorize/api/controller/base/ApiOperationBase.php : 126) - Request  Creation End
 Wed, 26 May 2021 14:03:50 -0700 INFO : [_sendRequest] (/var/www/lf/vendor/authorizenet/authorizenet/lib/net/authorize/util/HttpClient.php : 75) -  Url: https://apitest.authorize.net/xml/v1/request.api
 Wed, 26 May 2021 14:03:50 -0700 INFO : [_sendRequest] (/var/www/lf/vendor/authorizenet/authorizenet/lib/net/authorize/util/HttpClient.php : 77) - Request to AnetApi: 
{"getCustomerProfileRequest":{"merchantAuthentication":{"name":"xxxx","transactionKey":"xxxx"},"clientId":"sdk-php-2.0.2","merchantCustomerId":778156132}}
 Wed, 26 May 2021 14:03:50 -0700 INFO : [_sendRequest] (/var/www/lf/vendor/authorizenet/authorizenet/lib/net/authorize/util/HttpClient.php : 89) - Sending 'XML' Request type
 Wed, 26 May 2021 14:03:50 -0700 INFO : [_sendRequest] (/var/www/lf/vendor/authorizenet/authorizenet/lib/net/authorize/util/HttpClient.php : 94) - Sending http request via Curl
 Wed, 26 May 2021 14:03:50 -0700 INFO : [_sendRequest] (/var/www/lf/vendor/authorizenet/authorizenet/lib/net/authorize/util/HttpClient.php : 96) - Response from AnetApi: {"messages":{"resultCode":"Error","message":[{"code":"E00040","text":"The record cannot be found."}]}}

One of the last lines of the log shows the JSON request body. If I use that exact request body through Postman, it works:

2021-05-26 16_18_18

Thanks.

jdavidzapatab avatar May 26 '21 21:05 jdavidzapatab

Initially I thought the issue was due to the Authorize.net API having an issue when invoked through the PHP SDK. But it seems the actual issue is that,. right after creating an Authorize.net Customer record including a custom, Merchant ID, it is not possible to immediately get that customer record from Authorize.net through the API when searching by Merchant ID. It seems their service require some time (a few seconds at least) to allow this search mechanism.

jdavidzapatab avatar May 26 '21 22:05 jdavidzapatab

Initially I thought the issue was due to the Authorize.net API having an issue when invoked through the PHP SDK. But it seems the actual issue is that,. right after creating an Authorize.net Customer record including a custom, Merchant ID, it is not possible to immediately get that customer record from Authorize.net through the API when searching by Merchant ID. It seems their service require some time (a few seconds at least) to allow this search mechanism.

I believe this has been a known issue for years. I recall raising it when trying to use the CreateSubscriptionFromCustomerProfile example in the SDK. If you literally insert a 2-3 second wait() in the code it will then be available. It's obviously a backend limitation they have been unable or unwilling to resolve to date.

gregorysandoval avatar May 26 '21 22:05 gregorysandoval