Initial project files: BESCMS full source

This commit is contained in:
bes
2026-08-13 23:37:46 +08:00
parent fa6cddb540
commit 2e26f85723
2166 changed files with 396625 additions and 0 deletions
+94
View File
@@ -0,0 +1,94 @@
<?php
/**
* 微信退款接口
* 由 Pay::payrefund() require 调用
*
* 可用变量:$data 流水记录,$config 接口配置,$money 退款金额
* 须设置:$return = dr_return_data(...)
*
* 注意:退款需商户号配置 API 证书(apiclient_cert.pem / apiclient_key.pem
*/
$money = abs(isset($money) ? $money : $data['value']);
$transaction_id = trim((string)$data['result']); // 支付成功时写入的微信交易号
$out_trade_no = trim((string)\Phpcmf\Service::C()->member_cache['pay']['prefix'])
. date('YmdHis', (int)$data['inputtime']) . '00' . $data['id'];
$out_refund_no = 'RF' . $data['id'] . date('YmdHis');
$total_fee = (int)round($money * 100);
$refund_fee = $total_fee;
if (!$config || empty($config['appid']) || empty($config['mchid']) || empty($config['key'])) {
$return = dr_return_data(0, dr_lang('微信退款配置不完整'));
} elseif (!$transaction_id && !$out_trade_no) {
$return = dr_return_data(0, dr_lang('缺少微信交易号,无法退款'));
} else {
// API 证书路径(退款必填),默认放在 weixin 目录下
$cert = dirname(__FILE__) . '/cert/apiclient_cert.pem';
$key = dirname(__FILE__) . '/cert/apiclient_key.pem';
if (!empty($config['sslcert_path'])) {
$cert = $config['sslcert_path'];
}
if (!empty($config['sslkey_path'])) {
$key = $config['sslkey_path'];
}
if (!is_file($cert) || !is_file($key)) {
$return = dr_return_data(0, dr_lang('微信退款证书未配置(请放置 apiclient_cert.pem / apiclient_key.pem'));
} else {
if (!defined('APPID')) {
define('APPID', $config['appid']);
}
if (!defined('APPSECRET')) {
define('APPSECRET', isset($config['appsecret']) ? $config['appsecret'] : '');
}
if (!defined('MCHID')) {
define('MCHID', $config['mchid']);
}
if (!defined('KEY')) {
define('KEY', $config['key']);
}
if (!defined('NOTIFY_URL')) {
define('NOTIFY_URL', ROOT_URL . 'api/pay/' . $data['type'] . '/notify_url.php');
}
if (!defined('REPORT_LEVENL')) {
define('REPORT_LEVENL', 0);
}
if (!defined('SSLCERT_PATH')) {
define('SSLCERT_PATH', $cert);
}
if (!defined('SSLKEY_PATH')) {
define('SSLKEY_PATH', $key);
}
require_once dirname(__FILE__) . '/WxPay.Data.php';
require_once dirname(__FILE__) . '/WxPay.Api.php';
$input = new WxPayRefund();
if ($transaction_id) {
$input->SetTransaction_id($transaction_id);
} else {
$input->SetOut_trade_no($out_trade_no);
}
$input->SetTotal_fee($total_fee);
$input->SetRefund_fee($refund_fee);
$input->SetOut_refund_no($out_refund_no);
$input->SetOp_user_id(MCHID);
$result = WxPayApi::refund($input);
if (isset($result['code']) && (int)$result['code'] === 0) {
$return = $result;
} elseif (isset($result['return_code']) && $result['return_code'] == 'SUCCESS'
&& isset($result['result_code']) && $result['result_code'] == 'SUCCESS') {
$return = dr_return_data(1, dr_lang('退款成功'), $result);
} else {
$msg = isset($result['err_code_des']) && $result['err_code_des']
? $result['err_code_des']
: (isset($result['return_msg']) ? $result['return_msg'] : dr_lang('微信退款失败'));
if (isset($result['msg']) && $result['msg']) {
$msg = $result['msg'];
}
$return = dr_return_data(0, $msg, is_array($result) ? $result : []);
}
}
}