Commit 92ac74f2 authored by wanjilong's avatar wanjilong

add: 支付订单调整优化

parent 9fe7b281
...@@ -30,6 +30,7 @@ class PayException extends BaseException ...@@ -30,6 +30,7 @@ class PayException extends BaseException
15 => '订单存在过期商品,不能支付', 15 => '订单存在过期商品,不能支付',
16 => '订单过期,不允许支付', 16 => '订单过期,不允许支付',
17 => '订单缺少过期时间,请联系管理员', 17 => '订单缺少过期时间,请联系管理员',
18 => '订单不存在,请重试',
]; ];
} }
...@@ -18,13 +18,14 @@ class PayOrder extends MysqlBase ...@@ -18,13 +18,14 @@ class PayOrder extends MysqlBase
self::beginTransaction(); self::beginTransaction();
try{ try{
$order = self::getMaster('*', ['order_id'=>$order_id, 'pay_channel'=>$pay_order['pay_channel']]); $order = self::getMaster('*', ['order_id'=>$order_id]);
if(empty($order)) { if(empty($order)) {
$cnt = self::insert($pay_order, ['rowCount'=>true]); $cnt = self::insert($pay_order, ['rowCount'=>true]);
if($cnt) { if($cnt) {
$order = $pay_order; $order = $pay_order;
} }
} }
self::commit(); self::commit();
}catch (\PDOException $e) { }catch (\PDOException $e) {
......
...@@ -50,6 +50,16 @@ class OrderController extends Base ...@@ -50,6 +50,16 @@ class OrderController extends Base
} }
public function chargesAction() {
$params = $this->getRequest()->getPost();
$order_id = $params['order_id'] ?? '';
$paySrv = new PayService();
$ret = $paySrv->pay_charges($order_id);
$this->success(['result'=>$ret]);
}
public function write_offAction() { public function write_offAction() {
$params = $this->params; $params = $this->params;
......
...@@ -122,6 +122,11 @@ class PayService ...@@ -122,6 +122,11 @@ class PayService
throw new PayException(['cus' => 4]); throw new PayException(['cus' => 4]);
} }
//不支持修改订单过期时间,再次调用支付服务
if(strtotime($pay_order['expire_time']) < time()) {
throw new PayException(['cus' => 16]);
}
if ($pay_order['pay_order_status'] == Dictionary::O_PAY_STATUS_PAYED) { if ($pay_order['pay_order_status'] == Dictionary::O_PAY_STATUS_PAYED) {
throw new PayException(['cus' => 5]); throw new PayException(['cus' => 5]);
} }
...@@ -170,13 +175,25 @@ class PayService ...@@ -170,13 +175,25 @@ class PayService
$ret['exist'] = true; $ret['exist'] = true;
} }
$channel_exist = false;
$channel = $this->getChannel($pay_method_id);
if(!empty($ret['charges']['data'])) {
//是否存在
foreach ($ret['charges']['data'] as $ch) {
if($ch['channel'] == $channel) {
$channel_exist = true;
}
}
}
//判断是否做过pay操作 charge //判断是否做过pay操作 charge
if(empty($ret['charge'])) { if($channel_exist == false) {
// 创建支付单 // 创建支付单
$payment = [ $payment = [
'charge_order_no'=> $pay_order['pay_order_id'], 'charge_order_no'=> $pay_order['pay_order_id'],
'charge_amount'=> $pay_order['pay_amount'], 'charge_amount'=> $pay_order['pay_amount'],
'channel'=> $this->getChannel($pay_method_id), 'channel'=> $channel,
'extra'=> $extra, 'extra'=> $extra,
]; ];
...@@ -290,6 +307,64 @@ class PayService ...@@ -290,6 +307,64 @@ class PayService
return ['pay_order_id' => $pay_order_id]; return ['pay_order_id' => $pay_order_id];
} }
/**
* @param $order_id
* @return array
* @throws BaseException
* @throws PayException
* 返回订单状态及订单渠道列表
*/
public function pay_charges($order_id) {
$pay_order = PayOrder::get('*', ['order_id'=>$order_id]);
if(empty($pay_order)) {
throw new PayException(['cus' => 18]);
}
$data = [
'status'=>'created',
'max_expire_time'=>$pay_order['expire_time'],
'list'=>[]
];
$max_expire_time = strtotime($pay_order['expire_time']);
if($max_expire_time < time()) {
$data["status"] = 'canceled';
}
if(empty($pay_order['third_order_id'])) {
return $data;
}
//paid、refunded、canceled、created
$ret = PingxxService::getInstance()->getOrder($pay_order['third_order_id']);
if (!empty($ret['error'])) {
throw new BaseException(['msg'=>$ret['error']['message'], 'code'=>'2301']);
}
$data["status"] = $ret["status"];
if(!empty($ret['charges']['data'])) {
//是否存在
foreach ($ret['charges']['data'] as $ch) {
$data["list"][] = [
'paid'=>$ch['paid'],
'refunded'=>$ch['refunded'],
'channel'=>$ch['channel'],
'time_expire'=>$ch['time_expire'],
];
if($max_expire_time < $ch['time_expire']) {
$max_expire_time = $ch['time_expire'];
}
}
}
$data['max_expire_time'] = date('Y-m-d H:i:s', $max_expire_time);
return $data;
}
/** /**
* @param $order_item_id * @param $order_item_id
* @param $life_account_id * @param $life_account_id
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment