代付合同在线支付流程详解

本文将详细介绍代付合同在线支付流程,并提供相关代码示例,帮助您了解系统处理流程。

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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录