Magento: Configuring Orbital Chase Paymentech Gateway

May 23, 2009 09:52 by admin

Magento Commerce, is a direct response to the emerging new needs of today's online merchants. More than any feature or functionality what our clients really needs is "flexibility" is done through the magento.

We have a lot of payment gateways today to integrate with our e-commerce application. Here we see how to integrate one of the leading Gateway providers CHASE Payment Tech Gateway with Magento Commerce.

 

1. Creating CHASE Payment Module

The CHASE Payment Module is included as Magento Commerce Extension, by using Magento Module Creator. Using Module Creator the Payment Module template for both Administrator and Client Section will get added.

Magento Module Creator Orbital Chase Paymentech Gateway

The module will get created and integrated into our existing magento site by specifying the parameters properly as mentioned above. The parameters are Name Space, Module, Magento Root Directory, Design Interface and Design.

 

1.1 Installing Module Creator

In order to download, visit Module Creator page in Magento Wiki.

After dowloading, to install the Module Creator, copy the index.php file into a Blank folder on your webserver. You have to put it in it’s own folder so that the index file does not conflict with other index files. Example: mysite.com/module_creator/

Open the module creator index page in your web browser, and fill in the desired module information. If you enter your Magento directory, the module creator will attempt to install the module directly into Magento, so file permissions must be set correctly for this to happen. If your file permissions are incorrect, or you do not want the module installed right away, you can leave the Magento Directory blank, and the module creator will create the module in a folder called 'new', and place it under module creator’s folder.

Please note that if you enter in your magento directory to install to you must have the correct path. Let’s say that you have Magento installed here:
http://www.my_site.com/magento/
And you have the Module Creator installed here:
http://www.my_site.com/module_creator/
This means that the path that you would need to enter in the Module Creator is this:
../magento
The ‘..’ signifies one directory up.

The new payment gateway gets installed in the /App/Core/Code/local folder with default folder right permission without disturbing the existing payment gateways. 

For more information on Module Creator visit,
http://www.magentocommerce.com/wiki/custom_module_with_custom_database_table

Note:
Once the new payment module installed properly, go to the /var/cache folder and delete all the files inside the folder and then run the application, now the new changes get reflected.

 

2. CHASE Module in Administrator Section

Now we will add the Chase Paymentech Module to the administration section, so that we can update the Merchant ID, Terminal ID and Gateway URL as seen in the below screen.

The fields configured in administration section can be customized in the system.xml file located at the /App/Core/Code/Local/Mage/newmodule/etc folder.

Magento Orbital Chase Paymentech Configuration

 

3. CHASE Module in Client Section

After the payment module is integrated in the Magento application using the Module Creator, the Orbtiz Chase Module on the Client Section will look like in the below screen.

Client section Payment Information fields can be modified directly at, App/design/frontend/default/example-module/template/payment/form/cc.phtml

 

4. Payment Processing with CHASE

Once the Chase module payment process is integrated in the client section, the paymentmethod.php will do the backend process like checking the card details by sending to the Chase Paymentech and return the response from the Chase.

The paymentmethod.php is located in the new module created by Module Creator, at /app/local/CHASE_Paymentech/Orbitz/Model/PaymentMethod.php,

You can download the code from the below link.

PaymentMethod.zip (2.95 kb)

The PHP code will explain you the process of reading the card information from the payment page and post it to the Chase using the payment gateway and receive the response back from the Chase.

 

4.1. Specifing the Payment Gateway URL

In the code we are using CURL to receive payment gateway response so we need to enable the extension=php_curl.dll in php.ini. Update the php.ini as per the requirement and restart the server.

Payment Gateway URL for Production –
'https://orbital1.paymentech.net'
'https://orbital2.paymentech.net'
 
Payment Gateway URL for Test –
'https://orbitalvar2.paymentech.net/authorize'

$value = Mage::getStoreConfig('payment/ Orbitz_Paymentech/cgi_url');
if (!$value || $value === false) {
  return 'https://orbital1.paymentech.net';
}
return $value;

The Authorize and Capture event is done on the each order process. The Credit Card is get processed the specified amount sent as XML Request. The xml request was constructed as below,

$xml="";
$xml .= "";
$xml .= "";
$xml .= "EC";
$xml .= "AC";
$xml .= "".htmlentities(trim($this->getConfigData('bin_no')),ENT_QUOTES, 'UTF-8')."";
$xml .= "".htmlentities(trim($this->getConfigData('merchant_id')),ENT_QUOTES, 'UTF-8')."";
$xml .= "".htmlentities(trim($this->getConfigData('terminal_id')),ENT_QUOTES, 'UTF-8')."";
$xml .= "".htmlentities(trim($payment->getCcType()),ENT_QUOTES, 'UTF-8')."";
$xml .= "".htmlentities(trim($payment->getCcNumber()),ENT_QUOTES, 'UTF-8')."";
$xml .= "".htmlentities(trim($exp),ENT_QUOTES, 'UTF-8')."";
if(($payment->getCcType()=='VI') || ($payment->getCcType()=='DI')) {
  $xml .= "1";
}
$xml .= "".htmlentities(trim($payment->getCcCid()),ENT_QUOTES, 'UTF-8')."";
$xml .= "".htmlentities(trim($billing->getPostcode()),ENT_QUOTES, 'UTF-8')."";
$xml .= "".htmlentities(trim($billing->getStreet(1)),ENT_QUOTES, 'UTF-8')."";
$xml .= "".htmlentities(trim($billing->getCity()),ENT_QUOTES, 'UTF-8')."";
$xml .= "CA";
$xml .= "".htmlentities(trim($billing->getFirstname()),ENT_QUOTES, 'UTF-8')."";
$xml .= "".htmlentities(trim($order->getIncrementId()),ENT_QUOTES, 'UTF-8')."";
$xml .= "".htmlentities(trim($amt),ENT_QUOTES, 'UTF-8')."";
$xml .= "AC";
$xml .= "";
$xml .= "";
$xml .= "";

The request is sent as CURL post to Chase is as follows,

$http = new Varien_Http_Adapter_Curl();
$config = array('timeout' => 30);
$http->setConfig($config);

$header= "POST /AUTHORIZE HTTP/1.0\r\n"; // HTTP/1.1 should work fine also
$header.= "MIME-Version: 1.0\r\n";
$header.= "Content-type: application/PTI40\r\n";
$header.= "Content-length: " .strlen($xml) . "\r\n";
$header.= "Content-transfer-encoding: text\r\n";
$header.= "Request-number: 1\r\n";
$header.= "Document-type: Request\r\n";
$header.= "Interface-Version: Test 1.4\r\n";
$header.= "Connection: close \r\n\r\n";
$header.= $xml;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$this->getApiGatewayUrl());
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);

The Chase response will get parsed from xml to array format and validate the response by each parameter as per the Chase Certification_WS document.

Chase will request you the code to scrutinize before approval. They will look through the parameters that you are sending in the Request, and how you are parsing their Response & its error codes.

 


Magento: Configuring Orbital Chase Paymentech Gateway

May 23, 2009 09:52 by admin

Magento Commerce, is a direct response to the emerging new needs of today's online merchants. More than any feature or functionality what our clients really needs is "flexibility" is done through the magento.

We have a lot of payment gateways today to integrate with our e-commerce application. Here we see how to integrate one of the leading Gateway providers CHASE Payment Tech Gateway with Magento Commerce.

 

1. Creating CHASE Payment Module

The CHASE Payment Module is included as Magento Commerce Extension, by using Magento Module Creator. Using Module Creator the Payment Module template for both Administrator and Client Section will get added.

Magento Module Creator Orbital Chase Paymentech Gateway

The module will get created and integrated into our existing magento site by specifying the parameters properly as mentioned above. The parameters are Name Space, Module, Magento Root Directory, Design Interface and Design.

 

1.1 Installing Module Creator

In order to download, visit Module Creator page in Magento Wiki.

After dowloading, to install the Module Creator, copy the index.php file into a Blank folder on your webserver. You have to put it in it’s own folder so that the index file does not conflict with other index files. Example: mysite.com/module_creator/

Open the module creator index page in your web browser, and fill in the desired module information. If you enter your Magento directory, the module creator will attempt to install the module directly into Magento, so file permissions must be set correctly for this to happen. If your file permissions are incorrect, or you do not want the module installed right away, you can leave the Magento Directory blank, and the module creator will create the module in a folder called 'new', and place it under module creator’s folder.

Please note that if you enter in your magento directory to install to you must have the correct path. Let’s say that you have Magento installed here:
http://www.my_site.com/magento/
And you have the Module Creator installed here:
http://www.my_site.com/module_creator/
This means that the path that you would need to enter in the Module Creator is this:
../magento
The ‘..’ signifies one directory up.

The new payment gateway gets installed in the /App/Core/Code/local folder with default folder right permission without disturbing the existing payment gateways. 

For more information on Module Creator visit,
http://www.magentocommerce.com/wiki/custom_module_with_custom_database_table

Note:
Once the new payment module installed properly, go to the /var/cache folder and delete all the files inside the folder and then run the application, now the new changes get reflected.

 

2. CHASE Module in Administrator Section

Now we will add the Chase Paymentech Module to the administration section, so that we can update the Merchant ID, Terminal ID and Gateway URL as seen in the below screen.

The fields configured in administration section can be customized in the system.xml file located at the /App/Core/Code/Local/Mage/newmodule/etc folder.

Magento Orbital Chase Paymentech Configuration

 

3. CHASE Module in Client Section

After the payment module is integrated in the Magento application using the Module Creator, the Orbtiz Chase Module on the Client Section will look like in the below screen.

Client section Payment Information fields can be modified directly at, App/design/frontend/default/example-module/template/payment/form/cc.phtml

 

4. Payment Processing with CHASE

Once the Chase module payment process is integrated in the client section, the paymentmethod.php will do the backend process like checking the card details by sending to the Chase Paymentech and return the response from the Chase.

The paymentmethod.php is located in the new module created by Module Creator, at /app/local/CHASE_Paymentech/Orbitz/Model/PaymentMethod.php,

You can download the code from the below link.

PaymentMethod.zip (2.95 kb)

The PHP code will explain you the process of reading the card information from the payment page and post it to the Chase using the payment gateway and receive the response back from the Chase.

 

4.1. Specifing the Payment Gateway URL

In the code we are using CURL to receive payment gateway response so we need to enable the extension=php_curl.dll in php.ini. Update the php.ini as per the requirement and restart the server.

Payment Gateway URL for Production –
'https://orbital1.paymentech.net'
'https://orbital2.paymentech.net'
 
Payment Gateway URL for Test –
'https://orbitalvar2.paymentech.net/authorize'

$value = Mage::getStoreConfig('payment/ Orbitz_Paymentech/cgi_url');
if (!$value || $value === false) {
  return 'https://orbital1.paymentech.net';
}
return $value;

The Authorize and Capture event is done on the each order process. The Credit Card is get processed the specified amount sent as XML Request. The xml request was constructed as below,

$xml="";
$xml .= "";
$xml .= "";
$xml .= "EC";
$xml .= "AC";
$xml .= "".htmlentities(trim($this->getConfigData('bin_no')),ENT_QUOTES, 'UTF-8')."";
$xml .= "".htmlentities(trim($this->getConfigData('merchant_id')),ENT_QUOTES, 'UTF-8')."";
$xml .= "".htmlentities(trim($this->getConfigData('terminal_id')),ENT_QUOTES, 'UTF-8')."";
$xml .= "".htmlentities(trim($payment->getCcType()),ENT_QUOTES, 'UTF-8')."";
$xml .= "".htmlentities(trim($payment->getCcNumber()),ENT_QUOTES, 'UTF-8')."";
$xml .= "".htmlentities(trim($exp),ENT_QUOTES, 'UTF-8')."";
if(($payment->getCcType()=='VI') || ($payment->getCcType()=='DI')) {
  $xml .= "1";
}
$xml .= "".htmlentities(trim($payment->getCcCid()),ENT_QUOTES, 'UTF-8')."";
$xml .= "".htmlentities(trim($billing->getPostcode()),ENT_QUOTES, 'UTF-8')."";
$xml .= "".htmlentities(trim($billing->getStreet(1)),ENT_QUOTES, 'UTF-8')."";
$xml .= "".htmlentities(trim($billing->getCity()),ENT_QUOTES, 'UTF-8')."";
$xml .= "CA";
$xml .= "".htmlentities(trim($billing->getFirstname()),ENT_QUOTES, 'UTF-8')."";
$xml .= "".htmlentities(trim($order->getIncrementId()),ENT_QUOTES, 'UTF-8')."";
$xml .= "".htmlentities(trim($amt),ENT_QUOTES, 'UTF-8')."";
$xml .= "AC";
$xml .= "";
$xml .= "";
$xml .= "";

The request is sent as CURL post to Chase is as follows,

$http = new Varien_Http_Adapter_Curl();
$config = array('timeout' => 30);
$http->setConfig($config);

$header= "POST /AUTHORIZE HTTP/1.0\r\n"; // HTTP/1.1 should work fine also
$header.= "MIME-Version: 1.0\r\n";
$header.= "Content-type: application/PTI40\r\n";
$header.= "Content-length: " .strlen($xml) . "\r\n";
$header.= "Content-transfer-encoding: text\r\n";
$header.= "Request-number: 1\r\n";
$header.= "Document-type: Request\r\n";
$header.= "Interface-Version: Test 1.4\r\n";
$header.= "Connection: close \r\n\r\n";
$header.= $xml;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$this->getApiGatewayUrl());
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);

The Chase response will get parsed from xml to array format and validate the response by each parameter as per the Chase Certification_WS document.

Chase will request you the code to scrutinize before approval. They will look through the parameters that you are sending in the Request, and how you are parsing their Response & its error codes.

 


Magento Menu Customization with Product List

February 3, 2009 06:02 by Rafeek

Magento main menu is construed based on the hierarchy like,

 Root Category → Category → Sub-Category

We will customise the menu to show the Products of a category/su-bcategory along with its hierarchy in dropdown menu as seen below.

    

This is a good feature if you have less products in a website.

In order to implement the above structure, we need to modify the navigation.php file of drawItem() function like below. The navigation.php is available in the following location,

app/code/core/Mage/Catalog/Block/Navigation.php

The code is,

Public function drawItem($category, $level=0, $last=false){
 $html = '';
 if (!$category->getIsActive()) {
  return $html;
 }
 $children = $category->getChildren();
 $hasChildren = $children && $children->count();
 /***** Getting Product List Start ******/
 $cur_category = Mage::getModel('catalog/category')->load($category->getId());
 $_productCollection = Mage::getResourceModel('catalog/product_collection')->addCategoryFilter($cur_category)->setOrder('position', 'ASC');
 $cnt=1;
 $hasProduct1=$_productCollection->count();
 $phtmlChildren='';
 if($hasProduct1>=1){
  $l=$level+1;
  foreach ($_productCollection AS $_product){
   $cur_product = Mage::getModel('catalog/product')->load($_product->getId());
   if ($cur_product->getStatus()){
    $phtmlChildren.= '<li';
    if($cnt==$hasProduct1) {
     $phtmlChildren.= ' class="level'.$l;
     $phtmlChildren.= ' nav-'.$this->htmlEscape($cur_product->getName()).' last';
    }
    else {
     $phtmlChildren.= ' class="level'.$l;
     $phtmlChildren.= ' nav-'.$this->htmlEscape($cur_product->getName());
    }
    $phtmlChildren.= '">'."\n";
    $phtmlChildren.= ' <a href="/'.$cur_product->getUrlPath() . '.html">'. $this->htmlEscape($cur_product->getName()) . '</a>'."\n";
    $phtmlChildren.= '</li>';
    $cnt=$cnt+1;
   }
  }
 }
 /***** Getting Product List End ******/
 $html.= '<li';
 if ($hasChildren || (!empty($phtmlChildren)))
  $html.= ' onmouseover="toggleMenu(this,1)" onmouseout="toggleMenu(this,0)"';
 $html.= ' class="level'.$level;
 $html.= ' nav-'.str_replace('/', '-', $category->getRequestPath());
 if ($this->isCategoryActive($category))
  $html.= ' active';
 if ($last)
  $html .= ' last';
 if ($hasChildren || (!empty($phtmlChildren))) {
  $cnt = 0;
  foreach ($children as $child)
   if ($child->getIsActive())
    $cnt++;
  $html .= ' parent';
 }
 $html.= '">'."\n";
 $html.= '<a href="'.$this->getCategoryUrl($category).'"><span>'.$this->htmlEscape($category->getName()).'</span></a>'."\n";
 $htmlChildren = '';
 if ($hasChildren) {
  $j = 0;
  foreach ($children as $child)
   if ($child->getIsActive())
    $htmlChildren.= $this->drawItem($child, $level+1, ++$j >= $cnt);
 }
 if ((!empty($htmlChildren)) || (!empty($phtmlChildren)))
  $html.= '<ul class="level' . $level . '">'."\n" .$htmlChildren .$phtmlChildren .'</ul>';
 $html.= '</li>'."\n";
 return $html;
}

The below lines in drawItem() function will fetch the current sub-category's product list based on the sub-category id. The $_productCollection has the list of product of selected subcategory by getting the id as $category->getId() function.

 $cur_category = Mage::getModel('catalog/category')->load($category->getId());
 $_productCollection = Mage::getResourceModel('catalog/product_collection')->addCategoryFilter($cur_category)->setOrder('position', 'ASC');

We will loop through them and generate the menu structure using <li></li> tag.

 


Apache Windows .htaccess - Password Protect Parent and Allow Sub Directory

August 6, 2008 08:10 by Ramana

To protect a directory in Apache web server, you need to create two files “.htaccess” and “.htpasswd”. “.htaccess” has to be placed under your designated directory. Once you place “.htaccess” under a directory, all its sub directories will inherit its parent properties. Each folder can have its own “.htaccess” file, if it needs to override or extend its parents’ properties.

“.htpasswd” is for storing Usernames and Passwords. It can be placed in the each directory or at a common place to maintain all logins at one place.

In “.htaccess” file you have to specify the path to “.htpasswd”. To protect a web folder the contents in “.htaccess” will be

AuthUserFile C:\wamp\passwords\.htpasswd
AuthName "This is Hasten secret area"
AuthType Basic
<Limit GET POST>
require valid-user
</Limit>

kick it on DotNetKicks.com  

To create “.htpasswd” file with Usernames and Passwords in it, you can find a utility “htpasswd.exe” under “<Apache’s installation directory>/bin” or you can create them online using Dave Child’s page.

In command prompt navigate to the above directory and type below command
htpasswd .htpasswd a-user-name

It creates “.htpasswd” file under “<Apache’s installation directory>/bin” itself. Repeat the same command to add more usernames. Cut the file from there and paste it under desired place as mentioned in the “.htaccess” – “AuthUserFile”.

If you create with Dave Child’s page, paste the text in notepad and save file as “.htpasswd” in desired directory as mentioned in the “.htaccess” – “AuthUserFile”.

Up to now we have seen password protecting a parent folder. Now by placing the following “.htaccess” file in sub folder will make it unprotected. The contents in “.htaccess” will be

Allow from all
Satisfy Any

That’s it! It’s simple!

Are you facing any problem, let’s do discuss here, post your comment.
Let me know your feedback.


Apache Windows .htaccess - Password Protect Parent and Allow Sub Directory

August 6, 2008 02:10 by admin

To protect a directory in Apache web server, you need to create two files “.htaccess” and “.htpasswd”. “.htaccess” has to be placed under your designated directory. Once you place “.htaccess” under a directory, all its sub directories will inherit its parent properties. Each folder can have its own “.htaccess” file, if it needs to override or extend its parents’ properties.

“.htpasswd” is for storing Usernames and Passwords. It can be placed in the each directory or at a common place to maintain all logins at one place.

In “.htaccess” file you have to specify the path to “.htpasswd”. To protect a web folder the contents in “.htaccess” will be

AuthUserFile C:\wamp\passwords\.htpasswd
AuthName "This is Hasten secret area"
AuthType Basic
<Limit GET POST>
require valid-user
</Limit>

kick it on DotNetKicks.com  

To create “.htpasswd” file with Usernames and Passwords in it, you can find a utility “htpasswd.exe” under “<Apache’s installation directory>/bin” or you can create them online using Dave Child’s page.

In command prompt navigate to the above directory and type below command
htpasswd .htpasswd a-user-name

It creates “.htpasswd” file under “<Apache’s installation directory>/bin” itself. Repeat the same command to add more usernames. Cut the file from there and paste it under desired place as mentioned in the “.htaccess” – “AuthUserFile”.

If you create with Dave Child’s page, paste the text in notepad and save file as “.htpasswd” in desired directory as mentioned in the “.htaccess” – “AuthUserFile”.

Up to now we have seen password protecting a parent folder. Now by placing the following “.htaccess” file in sub folder will make it unprotected. The contents in “.htaccess” will be

Allow from all
Satisfy Any

That’s it! It’s simple!

Are you facing any problem, let’s do discuss here, post your comment.
Let me know your feedback.


Apache Windows .htaccess - Password Protect Parent and Allow Sub Directory

August 6, 2008 02:10 by admin

To protect a directory in Apache web server, you need to create two files “.htaccess” and “.htpasswd”. “.htaccess” has to be placed under your designated directory. Once you place “.htaccess” under a directory, all its sub directories will inherit its parent properties. Each folder can have its own “.htaccess” file, if it needs to override or extend its parents’ properties.

“.htpasswd” is for storing Usernames and Passwords. It can be placed in the each directory or at a common place to maintain all logins at one place.

In “.htaccess” file you have to specify the path to “.htpasswd”. To protect a web folder the contents in “.htaccess” will be

AuthUserFile C:\wamp\passwords\.htpasswd
AuthName "This is Hasten secret area"
AuthType Basic
<Limit GET POST>
require valid-user
</Limit>

kick it on DotNetKicks.com  

To create “.htpasswd” file with Usernames and Passwords in it, you can find a utility “htpasswd.exe” under “<Apache’s installation directory>/bin” or you can create them online using Dave Child’s page.

In command prompt navigate to the above directory and type below command
htpasswd .htpasswd a-user-name

It creates “.htpasswd” file under “<Apache’s installation directory>/bin” itself. Repeat the same command to add more usernames. Cut the file from there and paste it under desired place as mentioned in the “.htaccess” – “AuthUserFile”.

If you create with Dave Child’s page, paste the text in notepad and save file as “.htpasswd” in desired directory as mentioned in the “.htaccess” – “AuthUserFile”.

Up to now we have seen password protecting a parent folder. Now by placing the following “.htaccess” file in sub folder will make it unprotected. The contents in “.htaccess” will be

Allow from all
Satisfy Any

That’s it! It’s simple!

Are you facing any problem, let’s do discuss here, post your comment.
Let me know your feedback.


Configuring Apache and IIS Web Servers on Single Machine for 80 Port

July 23, 2008 12:10 by Admin

Before on Windows 2003 server, this same configuration has been done successfully. Now on Windows 2008 Web edition tried today it worked too.

First need to download the Support Tools from Microsoft site. Of course it is Windows Server 2003 Service Pack 1 32-bit Support Tools, but we need “httpcfg” command mainly to do this exercise.

kick it on DotNetKicks.com

In order to configure IIS7 and Apache on same machine for port 80, need 2 or more IP addresses configured to your machines’ network card. So that we can use one for Apache and the other to IIS.

In windows 2008 to add more IP is to LAN card, open Control Panel → Network and Sharing Center → Manage network connections

On your ‘Local Area Connection’ right click and open properties. Double click on IP V4 option to open it properties. From ‘Advance’ dialog you can add more IPs to the machine.

To run the support tools commands, better to be in safer side, open the command prompt with administrator privileges.

Change your path to the support tools installed directory, normally

C:\Program Files\Support Tools>

Next execute these commands one after the other to set the IP

httpcfg set iplisten -i xxx.xxx.xxx.xxx

to confirm

httpcfg query iplisten

this will list the IPs that are binded to IIS.

then stop all HTTP services and restart

net stop http /y net start w3svc

This will stop

Windows Remote Management (WS-Management)
World Wide Web Publishing Service
Print Spooler
IIS Admin Service

But it may start only ‘World Wide Web Publishing Service’, so restart your machine once the above setup is done, that will start other dependent services.

In some cases, like DotNetPanel control panel it looks for local loop back URL 127.0.0.1. So need to add the same and restart the HTTP service again.

httpcfg set iplisten -i 127.0.0.1

In Apache’s httpd.conf you can make it listen to 80 port and add IP to your web site

<VirtualHost XXX.XXX.XXX.XXX:80>
    DocumentRoot C:/my.website.path/
    ServerName example.com
    ServerAlias *.example.com
</VirtualHost>

If you have any queries and like to discuss please post your comments below.