feat: 微信查询接口

webht/payment
Lei OT 3 months ago
parent f5441607e8
commit a55f4f65cd

@ -608,6 +608,7 @@ class PaymentService extends CI_Controller {
$order_sn = empty($data['order_info']) ? 0 : $data['order_info']->COLI_SN; $order_sn = empty($data['order_info']) ? 0 : $data['order_info']->COLI_SN;
$data['group_accout_info'] = $data['group_accout_info'] =
$this->account_model->get_group_accout_info($order_sn, $pn_txn_id); $this->account_model->get_group_accout_info($order_sn, $pn_txn_id);
// var_dump($data);
echo json_encode($this->load->view('payment_gai_setting', $data, true)); echo json_encode($this->load->view('payment_gai_setting', $data, true));
} }
@ -1078,5 +1079,32 @@ class PaymentService extends CI_Controller {
return; return;
} }
/**
* 查询:交易/退款
*
* 从渠道接口查询
*
* @param Type $var Description
* @return type
* @throws conditon
**/
public function query()
{
$transaction_id = $this->input->get_post("transaction_id");
$account_type = $this->input->get_post("account_type");
if ($account_type == '15016') {
$this->wxpay_call->query_append_transaction($transaction_id);
}
redirect(site_url("/apps/pay/paymentservice/note_list?keywords=$transaction_id"));
exit;
// $data['notelist'] = $this->note_model->search_key($transaction_id);
// $data['method_code'] = '';
// $data["method_name"] = '';
// array_walk($data["notelist"], 'PaymentService::set_brandname');
// $this->load->view("payment_list",$data);
// return ;
}
} }

@ -15,7 +15,7 @@ class Wxpay_call
$this->ci =& get_instance(); $this->ci =& get_instance();
$this->ci->load->helper('payment'); $this->ci->load->helper('payment');
$this->ci->config->load('wxpay', true); $this->ci->config->load('wxpay', true);
// $this->ci->load->model('WxpayQueryContentBuilder', 'query_builder'); $this->ci->load->model('WxpayQueryContentBuilder', 'query_builder');
$this->merchant_account = $account; $this->merchant_account = $account;
bcscale(2); bcscale(2);
} }
@ -30,6 +30,34 @@ class Wxpay_call
// $this->api_info_arr['app_secret'] = $this->wx_site_config['app_secret']; // $this->api_info_arr['app_secret'] = $this->wx_site_config['app_secret'];
} }
function query_append_transaction($transaction_id) {
$ret = [];
$all_account = explode(",", $this->ci->config->item('all_account', 'wxpay'));
$this->merchant_account = $all_account[0];
$this->ci->query_builder->set_transaction_id($transaction_id);
// var_dump($transaction_id);
// var_dump($all_account);
foreach ($all_account as $account) {
$resultR = $this->query_order_refund($this->ci->query_builder, 0, $account);
$result = $this->query_order_refund($this->ci->query_builder, 1, $account);
// var_dump(json_encode($result));
// var_dump(json_encode($resultR));
if ($result['status'] === true) {
$ret = array_merge($ret, $result['data']);
$this->ci->note_model->add_note_wxpay($result['data'], $account, 'pay');
}
if ($resultR['status'] === true) {
$ret = array_merge($ret, $result['data']);
$this->ci->note_model->add_note_wxpay($resultR['data'], $account, 'refund');
}
if (!empty($ret)) {
break;
}
}
// var_dump($ret);
return $ret;
}
public function query_order_refund($query_content, $query_refund=0, $account = '') public function query_order_refund($query_content, $query_refund=0, $account = '')
{ {
$ret = array('status'=>false, 'data'=>array()); $ret = array('status'=>false, 'data'=>array());
@ -39,16 +67,19 @@ class Wxpay_call
$query_content_input = $query_content->getBizContent(true); $query_content_input = $query_content->getBizContent(true);
//检测必填参数 //检测必填参数
if( ! $query_content_input['transaction_id']) { if( ! $query_content_input['transaction_id']) {
throw new WxPayException("查询接口中,缺少必填参数 transaction_id "); throw new Exception("查询接口中,缺少必填参数 transaction_id ", 1);
// throw new WxPayException("查询接口中,缺少必填参数 transaction_id ");
} }
$this->api_info_arr['nonce_str'] = ($this->get_nonce_str());//随机字符串 $this->api_info_arr['nonce_str'] = ($this->get_nonce_str());//随机字符串
$this->api_info_arr['sign'] = $this->make_sign(array_merge($this->api_info_arr, $query_content_input));//签名 $this->api_info_arr['sign'] = $this->make_sign(array_merge($this->api_info_arr, $query_content_input));//签名
$xml = to_xml(array_merge($this->api_info_arr, $query_content_input)); $xml = to_xml(array_merge($this->api_info_arr, $query_content_input));
// var_dump('api', array_merge($this->api_info_arr, $query_content_input));
// log_message('error','test: ' . __CLASS__ . PHP_EOL . var_export(array_merge($this->api_info_arr, $query_content_input), 1)); // log_message('error','test: ' . __CLASS__ . PHP_EOL . var_export(array_merge($this->api_info_arr, $query_content_input), 1));
$response = $this->post_xml_curl($this->api_info_arr, $xml, $url, 20); $response = $this->post_xml_curl($this->api_info_arr, $xml, $url, 20);
$response_arr = from_xml($response); $response_arr = from_xml($response);
// var_dump($response_arr);
$ret['status'] = $response_arr['return_code'] === 'SUCCESS' && $response_arr['result_code'] === 'SUCCESS'; $ret['status'] = $response_arr['return_code'] === 'SUCCESS' && $response_arr['result_code'] === 'SUCCESS';
if ($query_refund !== 0) { if ($query_refund !== 0) {
$ret['data'] = [$response_arr]; $ret['data'] = [$response_arr];

@ -33,17 +33,20 @@ class Online_payment_note_model extends CI_Model {
return false; return false;
} }
if ($check_exists === true) { if ($check_exists === true) {
$sql = "SELECT TOP 1 OPN_SN $sql = "SELECT TOP 1 OPN_SN, OPN_payFee, OPN_netAmount, OPN_entryAmountCNY
FROM OnlinePaymentNote FROM OnlinePaymentNote
WHERE OPN_accountMethod={$column['OPN_accountMethod']} AND OPN_transactionId = '{$column['OPN_transactionId']}'"; WHERE OPN_accountMethod={$column['OPN_accountMethod']} AND OPN_transactionId = '{$column['OPN_transactionId']}'";
$query = $this->info->query($sql); $query = $this->info->query($sql);
if ($query->num_rows() > 0) { if ($query->num_rows() > 0) {
$raw_row = $query->row();
$update = array( $update = array(
'OPN_payFee' => isset($column['OPN_payFee']) ? $column['OPN_payFee'] : null, 'OPN_payFee' => isset($column['OPN_payFee']) ? $column['OPN_payFee'] : $raw_row->OPN_payFee,
'OPN_netAmount' => $column['OPN_netAmount'], 'OPN_netAmount' => isset($column['OPN_netAmount']) ? $column['OPN_netAmount'] : $raw_row->OPN_netAmount,
'OPN_entryAmountCNY' => $column['OPN_entryAmountCNY'], 'OPN_entryAmountCNY' => isset($column['OPN_entryAmountCNY']) && isset($column['OPN_payFee']) ? $column['OPN_entryAmountCNY'] : $raw_row->OPN_entryAmountCNY,
); );
$where = " OPN_SN=" . $query->row()->OPN_SN; $where = " OPN_SN=" . $query->row()->OPN_SN;
// var_dump($update);
// var_dump($query->row());
$this->update_note($where, $update); $this->update_note($where, $update);
return false; return false;
} }
@ -501,7 +504,7 @@ class Online_payment_note_model extends CI_Model {
$save_column['OPN_orderAmount'] = "-" . $refund_fee; $save_column['OPN_orderAmount'] = "-" . $refund_fee;
$save_column['OPN_payAmount'] = "-" . $refund_fee; $save_column['OPN_payAmount'] = "-" . $refund_fee;
$save_column['OPN_resultCode'] = $row['refund_status']; $save_column['OPN_resultCode'] = $row['refund_status'];
$save_column['OPN_resultMsg'] = $row['refund_status']; $save_column['OPN_resultMsg'] = ''; // $row['refund_status'];
$save_column['OPN_entryAmountCNY'] = floatval("-" . $ssje); $save_column['OPN_entryAmountCNY'] = floatval("-" . $ssje);
$save_column['OPN_noticeType'] = $type; $save_column['OPN_noticeType'] = $type;
$save_column['OPN_relatedId'] = $row['transaction_id']; $save_column['OPN_relatedId'] = $row['transaction_id'];
@ -514,8 +517,8 @@ class Online_payment_note_model extends CI_Model {
$save_column['OPN_transactionId'] = $row['transaction_id']; $save_column['OPN_transactionId'] = $row['transaction_id'];
$save_column['OPN_orderAmount'] = $total_fee; $save_column['OPN_orderAmount'] = $total_fee;
$save_column['OPN_payAmount'] = $total_fee; $save_column['OPN_payAmount'] = $total_fee;
$save_column['OPN_resultCode'] = $row['trade_state']; $save_column['OPN_resultCode'] = $row['result_code'];
$save_column['OPN_resultMsg'] = $row['trade_state']; $save_column['OPN_resultMsg'] = $row['trade_type'];
$save_column['OPN_entryAmountCNY'] = floatval($ssje); $save_column['OPN_entryAmountCNY'] = floatval($ssje);
$save_column['OPN_noticeType'] = 'pay'; $save_column['OPN_noticeType'] = 'pay';
$save_column['OPN_relatedId'] = ''; $save_column['OPN_relatedId'] = '';
@ -535,7 +538,8 @@ class Online_payment_note_model extends CI_Model {
$save_column['OPN_rawContent'] = json_encode($row); $save_column['OPN_rawContent'] = json_encode($row);
$save_column['OPN_noticeTime'] = date('Y-m-d H:i:s'); $save_column['OPN_noticeTime'] = date('Y-m-d H:i:s');
// $this->insert_note($save_column) ; // todo: // var_dump(($save_column));
$this->insert_note($save_column, true) ; // todo:
// log_message('error', 'test: ' . __CLASS__ . PHP_EOL . var_export($save_column, 1)); // log_message('error', 'test: ' . __CLASS__ . PHP_EOL . var_export($save_column, 1));
} }
return; return;

@ -43,6 +43,10 @@
.items-center {align-items: center;} .items-center {align-items: center;}
.justify-center {justify-content: center;} .justify-center {justify-content: center;}
.ml-auto {margin-left: auto;} .ml-auto {margin-left: auto;}
#queryFormModal .btn-group .btn:active, #queryFormModal .btn-group .btn.active{ color: #fff; background-color: #337ab7;border-color: #2e6da4;}
.modal-header .close {position: absolute;right: 15px;top: 15px;}
</style> </style>
<style type="text/css" media="screen and (max-width:767px)"> <style type="text/css" media="screen and (max-width:767px)">
.navbar-header h1 {display: block; font-size: 20px;} .navbar-header h1 {display: block; font-size: 20px;}
@ -194,8 +198,10 @@
</label> </label>
</div> --> </div> -->
<div class="input-group"> <div class="input-group">
<input type="text" name="keywords" value="<?php echo isset($keywords) ? $keywords : ''; ?>" class="form-control" placeholder="订单号" style="height: 33px;-webkit-box-shadow: inset 0 0px 0px rgba(0,0,0,0.075);box-shadow: inset 0 0px 0px rgba(0,0,0,0.075);border-bottom:1px solid #ddd;"> <input type="text" name="keywords" value="<?php echo isset($keywords) ? $keywords : ''; ?>" class="form-control" placeholder="订单号" style="height: 33px;-webkit-box-shadow: inset 0 0px 0px rgba(0,0,0,0.075);box-shadow: inset 0 0px 0px rgba(0,0,0,0.075);border-bottom:1px solid #ddd;border-right:0;">
<span class="input-group-addon search-btn" onclick="$('#search_note_list').submit();"></span> <span class="input-group-btn">
<button class="btn btn-default p-0" type="submit" style="border: none; padding: 0"><span class="glyphicon glyphicon-search"></span></button>
</span>
</div> </div>
<div id="datepicker"></div> <div id="datepicker"></div>
</form> </form>
@ -209,8 +215,18 @@
<li><a class="text-primary" href="/webht.php/apps/pay/paymentservice/send_notify" target="_blank">&gt;手动处理通知</a></li> <li><a class="text-primary" href="/webht.php/apps/pay/paymentservice/send_notify" target="_blank">&gt;手动处理通知</a></li>
<li class="btn-sm"></li> <li class="btn-sm"></li>
<li><a class="text-primary" href="http://share.chtcdn.com/info.php/sendmail/send_mail" target="_blank">&gt;发送邮件</a></li> <li><a class="text-primary" href="http://share.chtcdn.com/info.php/sendmail/send_mail" target="_blank">&gt;发送邮件</a></li>
<li class="btn-lg"></li> <!-- <li class="btn-lg"></li> -->
</ul> </ul>
<hr width="100%" />
<ul class="list-unstyled ">
<li>
<button type="button" class="btn text-primary " data-toggle="modal" data-target="#queryFormModal">
&gt; 退款查询
</button>
</li>
</ul>
<div class="well well-sm hidden-xs" > <div class="well well-sm hidden-xs" >
<h4>通知状态:</h4> <h4>通知状态:</h4>
<p>1.send 表示通知正确发送给外联</p> <p>1.send 表示通知正确发送给外联</p>
@ -328,6 +344,55 @@
</div> </div>
</div> </div>
</div> </div>
<!-- 退款查询 -->
<div class="modal fade" id="queryFormModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">退款查询</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<!-- <form class="form-horizontal" role="form" method="post" id="search_list" action="/webht.php/apps/paypal/index/export_list/">
</form> -->
<form class="form-horizontal" role="form" method="post" id="search_refund_list" action="/webht.php/apps/pay/paymentservice/query">
<div class="form-group row">
<label for="account_type" class="col-md-4">付款方式</label>
<div class="col-md-16">
<div class="btn-group" data-toggle="buttons">
<label class="btn btn-default active">
<input type="radio" name="account_type" id="15016" value="15016" autocomplete="off" checked> 微信
</label>
<!-- <label class="btn btn-default">
<input type="radio" name="account_type" id="15015" value="15015" autocomplete="off"> 支付宝
</label> -->
</div>
</div>
</div>
<div class="form-group row">
<label for="transaction_id" class="col-md-4">原交易号</label>
<div class="col-md-16">
<input type="text" class="form-control col-md-8" id="transaction_id" name="transaction_id" placeholder="原交易号" required>
</div>
</div>
<hr />
<div class="form-group">
<div class="col-sm-24 text-right">
<button type="submit" class="btn btn-primary ">查询</button>
</div>
</div>
</form>
</div>
<!-- <div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
<button type="submit" class="btn btn-primary center-block">查询</button>
</div> -->
</div>
</div>
</div>
</body> </body>
<script type="text/javascript" src="/js/flatpickr-4.4.4.min.js"></script> <script type="text/javascript" src="/js/flatpickr-4.4.4.min.js"></script>
<script type="text/javascript"> <script type="text/javascript">
@ -344,7 +409,7 @@ jQuery.browser = {};
$("#datepicker").flatpickr({ $("#datepicker").flatpickr({
inline: true, inline: true,
dateFormat: "Y-m-d", dateFormat: "Y-m-d",
defaultDate: "<?php echo $date; ?>", defaultDate: "<?php echo isset($date) ? $date : ''; ?>",
onChange: function (selectedDates, dateStr, instance) { onChange: function (selectedDates, dateStr, instance) {
window.location.href = '/webht.php/apps/pay/paymentservice/note_list?date=' + dateStr; window.location.href = '/webht.php/apps/pay/paymentservice/note_list?date=' + dateStr;
} }

Loading…
Cancel
Save