【发布时间】:2020-01-09 15:42:43
【问题描述】:
是否可以在订单完成后触发 URL。它不是客户应该发送到的 URL,但在后端应该访问此 URL,以便调用 API。我对此有点陌生,所以不知道这是否是正确的方法。如果有人能指出我正确的方向,那就太好了。
我得到了这个应该触发的 URL,其中填充了我在完成订单后应该得到的变量:
https:///v1/invite/externalhash=XXX&location_id=XXX&tenantId=XX&invite_email=XXX&delay=X&first_name=XXX&last_name=XXX&language=XX&ref_code=XXXX
- invite_email -> 这应该是下订单时使用的电子邮件
- first_name -> 这应该是下订单的名称
- last_name -> 这应该是下订单时使用的姓氏
- 语言 -> 这应该是订单运送到的运送国家/地区的语言代码(小写)
我知道这很多,但我应该怎么做?
编辑 好的,我找到了一种使用 CURL 执行此操作的方法,但是如何在不打开浏览器中的 URL 的情况下执行以下代码?
// create a new cURL resource
$ch = curl_init();
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
// grab URL and pass it to the browser
curl_exec($ch);
// close cURL resource, and free up system resources
curl_close($ch);
我只想执行 URL,但不想在浏览器中打开它。只需快速调用即可。
CURL 可以做到这一点吗?
编辑 2.0.1
我在订单状态完成后更改了我的功能。我几乎可以正常工作,但由于某种原因,当使用“动态”网址时,不会触发网址。
我还在 javascript 中添加了一个回显警报,这个警报传递了准确的动态 URL,因此它可以正常工作。在带有警报的函数下方:
add_action('woocommerce_order_status_completed', 'custom_process_order');
function custom_process_order($order_id) {
// Get the order info
$order = wc_get_order( $order_id );
if($order->get_billing_country() == "NL"){
// create a new cURL resourc
$ch = curl_init();
$voornaam = $order->get_billing_first_name();
$achternaam = $order->get_billing_last_name();
$email = $order->get_billing_email();
echo '<script type="text/javascript">alert("https://klantenvertellen.nl/v1/invite/external?hash=0926-4adb-a39e-d04110d1e445&location_id=104679&tenantId=99&invite_email='.$email.'&delay=1&first_name='.$voornaam.'&last_name='.$achternaam.'&language=nl");</script>';
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, 'https://klantenvertellen.nl/v1/invite/external?hash=0926-4adb-a39e-d04110d1e445&location_id=10479&tenantId=99&invite_email='.$email.'&delay=1&first_name='.$voornaam.'&last_name='.$achternaam.'&language=nl');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// grab URL and pass it to the browser
curl_exec($ch);
// close cURL resource, and free up system resources
curl_close($ch);
}
}
当我使用它时,不会触发 URL。但是警报 URL 是这样的: https://klantenvertellen.nl/v1/invite/external?hash=0926-4adb-a39e-d04110d1e445&location_id=104679&tenantId=99&invite_email=test@email.com&delay=1&first_name=my名字&姓氏=我的姓氏&语言=nl
正如它应该的那样,但由于某种原因,CURL 函数没有被触发。当我在函数中添加这样的 URL 时:
curl_setopt($ch, CURLOPT_URL, 'https://klantenvertellen.nl/v1/invite/external?hash=0926-4adb-a39e-d04110d1e445&location_id=104679&tenantId=99&invite_email=test@email.com&delay=1&first_name=my first name&last_name=my lastname&language=nl');
URL 被触发。那么,当手动添加 URL 时它正在工作并且在使用变量时它不起作用,我做错了什么?
【问题讨论】:
标签: php wordpress function woocommerce