wooccommerce:如何在付款完成后将从远程服务器获得的数据添加到商品中



上下文

我们销售纯数字产品。

每个售出的商品都需要一个新的univoque产品密钥,其中密钥取决于商品本身

目标

用户在商店上购买商品

付款后,但在wooccommerce向用户发送电子邮件之前,wooccommence会询问我们的服务器令牌发送项目的详细信息。

每个项目的产品密钥都保存到项目详细信息中

将向用户发送电子邮件,其中包含每个项目的产品密钥

我已经能做什么了

我用做了一些实验

add_action( 'woocommerce_order_status_changed', 'so_payment_complete' );

我已经可以了

  • 获取订单实例

  • 获得订单项目

  • 每个订单项

    • 获取WC_Product
    • 提取所需的WC_Product_Attribute
    • 使用wp_remote_post与我们的api服务器进行对话

实际上我已经完成了90%的工作。

我不知道该怎么做

我需要将从我们的api服务器收到的产品密钥存储到订单项的数据中。

所以我的问题分为两部分:

  • 使用哪些操作或筛选器来代替woocommerce_order_status_changed?我需要在订单支付后,但在用户收到其订单详细信息邮件之前被解雇的东西

  • 如何将产品密钥设置到每个订单项目中,我真的在wooccommerce文档中找不到合适的方法

在提交电子邮件之前尝试操作woocommerce_checkout_update_order_metahttps://docs.woocommerce.com/wc-apidocs/source-class-WC_Checkout.html#401-403


,您可以将密钥保存在类似的元值上:

foreach ($order->get_items("line_item") as $id_line_item => $item) {
// ...
update_post_meta($id_line_item, "product_key", $product_key);

}

然后你可以这样读:

$product_key = get_post_meta($id_line_item, "product_key", TRUE);

最新更新