我们想要创建一个从网络钩退款,但退款金额似乎是三倍的退款金额。
下面是我们的代码,这是只触发一次。
$order_id = (isset($_REQUEST["order_id"]) && strlen($_REQUEST["order_id"]) > 0) ? intval($_REQUEST["order_id"]) : false;
$amount = (isset($_REQUEST["amount"]) && strlen($_REQUEST["amount"]) > 0) ? floatval($_REQUEST["amount"]) : false;
$reason = (isset($_REQUEST["reason"]) && strlen($_REQUEST["reason"]) > 0) ? $_REQUEST["reason"] : false;
if ($order_id) {
$order = wc_get_order($order_id);
if ($order->get_remaining_refund_amount() >= $amount) {
$refund = wc_create_refund(array(
'amount' => $amount,
'reason' => $reason,
'order_id' => $order_id,
'refund_payment' => true
));
if (is_wp_error($refund)) {
if ($refund->get_error_message() == 'Invalid refund amount.') {
echo 'Refund requested exceeds remaining order balance of ' . $order->get_formatted_order_total();
} else {
echo $refund->get_error_message();
}
} else {
echo $refund->get_id();
}
} else {
echo 'Refund requested exceeds remaining order balance of ' . $order->get_formatted_order_total();
}
}但是你可以从下面的截图中看到,它似乎是退款价值的三倍,但不确定原因。

有人能解释一下为什么会发生这种事吗。
请求以带有唯一密钥标识符的post http请求的形式出现。例如
https://example.com/process-refunds/?key=ff5f61b5a9d6ff2a5d7fb9fc815113d4&order_id=1234&amount=100&reason=Testing发布于 2018-07-31 11:46:16
尝试调用init钩子中的函数(添加到主题的'functions.php'),这个函数对我很好。
add_action( 'init', 'wc_manual_refund' );
function wc_manual_refund()
{
$order_id = (isset($_REQUEST["order_id"]) && strlen($_REQUEST["order_id"]) > 0) ? intval($_REQUEST["order_id"]) : false;
$amount = (isset($_REQUEST["amount"]) && strlen($_REQUEST["amount"]) > 0) ? floatval($_REQUEST["amount"]) : false;
$reason = (isset($_REQUEST["reason"]) && strlen($_REQUEST["reason"]) > 0) ? $_REQUEST["reason"] : false;
if ($order_id) {
$order = wc_get_order($order_id);
if ($order->get_remaining_refund_amount() >= $amount) {
$refund = wc_create_refund(array(
'amount' => $amount,
'reason' => $reason,
'order_id' => $order_id,
'refund_payment' => true
));
if (is_wp_error($refund)) {
if ($refund->get_error_message() == 'Invalid refund amount.') {
echo 'Refund requested exceeds remaining order balance of ' . $order->get_formatted_order_total();
} else {
echo $refund->get_error_message();
}
} else {
echo $refund->get_id();
}
} else {
echo 'Refund requested exceeds remaining order balance of ' . $order->get_formatted_order_total();
}
}
}发布于 2018-07-21 09:59:41
检查条件,得到最大退款金额。并通过使用静态变量确保代码只运行一次。
static $result;
$order = wc_get_order($order_id);
$max_refund = wc_format_decimal($order->get_total() - $order->get_total_refunded());
if (!$max_refund) {
return;
}
if($result == null){
// Create the refund object
$refund = wc_create_refund(array('amount' => $max_refund, 'reason' => __('Order Fully Refunded', 'woocommerce'), 'order_id' => $order_id, 'line_items' => array()));
wc_delete_shop_order_transients($order_id);
}
$result = 'code-already-run';我希望它能帮到你。
https://stackoverflow.com/questions/50769467
复制相似问题