{
    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);
}
{
    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("http://www.americommerce.com", "AmeriCommerceHeaderInfo", $header_opts, false);
    // Set the header on the client instance so that we can authenticate.
    $client->__setSoapHeaders($header);
    // Grab the OrderID from the last order placed
    $lastorder = $client->Order_GetLastOrderID();
    // Fetch the order details
    $order = $client->Order_GetByKey(array("piorderID" => $lastorder->Order_GetLastOrderIDResult))->Order_GetByKeyResult;
    // Fetch the customer details from the order
    $customer = $client->Customer_GetByKey(array("picustomerID" => $order->customerID->Value))->Customer_GetByKeyResult;
    // Lets update some of the customer information
    $customer->lastName = "John";
    $customer->firstName = "Doe";
    $Customer->email = "*****@*****.**";
    // After updating the customer information, we need to save it on the server