【发布时间】:2014-06-16 22:45:02
【问题描述】:
我将 CCNow 支付网关与我的自定义 PHP 购物车一起使用。我的代码运行良好,只是当 CCNow 服务器响应我的页面时无法识别购物车会话。
在该响应中,CCNow 发送带有订单状态的订单详细信息,我的代码应该在此阶段保存或更新订单。
我通过直接在浏览器中输入页面来测试该页面,它运行良好。我还通过将订单 ID 存储在日志文件中来确保 CCNow 响应发生。
有什么想法吗?我的代码如下:
<?php
session_start();
include('includes/config.php');
include('includes/db.php');
$status = 0;
$x_status = '';
$x_orderid = '';
$x_orderdate = '';
$key = '12345';
if(isset($_REQUEST['x_status'])){
$x_status = strtolower($_REQUEST['x_status']);
}
if(isset($_REQUEST['x_orderid'])){
$x_orderid = $_REQUEST['x_orderid'];
}
if(isset($_REQUEST['x_orderdate'])){
$x_orderdate = $_REQUEST['x_orderdate'];
}
$str = $x_orderid . '^' . $x_status . '^' . $x_orderdate . '^' . $key;
$hash = md5($str);
if(($x_status == 'pending') || ($x_status == 'test')){
$status = 1;
}
$order_exists = false;
$sql = "SELECT id FROM orders WHERE method = 'CCNow' and x_orderid = '" . $x_orderid . "' LIMIT 1";
$result = mysql_query($sql);
while ( $value = mysql_fetch_array($result) ){
$order_exists = true;
}
if($order_exists){ // update order
$sql = "UPDATE orders SET status = " . $status . " WHERE method = 'CCNow' and x_orderid = '" . $x_orderid . "'";
$result = mysql_query($sql);
}
else{ // add new order
if(isset($_SESSION["products"])){
$customer_id = $_SESSION['customer_id'];
$net = $_SESSION['cart_net'];
$shipping_cost = $_SESSION['cart_shipping_cost'];
$date = date("Y-m-d");
// save order
$sql = "INSERT INTO orders(customer_id, date, method, status, net, shipping_cost, x_orderid) ";
$sql.= "VALUES($customer_id, '$date', 'CCNow', $status, $net, $shipping_cost, '$x_orderid')";
$result = mysql_query($sql);
$order_id = mysql_insert_id($GLOBALS['connection']);
// save order details
foreach ($_SESSION["products"] as $cart_itm){
$product_id = $cart_itm["ID"];
$product_code = $cart_itm["code"];
$product_qty = $cart_itm["qty"];
$product_price = $cart_itm["price"];
$subtotal = ($cart_itm["price"]*$cart_itm["qty"]);
$sql = "INSERT INTO order_details(order_id, product_id, price, qty, net) ";
$sql.= "VALUES($order_id, $product_id, $product_price, $product_qty, $subtotal)";
$result = mysql_query($sql);
}
// unset cart sessions and redirect to success page
unset($_SESSION['cart_net']);
unset($_SESSION['cart_shipping_cost']);
unset($_SESSION['products']);
}
else{
file_put_contents('ccnowlog.txt', date('Y-m-d h s i') . 'Not seeing the session!!!', FILE_APPEND);
}
}
// This is an OK response to CCNow IMPORTANT
echo 'ok';
?>
【问题讨论】:
-
这只是处理响应的代码吗?请告诉我们对方:这里的代码你和CCNow谈话。 mysql_* 已弃用,请使用
PDO或MySQLi -
会话数据取决于用户,CCNow 服务器不会有会话 id,而用户有。如果上面是由 ccnow 服务器调用的,$_SESSION 将为空。您需要将购物车数据保存在会话以外的其他位置,可能是数据库。
标签: php integration session-variables payment-gateway