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 : []); } } }