(PHP) Basic Usage


(Sample also available here)

The following PHP code will create a connection to the Web Service API, retrieve a product, and fill a collection on that product:

<?
  /* These constants can be replaced by any configuration your app needs to do. This just contains all the information
   * you need to connect to the web service and authenticate. */
  define("STORE_DOMAIN", "mystore.americommerce.com");
  define("API_USERNAME", "UserName");
  define("API_PASSWORD", "Password");
  define("SECURITY_TOKEN", "SecurityToken");

  // This namespace must be defined and cannot be changed.
  define("AC_NAMESPACE", "http://www.americommerce.com");

  /* Due to the nature of .NET SOAP Web Services, we have to create a subclass of the native PHP SoapClient and
   * override the way it handles namespaces. The default way the request is formatted is not interpreted by the
   * server correctly, especially when passing in a complex object as a parameter. */
  class ACSoapClient extends SoapClient {
    function __doRequest($request, $location, $action, $version) {
      $namespace = AC_NAMESPACE;

      $request = preg_replace('/<ns1:(\w+)/', '<$1 xmlns="'.$namespace.'"', $request, 1);
      $request = preg_replace('/<ns1:(\w+)/', '<$1', $request);
      $request = str_replace(array('/ns1:', 'xmlns:ns1="'.$namespace.'"'), array('/', 'xmlns="'.$namespace.'"'), $request);

      // parent call
      return parent::__doRequest($request, $location, $action, $version);
    }
  }

  // Create a hash containing the header information for authentication.
  $header_info = array(
    "UserName" => API_USERNAME,
    "Password" => API_PASSWORD,
    "SecurityToken" => SECURITY_TOKEN
  );

  try {
    // Create a new instance of the client pointing to the wsdl endpoint.
    $client = new ACSoapClient("https://".STORE_DOMAIN."/store/ws/AmeriCommerceDb.asmx?wsdl");

    // Create a new header object specifying the namespace, header object type, and hash containing the header details.
    $header = new SoapHeader(AC_NAMESPACE, "AmeriCommerceHeaderInfo", $header_info);

    // Set the header on the client so we can authenticate the request.
    $client->__setSoapHeaders($header);

    // Fetch a product by its ID from the API. Set this ID to something relevant for your store.
    $response = $client->Product_GetByKey(array("piitemID" => 1670));
    // The response is an object that has our result.
    $product = $response->Product_GetByKeyResult;

    // Fill a collection on the product, notice that the product itself is passed in here.
    $response = $client->Product_FillProductVariantCollection(array("poProductTrans" => $product));
    // We get back the same product with the collection filled.
    $product = $response->Product_FillProductVariantCollectionResult;
  }
  catch(Exception $e) {
    print_r($e);
  }

?>
How helpful was this article?
Number of questions: 0