代付合同 - 在线支付流程详解
代付合同在线支付流程详解
本文将详细介绍代付合同在线支付流程,并提供相关代码示例,帮助您了解系统处理流程。
1. 订单支付
1.1 用户选择代付合同,并确认订单信息。
1.2 用户选择支付方式,例如在线支付、支付宝支付等。
1.3 系统生成订单号和支付记录,并更新订单状态。
$payway_id = 0;
$data['third_party_type'] = 0;
$data['status'] = 0;
$data['payment_status'] = 0;
$data['payway_id'] = $payway_id;
if($payway_id == 0){
$data['payment_status'] = 1;
$data['status'] = 1;
$data['third_party_type'] = 0;
$data['third_party_serial_number'] = '';
$data['pay_time'] = date('Y-m-d H:i:s',time());
$data['pay_success_time'] = date('Y-m-d H:i:s',time());
$data['pay_success_time_int'] = time();
$data['pay_channel'] = 0;
//如果是线下支付,将订单状态改成已支付
$this->_changeOrderStatus($order_info['id'],"pay");
}
$data['paid_amount'] = $order_info['order_amount'];
$data['is_purchase_process'] = 0;
//添加支付记录
if(!M('order_payment_log')->add($data)){
M()->rollback();
$this->ajaxReturn(array('error'=>1,'msg'=>'支付记录失败'));
}
//生成合同号
$contract_no = $this->_getContractNo();
//保存支付日志
$arr_pay_log = array(
'order_id'=>$order_info['id'],
'payment_log_id'=>$data['id'],
'contract_no'=>$contract_no,
'pay_amount'=>$data['pay_amount'],
'pay_time'=>$data['pay_time'],
);
if(!M('order_pay_log')->add($arr_pay_log)){
M()->rollback();
$this->ajaxReturn(array('error'=>1,'msg'=>'支付记录失败'));
}
//更新支付记录
$data['contract_no'] = $contract_no;
//添加支付成功日志
$this->_addOrderLog($order_info['id'],$data['pay_time'],'订单在线支付成功!');
//更新订单支付方式
$this->_saveOrderPayway($order_info['id'],$payway_id);
//更新订单号
$info['order_no'] = $order_no;
M('order')->where('id='.$order_info['id'])->save($info);
//发送站内消息
D('Message')->sendMessage('支付成功',$order_info['user_id'],$order_info['user_id'],'您已支付成功!',1,$order_info['id']);
//发送短信给供应商
$this->_send_sms_to_supplier($order_info);
M()->commit();
$this->ajaxReturn(array('error'=>0,'msg'=>'支付成功','data'=>$data));
2. 支付宝支付
2.1 用户选择支付宝支付。
2.2 系统跳转到支付宝支付页面。
2.3 用户确认支付后,支付宝将支付结果通知系统。
2.4 系统验证支付结果,并更新订单状态。
//支付宝支付
public function alipay(){
$order_id = intval($_REQUEST['order_id']);
$is_app = intval($_REQUEST['is_app']);
$order_info = M('order')->where('id='.$order_id.' and user_id='.$this->user_id.' and payment_status=0')->find();
if(!$order_info){
$this->ajaxReturn(array('error'=>1,'msg'=>'订单不存在'));
}
//生成订单号
$order_no = $this->_getOrderNo($order_info);
//计算支付金额
$pay_amount = $order_info['order_amount'] - $order_info['paid_amount'];
//添加支付日志
$data = array(
'order_id'=>$order_info['id'],
'user_id'=>$order_info['user_id'],
'pay_amount'=>$pay_amount,
'pay_type'=>1,
'create_time'=>date('Y-m-d H:i:s',time())
);
M()->startTrans();
if(!M('order_payment_log')->add($data)){
M()->rollback();
$this->ajaxReturn(array('error'=>1,'msg'=>'支付记录失败'));
}
//保存支付日志
$arr_pay_log = array(
'order_id'=>$order_info['id'],
'payment_log_id'=>$data['id'],
'pay_amount'=>$data['pay_amount'],
'pay_time'=>$data['create_time'],
);
if(!M('order_pay_log')->add($arr_pay_log)){
M()->rollback();
$this->ajaxReturn(array('error'=>1,'msg'=>'支付记录失败'));
}
//更新订单支付方式
$this->_saveOrderPayway($order_info['id'],1);
//更新订单号
$info['order_no'] = $order_no;
M('order')->where('id='.$order_info['id'])->save($info);
M()->commit();
$this->ajaxReturn(array('error'=>0,'msg'=>'支付成功','data'=>$data));
}
3. 支付结果处理
3.1 系统收到支付宝的支付结果通知。
3.2 系统验证支付结果的真实性。
3.3 系统更新订单状态为已支付。
3.4 系统发送支付成功通知给用户。
3.5 系统发送支付成功通知给供应商。
总结
代付合同在线支付流程主要包括订单支付、支付方式选择、支付结果处理等环节。系统通过代码逻辑,确保支付过程的安全性和可靠性,并及时通知用户和供应商支付结果。
相关代码示例仅供参考,具体实现方式可能需要根据实际情况进行调整。
原文地址: https://www.cveoy.top/t/topic/lilp 著作权归作者所有。请勿转载和采集!