2017-09-22 10 views
1

J'ai écrit quelques fonctions en utilisant PHP SDK de Authorize.Net qui ressemblent à ce qui suit:Mise en XML à partir d'une réponse à l'aide du SDK PHP Authorize.Net

public function getCustomerProfiles() { 
    $customerProfiles = array(); 

    // Before we can get customer profiles, we need to get a list of all customer id's. 
    $customerIdListRequest = new AnetAPI\GetCustomerProfileIdsRequest(); 
    $customerIdListRequest->setMerchantAuthentication(self::getMerchantAuth(Config::LOGIN_ID, Config::TRANSACTION_KEY)); 

    $customerIdListController = new AnetController\GetCustomerProfileIdsController($customerIdListRequest); 
    $customerIdListResponse = $customerIdListController->executeWithApiResponse(\net\authorize\api\constants\ANetEnvironment::SANDBOX); 

    if(($customerIdListResponse != null) && ($customerIdListResponse->getMessages()->getResultCode() == "Ok")) { 
     // TODO: Investigate warning about no method named getIds(). 
     foreach($customerIdListResponse->getIds() as $id) { 
      // Now we can get each customer profile. 
      $request = new AnetAPI\GetCustomerProfileRequest(); 
      $request->setMerchantAuthentication(self::getMerchantAuth(Config::LOGIN_ID, Config::TRANSACTION_KEY)); 
      $request->setCustomerProfileId($id); 

      $controller = new AnetController\GetCustomerProfileController($request); 
      $response = $controller->executeWithApiResponse(\net\authorize\api\constants\ANetEnvironment::SANDBOX); 

      if(($response != null) && ($response->getMessages()->getResultCode() == "Ok")) { 
       // TODO: Investigate warning about no method named getProfile() 

       // Add it to the array. 
       array_push($customerProfiles, $response->getProfile()->xml); 
      } else { 
       throw new \Exception($response->getMessages()->getMessage()); 
      } 

     } 
    } else { 
     throw new \Exception($customerIdListResponse->getMessages()->getMessage()); 
    } 

    return $customerProfiles; 
} 

Actuellement, je suis juste retourne un tableau de objets. Je préférerais obtenir la réponse XML brute. Cette fonctionnalité est-elle disponible via le SDK PHP d'Authorize.Net? Ou suis-je mieux d'utiliser quelque chose comme Guzzle et faire la demande manuellement?

+0

Pourquoi avez-vous besoin du XML brut? Qu'espérez-vous faire de ce que le SDK ne fait pas déjà pour vous? –

Répondre

1

En regardant le source code je pense que ce serait assez simple.

Regardez la méthode execute qui est appelée par executeWithApiResponse là. Voir xmlResponse? Juste besoin de stocker cela comme une propriété de classe (et ajouter un getter public), ou peut-être modifier la fonction pour prendre un argument supplémentaire en lui disant de retourner la réponse brute. Pourrait bidouiller, ou mieux encore, étendre cette classe ApiOperationBase (notez l'interface IApiOperation vous donne un aperçu à suivre).

Voyant que serializer aussi ...

$this->apiResponse = $this->serializer->deserialize($xmlResponse, $this->apiResponseType , 'xml'); 

pourrait peut-être faire quelque chose de plus élégant avec cela. Mais pas aussi clair que le chemin que j'ai décrit pour la première fois.

+0

L'édition de bibliothèques tierces est généralement considérée comme une mauvaise idée car elle vous empêche d'effectuer des mises à niveau/mises à jour car ces modifications ont tendance à se perdre en cas de rupture du code d'appel. Il suppose que quiconque effectue la mise à jour sait qu'il y a des modifications, où elles sont et ce qu'elles sont destinées à faire et que le code source mis à jour est toujours écrit de telle sorte que le même hack peut encore être accompli. –