【发布时间】:2016-07-14 11:26:08
【问题描述】:
我有下面的脚本来获取 $_REQUEST 数据来执行数据库进程,我可以通过在同一台服务器上为测试分配测试数据来毫无问题地执行这个脚本,但是在实时测试中,它总是显示 Transaction aborted! Specific transaction not found! 消息$trx !== FALSE 正在执行,我也可以检查数据库中的所有数据是否已更新,它会停在这里,其余的过程如 points deduction 和 create invoice 没有执行,我想知道为什么 TEST DATA 和 REAL TIME DATA 是在不同的行为和结果中,都在相同的服务器环境下测试,所有设置都相同,实时数据也适用于测试。
我需要有人帮忙看看我的代码有什么问题吗??
<?php
//Real time data get from payment provider
$refNo = $_REQUEST['RefNo'];
$transId = $_REQUEST['TransId'];
$authcode = $_REQUEST['AuthCode'];
$eStatus = $_REQUEST['Status'];
$signature = $_REQUEST['Signature'];
/* TEST DATA */
$eStatus = 1;
$refNo = '1468408036-0JSKZ8';
$transId = 'T108902465200';
$authcode = '3FL931320S778334X';
$signature = 'zVq0m7WKxyDuOKVdExIQbaoJCi0=';
if($eStatus == 1){
try {
// Check whether have such order in db
// If yes, get all relevant details for invoice generation.
$trx = $buyer->get_transaction_if_exist(filter_var($refNo, FILTER_SANITIZE_STRING), $mysqli);
if($trx !== FALSE){
//Update payment status in db
$postVars = array(
'payment_status' => 'completed',
'payment_id' => $transId,
'auth_code' => $authcode,
'signature' => $signature
);
if($buyer->update($postVars, 'pp_transaction', 'order_num', $refNo, $mysqli) === TRUE){
//perform Points deduction if found checkout with Points+Cash
$points_consume = $trx->total_points_consume;
$checkout_method = $trx->checkout_method;
$member_id = $trx->member_id;
//get existing Points
$cust = $buyer->get_customer_by_id($account_id, $mysqli);
$leftover_Points = $cust->my_points - $points_consume;
if($checkout_method == 2){
//update deduction points to member account
$arr1 = array('my_points' => $leftover_Points);
$buyer->update($arr1, 'members', 'acct_id', $member_id, $mysqli);
//log
$logVar = array(
'acct_id' => $account_id,
'order_num' => $refNo,
'point_consume' => $points_consume
);
$buyer->insert($logVar, 'points_consume_log', $mysqli);
}
//Generate invoice and send to buyer
require(WEBROOT.'/createInvoice.php');
require(WEBROOT.'/sendInvoice.php');
}
}else{
//Cannot found specific transaction record in DB
$payment_error = 'Transaction aborted!';
$error_desc = 'Specific transaction not found!';
}
} catch (Exception $e) {
$payment_error = $e->getMessage();
//die();
}
}
?>
查询是否存在这样的订单:
public function get_transaction_if_exist($refno, $mysqli)
{
if(empty($refno)){
return false;
}
$q = "SELECT * FROM `pp_transaction` ";
$q .= "WHERE order_num='".$refno."' ";
$q .= "AND payment_status IN('pending','failed')";
$sql = $mysqli->query($q);
if($sql->num_rows > 0){
$obj = $sql->fetch_object();
return $obj;
}
return false;
}
非常感谢。
【问题讨论】:
-
什么是 $buyer?你在哪里初始化的?
标签: php