/**
* 自动验证订单,防止掉单
*/
Public function paymentauto(){
$paystatus =false;
$result = require("api/pay/".$_GET['paychannel']."/AutoReceive.php");
//开启日志
$cache_dir = $_SERVER['DOCUMENT_ROOT'].'/Runtime/';
$cache_file = $cache_dir.'userFund.data';
if (!is_dir($cache_dir)) {
$fp = mkdir($cache_dir,0777,true);
}
if (!file_exists($cache_file)) {
$fp = fopen($cache_file, 'w+');
fclose($fp);
}
file_put_contents($cache_file, json_encode($result)."\n", FILE_APPEND);
/*$result['v_oid']="201402201404060027910";
$result['v_amount']="0.01";
$result['status']=true;
$result['callback']="ok";
*/
//开始事务
$_tran = M();
$_tran -> startTrans();
//定义状态判断变量,如果doCommit为真,则提交事务
$doCommit = true;
$AccountRecharge = M('AccountRecharge');
$map['trade_no'] = $result['v_oid'];
$accountrecharge = $AccountRecharge->where($map)->find();
if(!$accountrecharge){$doCommit = false;}
else file_put_contents($cache_file, '查询订单成功'.$AccountRecharge->getLastSql()."\n", FILE_APPEND);
if($accountrecharge['status']=="3"){
//更改订单状态
if($result['status']==true){
$data['status'] = '1';
}elseif ($result['status']==false) {
$data['status'] = '0';
}
unset($map);
$map['trade_no'] = $result['v_oid'];
$rs = $AccountRecharge->where($map)->save($data);
if(!$rs){$doCommit = false;}
else file_put_contents($cache_file, '改变订单状态成功'."\n", FILE_APPEND);
//更改用户账户
$Account = M('Account');
unset($map);
$map['mid'] = $accountrecharge['mid'];
$field = array('available,total');
$account = $Account->field($field)->where($map)->find();
if(!$account){$doCommit = false;}
else file_put_contents($cache_file, '查询用户账户成功'."\n", FILE_APPEND);
unset($data);
$dir = cache('Usite');
$recharge_online_fee_rate = $dir['member']['vip'][session(C(S_VIP))]['recharge_online_fee']['v'];
$data['available'] = $account['available'] + $result['v_amount']*(1-$recharge_online_fee_rate);
$data['total'] = $account['total'] + $result['v_amount']*(1-$recharge_online_fee_rate);
$rs = $Account->where($map)->save($data);
if(!$rs){$doCommit = false;}
else file_put_contents($cache_file, '更改用户账户成功'."\n", FILE_APPEND);
//添加资金日志
$mid = $accountrecharge['mid'];
$change['available_c'] = $result['v_amount'];
$change['total_c'] = $result['v_amount'];
$bodi = $this->account_log($mid,"RECHARGE_SUCCESS",$result['v_amount'],"0",$result['v_amount']*$recharge_online_fee_rate,"0",$change,"URL_RECHARGE",$result['v_oid']);
if(!$bodi){$doCommit = false;}
else file_put_contents($cache_file, '添加资金日志成功'."\n", FILE_APPEND);
}
//提交事务
if ($doCommit) {
$_tran -> commit();
echo $result['callback'];
} else {
$_tran -> rollback();
}
}
1.因为php是过程式的,很难调试,对post数据写入文件,方便查看数据变化
$cache_dir = $_SERVER['DOCUMENT_ROOT'].'/data/cache/';
$cache_file = $cache_dir.'userFund.data';
if (!is_dir($cache_dir)) {
$fp = mkdir($cache_dir,0744,true);
}
if (!file_exists($cache_file)) {
$fp = fopen($cache_file, 'w+');
fclose($fp);
}
file_put_contents($cache_file, json_encode($_POST));//将post数据输出的文件中
file_put_contents($cache_file, json_encode($_POST), FILE_APPEND);//对文件后追加文件
2.Dreamweaver将整个站点添加进去,查找整个项目中的字符串灰常方便,方便定位函数位置,ctrl+F.
3.phpstorm中的find_useges也很好找的函数调用。
4.Navicat for mysql中的全库查询(在数据库中查找),可以快熟定位想要的数据所在,了解表的功能。