支付完成后流程分析


public function response($request)
{

$return_res = array(
'info'=>'',
'status'=>false,
);
$payment = $GLOBALS['db']->getRow("select id,config from ".DB_PREFIX."payment where class_name='Alipay'");
$payment['config'] = unserialize($payment['config']);


/* 检查数字签名是否正确 */
ksort($request);
reset($request);

foreach ($request AS $key=>$val)
{
if ($key != 'sign' && $key != 'sign_type' && $key != 'code' && $key!='class_name' && $key!='act'&& $key!='ctl'&& $key!='city' )
{
$sign .= "$key=$val&";
}
}

$sign = substr($sign, 0, -1) . $payment['config']['alipay_key'];

if (md5($sign) != $request['sign'])
{
showErr($GLOBALS['payment_lang']["VALID_ERROR"]);
}

//支付账单号
$payment_notice_sn = $request['out_trade_no'];
//交易金额
$money = $request['total_fee'];
//外部支付交易号,如支付宝交易号
$outer_notice_sn = $request['trade_no'];

if ($request['trade_status'] == 'TRADE_SUCCESS' || $request['trade_status'] == 'TRADE_FINISHED' || $request['trade_status'] == 'WAIT_SELLER_SEND_GOODS'|| $request['trade_status'] == 'WAIT_BUYER_CONFIRM_GOODS'){
//获取支付账单
$payment_notice = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."payment_notice where notice_sn = '".$payment_notice_sn."'");
//获取商品订单,为了后面的订单类型判断
$order_info = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."deal_order where id = ".$payment_notice['order_id']);
require_once APP_ROOT_PATH."system/libs/cart.php";
//设置支付账单

$rs = payment_paid($payment_notice['id']);
if($rs)
{
//设置订单
$rs = order_paid($payment_notice['order_id']);
//返回true为全部支付
if($rs)
{
//开始更新相应的outer_notice_sn
$GLOBALS['db']->query("update ".DB_PREFIX."payment_notice set outer_notice_sn = '".$outer_notice_sn."' where id = ".$payment_notice['id']);
$this->auto_do_send_goods($payment_notice, $order_info);
if($order_info['type']==0) //普通商品
app_redirect(url("shop","payment#done",array("id"=>$payment_notice['order_id']))); //支付成功
else //充值
app_redirect(url("shop","payment#incharge_done",array("id"=>$payment_notice['order_id']))); //支付成功
}
else
{
//增加逻辑判断
if($order_info['pay_status'] == 2)
{
$this->auto_do_send_goods($payment_notice,$order_info);
if($order_info['type']==0)
app_redirect(url("shop","payment#done",array("id"=>$payment_notice['order_id']))); //支付成功
else
app_redirect(url("shop","payment#incharge_done",array("id"=>$payment_notice['order_id']))); //支付成功
}
else //跳转到支付页面
app_redirect(url("shop","payment#pay",array("id"=>$payment_notice['id'])));
}
}
else
{
$this->auto_do_send_goods($payment_notice,$order_info);
app_redirect(url("shop","payment#pay",array("id"=>$payment_notice['id'])));
}
}else{
//提示支付失败
showErr($GLOBALS['payment_lang']["PAY_FAILED"]);
}
}



//设置支付账单
function payment_paid($payment_notice_id)
{
$payment_notice_id = intval($payment_notice_id);
$now = get_gmtime();
//设置账单为已支付
$GLOBALS['db']->query('update '.DB_PREFIX.'payment_notice set pay_time = '.$now.',is_paid = 1 where id = '.$payment_notice_id.' and is_paid = 0');
$rs = $GLOBALS['db']->affected_rows();


if($rs)
{
//获取支付账单
$payment_notice = $GLOBALS['db']->getRow('select * from '.DB_PREFIX.'payment_notice where id = '.$payment_notice_id);
//获取支付方式
$payment_info = $GLOBALS['db']->getRow('select * from '.DB_PREFIX.'payment where id = '.$payment_notice['payment_id']);
//如果是代金券
if($payment_info['class_name'] == 'Voucher')
{
$GLOBALS['db']->query('update '.DB_PREFIX.'deal_order set pay_amount = pay_amount + '.$payment_notice['money'].',ecv_money = '.$payment_notice['money'].' where id = '.$payment_notice['order_id'].' and is_delete = 0 and order_status = 0 and ((pay_amount + '.$payment_notice['money'].' <= total_price) or '.$payment_notice['money'].'>=total_price)');
$order_incharge_rs = $GLOBALS['db']->affected_rows();
}
//如果是账户余额支付
elseif($payment_info['class_name'] == 'Account')
{
$GLOBALS['db']->query('update '.DB_PREFIX.'deal_order set pay_amount = pay_amount + '.$payment_notice['money'].',account_money = account_money + '.$payment_notice['money'].' where id = '.$payment_notice['order_id'].' and is_delete = 0 and order_status = 0 and pay_amount + '.$payment_notice['money'].' <= total_price');
$order_incharge_rs = $GLOBALS['db']->affected_rows();
}
else
{
$GLOBALS['db']->query('update '.DB_PREFIX.'deal_order set pay_amount = pay_amount + '.$payment_notice['money'].' where id = '.$payment_notice['order_id'].' and is_delete = 0 and order_status = 0 and pay_amount + '.$payment_notice['money'].' <= total_price');
$order_incharge_rs = $GLOBALS['db']->affected_rows();
}
$GLOBALS['db']->query('update '.DB_PREFIX.'payment set total_amount = total_amount + '.$payment_notice['money']." where class_name = '".$payment_info['class_name']."'");
if(!$order_incharge_rs)
{
require_once APP_ROOT_PATH.'system/libs/user.php';
$order_info = $GLOBALS['db']->getRow('select is_delete,order_status from '.DB_PREFIX.'deal_order where id = '.intval($payment_notice['order_id']));
if($order_info['is_delete']==1||$order_info['order_status']==1)
$msg = sprintf($GLOBALS['lang']['DELETE_INCHARGE'],$payment_notice['notice_sn']);
else
$msg = sprintf($GLOBALS['lang']['PAYMENT_INCHARGE'],$payment_notice['notice_sn']);
modify_account(array('money'=>$payment_notice['money'],'score'=>0),$payment_notice['user_id'],$msg);
$GLOBALS['db']->query('update '.DB_PREFIX.'deal_order set extra_status = 1 where is_delete = 0 and id = '.intval($payment_notice['order_id']));
}
send_payment_sms($payment_notice_id);
send_payment_mail($payment_notice_id);
}
return $rs;
}



//设置商品订单
function order_paid($order_id)
{
$order_id = intval($order_id);
$order = $GLOBALS['db']->getRow('select * from '.DB_PREFIX.'deal_order where id = '.$order_id);
if($order['pay_amount']>=$order['total_price'])
{
$GLOBALS['db']->query('update '.DB_PREFIX.'deal_order set pay_status = 2 where id ='.$order_id.' and pay_status <> 2');
$rs = $GLOBALS['db']->affected_rows();
if($rs)
{
order_paid_done($order_id);
$order = $GLOBALS['db']->getRow('select * from '.DB_PREFIX.'deal_order where id = '.$order_id);
if($order['pay_status']==2&&$order['after_sale']==0)
$result = true;
else
$result = false;
}
}
elseif($order['pay_amount']<$order['total_price']&&$order['pay_amount']!=0)
{
$GLOBALS['db']->query('update '.DB_PREFIX.'deal_order set pay_status = 1 where id ='.$order_id);
$result = false;
}
elseif($order['pay_amount']==0)
{
$GLOBALS['db']->query('update '.DB_PREFIX.'deal_order set pay_status = 0 where id ='.$order_id);
$result = false;
}
return $result;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值