mirror of
https://gitee.com/ShopeX/OMS
synced 2026-04-02 21:55:50 +08:00
239 lines
9.6 KiB
PHP
239 lines
9.6 KiB
PHP
<?php
|
|
/**
|
|
* Copyright 2026 ShopeX (https://www.shopex.cn)
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
|
|
class ome_rpc_request_payment extends ome_rpc_request {
|
|
|
|
//支付状态
|
|
var $pay_status = array(
|
|
'succ'=>'SUCC',
|
|
'failed'=>'FAILED',
|
|
'cancel'=>'CANCEL',
|
|
'error'=>'ERROR',
|
|
'invalid'=>'INVALID',
|
|
'progress'=>'PROGRESS',
|
|
'timeout'=>'TIMEOUT',
|
|
'ready'=>'READY',
|
|
);
|
|
|
|
/**
|
|
* 添加交易收款单
|
|
* @access public
|
|
* @param int $payment_id 支付单主键ID
|
|
* @return boolean
|
|
*/
|
|
public function add($payment_id){
|
|
|
|
if(!empty($payment_id)){
|
|
|
|
$params = $this->payment_request_params($payment_id,'');
|
|
$shop_id = $params['shop_id'];
|
|
if($shop_id){
|
|
$shop_info = app::get('ome')->model('shop')->dump($shop_id,'name');
|
|
$title = '店铺('.$shop_info['name'].')添加[交易付款单(金额:'.$params['pay_fee'].')]订单号:'.$params['tid'].'付款单号:'.$params['payment_id'].')';
|
|
}else{
|
|
return false;
|
|
}
|
|
|
|
$callback = array(
|
|
'class' => 'ome_rpc_request_payment',
|
|
'method' => 'payment_add_callback',
|
|
);
|
|
|
|
$this->request('store.trade.payment.add',$params,$callback,$title,$shop_id);
|
|
}else{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function payment_add_callback($result){
|
|
return $this->callback($result);
|
|
}
|
|
|
|
/**
|
|
* 交易支付单请求
|
|
* @access public
|
|
* @param mixed $sdf 支付请求数据
|
|
* @return boolean
|
|
*/
|
|
public function payment_request($sdf=NULL){
|
|
|
|
if(!empty($sdf)){
|
|
|
|
$params = $this->payment_request_params('',$sdf);
|
|
$shop_id = $params['shop_id'];
|
|
if($shop_id){
|
|
$shop_info = app::get('ome')->model('shop')->dump($shop_id,'name');
|
|
$title = '店铺('.$shop_info['name'].')发起交易支付请求(金额:'.$params['pay_fee'].',支付方式:'.$params['payment_type'].')]订单号:'.$params['tid'];
|
|
}else{
|
|
return false;
|
|
}
|
|
|
|
$callback = array(
|
|
'class' => 'ome_rpc_request_payment',
|
|
'method' => 'payment_request_callback',
|
|
);
|
|
$this->request('store.trade.payment.add',$params,$callback,$title,$shop_id, 60);
|
|
}else{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function payment_request_callback($result){
|
|
|
|
//请求失败,还原订单支付状态,记录操作日志
|
|
$status = $result->get_status();
|
|
$oOrder = app::get('ome')->model('orders');
|
|
//$oApi_log = app::get('ome')->model('api_log');
|
|
$api_failObj = app::get('ome')->model('api_fail');
|
|
$oOperation_log = app::get('ome')->model('operation_log');
|
|
$callback_params = $result->get_callback_params();
|
|
$request_params = $result->get_request_params();
|
|
//$log_id = $callback_params['log_id'];
|
|
//$apilog_detail = $oApi_log->dump(array('log_id'=>$log_id), 'params');
|
|
//$apilog_detail = unserialize($apilog_detail['params']);
|
|
//$apilog_detail = $request_params;
|
|
|
|
$order_bn = $request_params['tid'];
|
|
$shop_id = $callback_params['shop_id'];
|
|
|
|
|
|
$order_detail = $oOrder->dump(array('order_bn'=>$order_bn,'shop_id'=>$shop_id), 'order_id,pay_status');
|
|
$order_id = $order_detail['order_id'];
|
|
$data = array(
|
|
'order_id' => $order_id,
|
|
'type' => 'payment'
|
|
);
|
|
if ($status != 'succ'){
|
|
if ($order_detail['pay_status'] == '8'){
|
|
//状态回滚,变成未付款/部分付款
|
|
kernel::single('ome_order_func')->update_order_pay_status($order_id, true, __CLASS__.'::'.__FUNCTION__);
|
|
//此订单出现在付款确认的“付款失败”标签页里,并在操作日志中记录“前端拒绝支付,付款失败”
|
|
$api_failObj->insert($data);
|
|
}elseif(in_array($order_detail['pay_status'],array('1','3'))){
|
|
$api_failObj->delete($data);
|
|
}
|
|
//操作日志
|
|
$oOperation_log->write_log('order_payment@ome',$order_id,'订单号:'.$order_bn.'发起支付请求,前端拒绝支付,付款失败');
|
|
}else{
|
|
$api_failObj->delete($data);
|
|
}
|
|
return $this->callback($result);
|
|
}
|
|
|
|
/**
|
|
* 更新支付单状态
|
|
* @access public
|
|
* @param int $payment_id 支付单主键ID
|
|
* @return boolean
|
|
*/
|
|
public function status_update($payment_id){
|
|
|
|
if(!empty($payment_id)){
|
|
$paymentObj = app::get('ome')->model('payments');
|
|
$orderObj = app::get('ome')->model('orders');
|
|
//支付单详情
|
|
$payment_detail = $paymentObj->dump(array('payment_id'=>$payment_id), 'order_id,shop_id,payment_bn,status');
|
|
$order = $orderObj->dump($payment_detail['order_id'], 'order_bn');
|
|
$params['tid'] = $order['order_bn'];
|
|
$params['payment_id '] = $payment_detail['payment_bn'];
|
|
$params['oid '] = '';#子订单id
|
|
$params['status'] = $this->pay_status($payment_detail['status']);
|
|
|
|
$callback = array(
|
|
'class' => 'ome_rpc_request_payment',
|
|
'method' => 'payment_status_update_callback',
|
|
);
|
|
|
|
$shop_id = $payment_detail['shop_id'];
|
|
if($shop_id){
|
|
$shop_info = app::get('ome')->model('shop')->dump($shop_id,'name');
|
|
$title = '店铺('.$shop_info['name'].')更新[交易支付单状态'.$params['status'].'](订单号:'.$order['order_bn'].'付款单号:'.$payment_detail['payment_bn'].')';
|
|
}else{
|
|
return false;
|
|
}
|
|
|
|
$this->request('store.trade.payment.status.update',$params,$callback,$title,$shop_id);
|
|
}else{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function payment_status_update_callback($result){
|
|
return $this->callback($result);
|
|
}
|
|
|
|
/**
|
|
* 组织支付单发起参数
|
|
* @access private
|
|
* @param number $payment_id 支付单ID
|
|
* @param mixed $sdf 原始请求数据
|
|
* @return ArrayObject 标准请求参数数据
|
|
*/
|
|
private function payment_request_params($payment_id='', $sdf=''){
|
|
|
|
$paymentObj = app::get('ome')->model('payments');
|
|
$paymentCfgObj = app::get('ome')->model('payment_cfg');
|
|
$orderObj = app::get('ome')->model('orders');
|
|
$memberObj = app::get('ome')->model('members');
|
|
if (!empty($payment_id)){
|
|
$payment_detail = $paymentObj->dump(array('payment_id'=>$payment_id), '*');
|
|
$order_id = $payment_detail['order_id'];
|
|
}elseif($sdf){
|
|
$payment_detail = $sdf;
|
|
$order_id = $payment_detail['order_id'];
|
|
$curr_time = time();
|
|
$payment_detail['t_begin'] = $curr_time;
|
|
$payment_detail['t_end'] = $curr_time;
|
|
$payment_detail['cur_money'] = $payment_detail['money'];
|
|
}
|
|
|
|
//支付信息
|
|
$cfg = $paymentCfgObj->dump(array('id'=>$payment_detail['payment']), 'pay_bn,custom_name');
|
|
$payment_detail['pay_bn'] = $cfg['pay_bn'];
|
|
$payment_detail['paymethod'] = $cfg['custom_name'];
|
|
//订单/会员信息
|
|
$order = $orderObj->dump($order_id, 'order_bn,member_id,shop_id');
|
|
$memberinfo = $memberObj->dump($order['member_id'],'uname,name');
|
|
|
|
$params = array();
|
|
$params['shop_id'] = $order['shop_id'];
|
|
$params['tid'] = $order['order_bn'];
|
|
$params['payment_id'] = $payment_detail['payment_bn'];
|
|
$params['buyer_id'] = $memberinfo['account']['uname'];
|
|
$params['seller_account'] = $payment_detail['account']?$payment_detail['account']:'';
|
|
$params['seller_bank'] = $payment_detail['bank']?$payment_detail['bank']:'';
|
|
$params['buyer_account'] = $payment_detail['pay_account']?$payment_detail['pay_account']:'';
|
|
$params['currency'] = $payment_detail['currency']?$payment_detail['currency']:'CNY';
|
|
$params['pay_fee'] = $payment_detail['money'];
|
|
$params['paycost'] = $payment_detail['paycost']?$payment_detail['paycost']:'';
|
|
$params['currency_fee'] = $payment_detail['cur_money']?$payment_detail['cur_money']:'';
|
|
$params['pay_type'] = $payment_detail['pay_type'];
|
|
$params['payment_tid'] = $payment_detail['pay_bn'];
|
|
$params['payment_type'] = $payment_detail['paymethod']?$payment_detail['paymethod']:'';
|
|
$params['t_begin'] = date("Y-m-d H:i:s",$payment_detail['t_begin']);
|
|
$params['t_end'] = $payment_detail['t_end'] ? date("Y-m-d H:i:s",$payment_detail['t_end']) : '';
|
|
$params['memo'] = $payment_detail['memo']?$payment_detail['memo']:'';
|
|
$params['status'] = $this->pay_status[$payment_detail['status']];
|
|
$params['payment_operator'] = kernel::single('desktop_user')->get_login_name();
|
|
$params['outer_no'] = $payment_detail['trade_no']?$payment_detail['trade_no']:'';#支付网关的内部交易单号
|
|
$params['modify'] = date("Y-m-d H:i:s", time());
|
|
return $params;
|
|
}
|
|
|
|
}
|