|
|
|
@ -49,6 +49,7 @@ class AlipayTradeService extends CI_Controller
|
|
|
|
|
$this->load->model('AlipayTradePagePayContentBuilder');
|
|
|
|
|
$this->load->model('AlipayTradeWapPayContentBuilder');
|
|
|
|
|
$this->load->model('AlipayTradeQueryContentBuilder');
|
|
|
|
|
$this->load->model('AlipayTradeRefundContentBuilder');
|
|
|
|
|
$this->load->model('Alipay_note_model');
|
|
|
|
|
$this->load->model('Alipay_model');
|
|
|
|
|
$this->load->model('Group_model');
|
|
|
|
@ -105,7 +106,7 @@ class AlipayTradeService extends CI_Controller
|
|
|
|
|
"2021004129643221" => "trippest",
|
|
|
|
|
"2017092108849921" => "cht", // "CHT",
|
|
|
|
|
);
|
|
|
|
|
return $app_id ? $code_fundsource[$app_id] : 'cht';
|
|
|
|
|
return $app_id && isset($code_fundsource[$app_id]) ? $code_fundsource[$app_id] : 'cht';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function index()
|
|
|
|
@ -618,6 +619,9 @@ class AlipayTradeService extends CI_Controller
|
|
|
|
|
*/
|
|
|
|
|
public function send_refund($item, $old_ssje=null, $handpick)
|
|
|
|
|
{
|
|
|
|
|
if (empty($item->ALI_resultMsg)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// raw
|
|
|
|
|
$raw = json_decode($item->ALI_memo);
|
|
|
|
|
$parent_order = $raw->out_trade_no;
|
|
|
|
@ -861,15 +865,15 @@ class AlipayTradeService extends CI_Controller
|
|
|
|
|
/*!
|
|
|
|
|
* 查询退款
|
|
|
|
|
* @date 2019-04-24
|
|
|
|
|
* @param [type] $dealId 必须, 退款请求号.out_biz_no, 或原始交易订单号
|
|
|
|
|
* @param [type] $request_no 必须, 退款请求号.out_biz_no, 或原始交易订单号
|
|
|
|
|
* @param [type] $trade_no 必须, 原收款交易号, 和order_id不能同时为空
|
|
|
|
|
* @param [type] $order_id 必须, 原收款订单号, 和trade_no不能同时为空
|
|
|
|
|
*
|
|
|
|
|
* @ignore 只能查询API发起的退款, 后台的退款查不到
|
|
|
|
|
*/
|
|
|
|
|
public function query_refund($dealId=NULL,$trade_no=NULL, $order_id=NULL)
|
|
|
|
|
public function query_refund($request_no=NULL,$trade_no=NULL, $order_id=NULL)
|
|
|
|
|
{
|
|
|
|
|
$this->AlipayTradeQueryContentBuilder->setOutRequestNo($dealId);
|
|
|
|
|
$this->AlipayTradeQueryContentBuilder->setOutRequestNo($request_no);
|
|
|
|
|
$this->AlipayTradeQueryContentBuilder->setTradeNo($trade_no);
|
|
|
|
|
$this->AlipayTradeQueryContentBuilder->setOutTradeNo($order_id);
|
|
|
|
|
|
|
|
|
@ -878,7 +882,7 @@ class AlipayTradeService extends CI_Controller
|
|
|
|
|
$request->setBizContent ( $biz_content );
|
|
|
|
|
|
|
|
|
|
$response = $this->aopclientRequestExecute ($request);
|
|
|
|
|
// $response = $response->alipay_trade_fastpay_refund_query_response;
|
|
|
|
|
$response = $response->alipay_trade_fastpay_refund_query_response;
|
|
|
|
|
return $response;
|
|
|
|
|
// return $this->output->set_content_type('application/json')->set_output(json_encode($response));
|
|
|
|
|
}
|
|
|
|
@ -1378,6 +1382,152 @@ class AlipayTradeService extends CI_Controller
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 退款API *****************************************************************************************************
|
|
|
|
|
* ************************************************************************************************************
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
function call_refund($builder){
|
|
|
|
|
$biz_content=$builder->getBizContent();
|
|
|
|
|
|
|
|
|
|
$request = new AlipayTradeRefundRequest();
|
|
|
|
|
$request->setBizContent ( $biz_content );
|
|
|
|
|
|
|
|
|
|
$response = $this->aopclientRequestExecute ($request);
|
|
|
|
|
// var_dump($response);
|
|
|
|
|
$response = $response->alipay_trade_refund_response;
|
|
|
|
|
|
|
|
|
|
// log_message('error','test:rrr2 ' . __CLASS__ . PHP_EOL . var_export($response, 1));
|
|
|
|
|
return $response;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function Refund()
|
|
|
|
|
{
|
|
|
|
|
$this->set_merchant('cht');
|
|
|
|
|
$refund_payload = $this->input->post();
|
|
|
|
|
$res = array(
|
|
|
|
|
"errcode" => "0",
|
|
|
|
|
"errmsg" => "",
|
|
|
|
|
"result" => new stdClass(),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
$refundRequestId = $refund_payload['refund_id'];
|
|
|
|
|
$dealId = $refund_payload['res_id'];
|
|
|
|
|
$orderId = '';
|
|
|
|
|
// $originRow = $this->Alipay_note_model->note($dealId);
|
|
|
|
|
$originRows = [];
|
|
|
|
|
if (!empty($dealId)) {
|
|
|
|
|
$originRows = $this->online_note->get_note_where(['OPN_transactionId' => ['=', $dealId]]);
|
|
|
|
|
}
|
|
|
|
|
if (empty($originRows)) {
|
|
|
|
|
$orderId = $refund_payload['order_id'];
|
|
|
|
|
$orderId = trim($orderId);
|
|
|
|
|
$originRows = $this->online_note->get_note_where([
|
|
|
|
|
'OPN_rawOrderId' => ['=', $orderId],
|
|
|
|
|
'OPN_noticeType' => ['=', 'pay'],
|
|
|
|
|
'OPN_accountMethod' => ['=', 15015],
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
if (empty($originRows)) {
|
|
|
|
|
$res['errcode'] = '1';
|
|
|
|
|
$res['errmsg'] = '没有找到该笔交易';
|
|
|
|
|
return $this->output->set_content_type('application/json')->set_output(json_encode($res)); // test
|
|
|
|
|
}
|
|
|
|
|
$originRow = $originRows[0];
|
|
|
|
|
$dealId = $originRow->OPN_transactionId;
|
|
|
|
|
$dealAccount = $originRow->OPN_fundSource;
|
|
|
|
|
$paymentOrder = $originRow->OPN_rawOrderId;
|
|
|
|
|
$this->set_merchant($dealAccount ? $dealAccount : 'cht');
|
|
|
|
|
// * refund_amount 退款金额
|
|
|
|
|
$this->AlipayTradeRefundContentBuilder->setRefundAmount($refund_payload['amount']);
|
|
|
|
|
// * out_trade_no trade_no 二选一 传入. 优先取值trade_no
|
|
|
|
|
// - out_trade_no 订单支付时传入的商户订单号
|
|
|
|
|
// - trade_no 支付宝交易号
|
|
|
|
|
$this->AlipayTradeRefundContentBuilder->setTradeNo($dealId);
|
|
|
|
|
if ($paymentOrder) {
|
|
|
|
|
$this->AlipayTradeRefundContentBuilder->setOutTradeNo($paymentOrder);
|
|
|
|
|
}
|
|
|
|
|
// refund_reason len 256
|
|
|
|
|
$this->AlipayTradeRefundContentBuilder->setRefundReason($refund_payload['reason']);
|
|
|
|
|
// * out_request_no 退款请求号。 标识一次退款请求
|
|
|
|
|
$generateId = $refundRequestId ? $refundRequestId : str_replace('-', '', getGuid());
|
|
|
|
|
$this->AlipayTradeRefundContentBuilder->setOutRequestNo($generateId);
|
|
|
|
|
// [-] query_options 同步需要额外返回的信息字段 ["refund_detail_item_list"]
|
|
|
|
|
|
|
|
|
|
// var_dump($this->AlipayTradeRefundContentBuilder);
|
|
|
|
|
$response = $this->call_refund($this->AlipayTradeRefundContentBuilder);
|
|
|
|
|
$refund_res = $response;
|
|
|
|
|
$refund_res->id = $generateId;
|
|
|
|
|
$refund_res->custom_id = $refund_payload['custom_id'];
|
|
|
|
|
// $ret_status_mapped = array(
|
|
|
|
|
// "Y" => "1", // COMPLETED
|
|
|
|
|
// "N" => "3", // FAILED
|
|
|
|
|
// // "PENDING" => "2", // todo:
|
|
|
|
|
// // "CANCELLED" => "-1", // todo:
|
|
|
|
|
// );
|
|
|
|
|
// $refund_res->status = $response->code === '10000' ? '1' : '3';
|
|
|
|
|
$refund_res->status = $response->code === '10000' && $response->fund_change === 'Y' ? '1' : $response->code === '10000' ? '2' : '3';
|
|
|
|
|
$refund_res->refund_payload = $refund_payload;
|
|
|
|
|
// log_message('error','test: ' . __METHOD__ . ': ' . __LINE__ . ' ' . PHP_EOL . var_export($response, 1));
|
|
|
|
|
// var_dump($response);
|
|
|
|
|
$res['errcode'] = $response->code === '10000' ? '0' : '1';
|
|
|
|
|
|
|
|
|
|
// query result
|
|
|
|
|
// var_dump($generateId, $dealId, $paymentOrder);
|
|
|
|
|
$query_res = $this->query_refund($generateId, $dealId, $paymentOrder);
|
|
|
|
|
$refund_res->query_refund_result = $query_res;
|
|
|
|
|
$refund_res->status2 = isset($query_res->refund_status) && $query_res->refund_status === 'REFUND_SUCCESS' ? '1' : '3';
|
|
|
|
|
|
|
|
|
|
$res['result'] = $refund_res;
|
|
|
|
|
|
|
|
|
|
// if ($refund_res->status !== '3') {
|
|
|
|
|
if ($refund_res->status2 === '1') {
|
|
|
|
|
// $ALI_dealId,$ALI_orderId,$ALI_currencyCode,$ALI_orderAmount,$ALI_payAmount,$ALI_stateCode,$ALI_acquiringTime,$ALI_completeTime,$ALI_memo,$ALI_payType,$ALI_resultCode=null,$ALI_resultMsg=null,$ALI_payerName=null,$ALI_payerEmail=NULL, $check_exists=false
|
|
|
|
|
$this->Alipay_note_model->save_alipay(
|
|
|
|
|
strval($generateId)
|
|
|
|
|
,strval($paymentOrder)
|
|
|
|
|
,"CNY"
|
|
|
|
|
,"-" . strval($query_res->refund_amount)
|
|
|
|
|
,NULL
|
|
|
|
|
,NULL
|
|
|
|
|
,date('Y-m-d H:i:s')
|
|
|
|
|
,date('Y-m-d H:i:s')
|
|
|
|
|
,json_encode($query_res,JSON_UNESCAPED_UNICODE)
|
|
|
|
|
,'refund'
|
|
|
|
|
,NULL
|
|
|
|
|
,$refund_res->status2 === '1' ? 'TRADE_SUCCESS' : ''
|
|
|
|
|
,NULL
|
|
|
|
|
,NULL
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $this->output->set_content_type('application/json')->set_output(json_encode($res));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function query_refund_result()
|
|
|
|
|
{
|
|
|
|
|
// $res = array(
|
|
|
|
|
// "errcode" => "0",
|
|
|
|
|
// "errmsg" => "",
|
|
|
|
|
// "result" => new stdClass(),
|
|
|
|
|
// );
|
|
|
|
|
|
|
|
|
|
$request_no = $this->input->get_post('request_no');
|
|
|
|
|
$trade_no = $this->input->get_post('trade_no');
|
|
|
|
|
$order_id = $this->input->get_post('order_id');
|
|
|
|
|
$query_res = $this->query_refund($request_no, $trade_no, $order_id);
|
|
|
|
|
$status2 = isset($query_res->refund_status) && $query_res->refund_status === 'REFUND_SUCCESS' ? '1' : '3';
|
|
|
|
|
|
|
|
|
|
$originRow = $this->Alipay_note_model->note($request_no);
|
|
|
|
|
// $originRows = $this->online_note->get_note_where(['OPN_transactionId' => ['=', $dealId]]);
|
|
|
|
|
|
|
|
|
|
// $res['errcode'] = $query_res->code === '10000' ? '0' : '1';
|
|
|
|
|
// $res['result'] = $query_res;
|
|
|
|
|
// return $this->output->set_content_type('application/json')->set_output(json_encode($res));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function query_refund_queue()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|