php - 在 Woocommerce 3 中获取最后一次订阅续订订单信息
问题描述
我们正在尝试将 woocommerce 订阅续订数据传递给忠诚度奖励计划,并且遇到了各种问题,并且无法获得相关的 woocommerce 订阅信息或任何工作。我们针对 zinrelo 的完整忠诚度代码使用手动数据。
包含您建议的完整代码在函数文件中运行
add_action( 'woocommerce_subscription_renewal_payment_complete', 'custom_add_subscription_points', 10, 1 );
function custom_add_subscription_points( $subscription ) {
if ( ! $subscription )
return;
// Get related orders
$orders_ids = $subscription->get_related_orders();
// Get the last renewal related Order ID
$order_id = reset( $order_ids );
$order = wc_get_order($order_id);
$order_id = $order->get_id();
$order_email = $order->get_billing_email();
$order_date = $order->get_date_completed();
$order_total = $order->get_total();
$order_subtotal = $order->get_subtotal();
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.zinrelo.com/v1/loyalty/purchase");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "user_email={$order_email}&activity_id=made_a_purchase&order_{id=$order_id}&total={$order_total}&subtotal={$order_subtotal}");
curl_setopt($ch, CURLOPT_POST, 1);
$headers = array();
$headers[] = "Partner-Id: 000000";
$headers[] = "Api-Key: 000000";
$headers[] = "Content-Type: application/x-www-form-urlencoded";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close ($ch);
}
解决方案
由于WC_Subscription
get_related_orders()
方法提供了一个订单 ID 数组,您需要使用reset()
函数来获取最后一个续订订单 ID 并避免函数错误,该函数wc_get_order()
需要一个唯一的订单 ID 作为参数(但不是数组)。
所以试试:
add_action( 'woocommerce_subscription_renewal_payment_complete', 'custom_add_subscription_points', 10, 1 );
function custom_add_subscription_points( $subscription, $last_order ) {
if ( ! $subscription )
return;
$order_email = $last_order->get_billing_email();
$order_date = $last_order->get_date_completed();
$order_total = $last_order->get_total();
$order_subtotal = $last_order->get_subtotal();
}
它现在应该与:
curl_setopt($ch, CURLOPT_POSTFIELDS, "user_email={$order_email}&activity_id=made_a_purchase&order_{id=$order_id}&total={$order_total}&subtotal={$order_subtotal}");
推荐阅读
- javascript - 如何防止分配未定义的值代替默认值
- r - RNomad 在 R 中处理 grib2 文件花费的时间太长
- firebase - 如何在 Firebase 数据库参考中搜索子中子中子中的某个值?
- docusignapi - 从 DocuSign REST API,如何完全删除/删除模板
- sql - 获取包含 2 个状态但不仅仅是其中一个状态的所有数据:SQL 查询
- c# - Razor Html.DisplayFor() 没有选择正确的本地化资源
- java - 如何在 Spinner android 中删除多余的空格?
- powershell - 在 Asp.Net Core 2 中使用 powershell 修改 web.config
- php - PHP Curl Json 或 XML 返回到数组
- javascript - 使用 Puppeteer 选择 href 属性