NYCPHP Meetup

NYPHP.org

[nycphp-talk] E-Commerce Shopping Carts

(Margaret) Michele Waldman mmwaldman at optonline.net
Tue Sep 30 07:23:30 EDT 2008


Paul,

Are you writing a shopping cart from scatch.

I don't think this is the easiest way to implement a shopping cart.

There are two open source shopping carts that I know about, oscommerce and
zencart.  Plus, there are many inexpensive shopping carts.

Zencart handles the payment notifications.  If you use a non supported or
merchant that doesn't have a plugin available, you have to write some of the
gateway yourself, but all of the email notifications come canned.

As far as the payment gateway.  If I'm correct, via curl or whatever you
sent connect to the merchant and request a payment, they return a success or
non success value, after which you can send an email.

You get the response right away, so I don't know why you want to poll.

Here's so snippets of code:

	  $QBMS_XML_Credit_Card_Charge = '<?xml version="1.0"?>
	                                <?qbmsxml version="2.0"?>
	
<QBMSXML>
	
<SignonMsgsRq>'.$QBMS_Auth.'
	
</SignonMsgsRq>
	
<QBMSXMLMsgsRq>
	
<CustomerCreditCardChargeRq>
	
<TransRequestID>'.$QBMS_TransRequestID.'</TransRequestID>
	
<CreditCardNumber>'.$_POST['CreditCardNumber'].'</CreditCardNumber>
	
<ExpirationMonth>'.$_POST['ExpirationMonth'].'</ExpirationMonth>
	
<ExpirationYear>'.$_POST['ExpirationYear'].'</ExpirationYear>
	
<IsECommerce>true</IsECommerce>
	
<Amount>'.$_POST['Amount'].'</Amount>
	
<NameOnCard>'.$_POST['CreditCardOwner'].'</NameOnCard>
	
<CreditCardAddress>'.$_POST['CreditCardAddress'].'</CreditCardAddress>
	
<CreditCardPostalCode>'.$_POST['CreditCardPostalCode'].'</CreditCardPostalCo
de>
	
<CardSecurityCode>'.$_POST['CardSecurityCode'].'</CardSecurityCode>
	
</CustomerCreditCardChargeRq>
	
</QBMSXMLMsgsRq>
	
</QBMSXML>';
   $QBMS_chargeRq = $this->qbms_call($QBMS_ApplicationPath,
$QBMS_XML_Credit_Card_Charge, MODULE_PAYMENT_QBMS_SSL_CERT);

	// Get the statusCode
   $QBMS_ChargeRq_Status = 1;
   $posLeft  = strpos($QBMS_chargeRq, "<CustomerCreditCardChargeRs
statusCode=\"")+strlen("<CustomerCreditCardChargeRs statusCode=\"");
   $posRight = strpos($QBMS_chargeRq, "\"", $posLeft+1);
   $QBMS_ChargeRq_Status = intval(substr($QBMS_chargeRq, $posLeft,
$posRight-$posLeft));

	// QBMS will return statusCode="0" or "10100" if charge was
successful
	switch ($QBMS_ChargeRq_Status)
    {
	  case 0:
	  case 10100:
		$this->qbms_charge_success($QBMS_chargeRq);
		return;
      case 10301:
	  case 10400:
	  case 10401:
	  case 10402:
	  case 10404:
	  case 10407:
	  case 10409:
		$error = MODULE_PAYMENT_QBMS_TEXT_DECLINED;
		break;
	  default:
		$error = MODULE_PAYMENT_QBMS_TEXT_SYSTEM_ERROR . " " .
$QBMS_ChargeRq_Status . " <!--" . $QBMS_chargeRq . "-->";
		break;
    }
	$payment_error_return = 'payment_error=' . $this->code . '&error=' .
urlencode($error) . '&qbms_cc_owner=' . urlencode($_POST['CreditCardOwner'])
. '&qbms_cc_expires_month=' . $_POST['ExpirationMonth'] .
'&qbms_cc_expires_year=' . $_POST['ExpirationYear'];
    zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT,
$payment_error_return, 'SSL', true, false));
  }


  function qbms_call($qbmsURL, $qbmsRequest, $qbmsCert) {
    global $_POST;
    $PHP_Header[] = "Content-type: application/x-qbmsxml";
	$PHP_Header[] = "Content-length: ".strlen($qbmsRequest);

	$clientURL = curl_init();

	curl_setopt($clientURL, CURLOPT_POST, 1);
	curl_setopt($clientURL, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($clientURL, CURLOPT_CUSTOMREQUEST, 'POST');
	curl_setopt($clientURL, CURLOPT_URL, $qbmsURL);
//	curl_setopt($clientURL, CURLOPT_TIMEOUT, 60);
	curl_setopt($clientURL, CURLOPT_HTTPHEADER, $PHP_Header);
	curl_setopt($clientURL, CURLOPT_POSTFIELDS, $qbmsRequest);
	curl_setopt($clientURL, CURLOPT_VERBOSE, 1);
	curl_setopt($clientURL, CURLOPT_SSL_VERIFYPEER, 1);
//	if (MODULE_PAYMENT_QBMS_HOSTEDORDESKTOP == 'Hosted') {
//	    curl_setopt($clientURL, CURLOPT_SSLCERT, $qbmsCert);
//    }
   curl_setopt($clientURL, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
//??
   curl_setopt ($clientURL, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
   curl_setopt ($clientURL,
CURLOPT_PROXY,"http://proxy.shr.secureserver.net:3128");
//    if (MODULE_PAYMENT_QBMS_IP_ADDRESS != '') {
//    	curl_setopt($clientURL, CURLOPT_INTERFACE,
MODULE_PAYMENT_QBMS_IP_ADDRESS);
//    }

	$qbmsResponse = curl_exec($clientURL);

	if ((curl_errno($clientURL)) || ($qbmsResponse == 1)) {

      $curlerrno = curl_errno($clientURL);
	  $error = MODULE_PAYMENT_QBMS_TEXT_SYSTEM_ERROR;
      $payment_error_return = 'payment_error=' . $this->code . '&error=' .
urlencode($error) . '&qbms_cc_owner=' . urlencode($_POST['CreditCardOwner'])
. '&qbms_cc_expires_month=' . $_POST['ExpirationMonth'] .
'&qbms_cc_expires_year=' . $_POST['ExpirationYear'];
      zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT,
$payment_error_return, 'SSL', true, false));
	} else {
	  curl_close($clientURL);
	}

	return $qbmsResponse;
  }

Michele

-----Original Message-----
From: talk-bounces at lists.nyphp.org [mailto:talk-bounces at lists.nyphp.org] On
Behalf Of PaulCheung
Sent: Tuesday, September 30, 2008 4:49 AM
To: NYPHP Talk
Subject: [nycphp-talk] E-Commerce Shopping Carts

Hi,

Can anybody help?? I have run into a major problem, I do not understand how 
shopping carts work. I have tried asking technical support of the likes of 
PayPal, while they are all very knowledgeable businesswise, they are not PHP

developers. I was told that I should check my email periodically.

As a shopping cart newbie using PHP, I am lost. I understand it is develop 
myself or much the easiest and best way is to use a shopping cart, which I 
agree with.

>From a merchant's point of view, here is what I want. Once payment has been

made and confirmed, I want a token confirming payment (payment info) to be 
sent to my site and then, without manual intervention, I want to dispatch a 
confirmation email to the customer an invoice and then the goods/services to

the customer.

Is there a way of  automatically polling for this info?? Is there a better 
of doing things??

Cheers

Paul 

_______________________________________________
New York PHP Community Talk Mailing List
http://lists.nyphp.org/mailman/listinfo/talk

NYPHPCon 2006 Presentations Online
http://www.nyphpcon.com

Show Your Participation in New York PHP
http://www.nyphp.org/show_participation.php




More information about the talk mailing list