Woocommerce 和 Opayo:向发送到 API 的数据添加自定义字段
Woocommerce & Opayo: Add a custom field to the data sent to the API
非常具体的问题,但是,我被拖到我们公司的 Wordpress / Woocommerce 网站上的支付网关问题上,我们在该网站上使用 Opayo 插件(对于 Opayo Direct)。
问题是:
- 最初设置时,没有为发送到 API
的数据/对象的 Reference
字段选择模板/选项
最初做网站的人然后尝试联系这个现在不受支持的插件的原始开发人员,他们收到了一些代码以放入另一个名为 PHP Injection
的插件中,代码类似于以下内容:
add_filter( 'opayo_direct_custom_field_vendordata', 'my_opayo_direct_custom_field_vendordata', 10, 2 );
function my_opayo_direct_custom_field_vendordata ( $vendordata, $order ) {
// Get Order ID
$order_id = $order->get_order_number();
$reference = "test_" . $order_id;
// Get the reference field - set '_reference_field' to the meta_key from your order
if( isset( get_post_meta( $order_id, '_reference_field', TRUE ) ) ) {
$vendordata = get_post_meta( $order_id , '_reference_field', TRUE );
//$vendordata['_reference_field'] = $reference; ### Commented as I'm unsure if this is correct
}
return $vendordata;
}
经过无数次测试和小改动后,Opayo 本身的 Reference
字段似乎仍然没有显示任何内容?
请告诉我以前有人遇到过这种情况或者知道我可能遗漏了什么,我已经有一段时间没有接触了PHP
首先,您在尝试获取订单元数据时不能使用 $order->get_order_number()
,而是使用带有 get_post_meta()
函数的 $order->get_id()
。
现在您还可以使用 WC_Data 方法 get_meta() 用于 $order 对象变量。
您需要找出的是您需要用来通过 opayo_direct_custom_field_vendordata
过滤器挂钩将该自定义字段值合并到供应商数据中的密钥块。
尝试以下 (我使用 'reference' 作为键别名,将替换为正确的别名):
add_filter( 'opayo_direct_custom_field_vendordata', 'my_opayo_direct_custom_field_vendordata', 10, 2 );
function my_opayo_direct_custom_field_vendordata ( $vendor_data, $order ) {
$reference = $order->get_meta('_reference_field');
if ( ! empty($reference) ) {
$vendor_data['reference'] = $reference;
}
return $vendor_data;
}
或使用get_post_meta()
函数:
add_filter( 'opayo_direct_custom_field_vendordata', 'my_opayo_direct_custom_field_vendordata', 10, 2 );
function my_opayo_direct_custom_field_vendordata ( $vendor_data, $order ) {
$reference = get_post_meta($order->get_id(), '_reference_field', true);
if ( ! empty($reference) ) {
$vendor_data['reference'] = $reference;
}
return $vendor_data;
}
它可以更好地工作……
好的,所以,我自己联系了Opayo,看看Opayo网站上的Reference
列的Mapping
是什么,发送到API的数据是什么映射table.
中的 Reference
列
显然发送到 API 的值对应于 VendorData
(不需要,200 个字符限制,自由文本)
所以,要解决这个问题,我必须:
- 在 Wordpress 上打开插件编辑器
- Select
woocommerce-gateway-sagepay-form
插件
- 导航并 select
woocommerce-gateway-sagepay-form/classes/direct/sagepay-direct-request-class.php
文件
然后我滚动到 $end
数组内的 Line 335
,然后我添加了 VendorData
的字段,如下面的代码所示:
$end = array(
"CustomerEMail" => $order->get_billing_email(),
"ClientIPAddress" => $this->get_ipaddress(),
"AccountType" => $this->accounttype,
"ReferrerID" => $this->referrerid,
"Website" => site_url(),
"VendorData" => '#######',
"Crypt" => MD5( $this->open_salt . $order->get_order_key() . $this->close_salt ),
);
然后将 #######
设置为我需要发送到 Opayo 以显示在付款 table 的 Reference
列中的值 table。
然后只是为了确保它不会被修剪(同样,有一段时间没有触及 PHP,我去了(现在)Line 378
并将其注释掉,见下文:
// Customiseable fields
$end['TransType'] = apply_filters( 'opayo_direct_custom_field_transtype', '01', $order );
//$end['VendorData'] = apply_filters( 'opayo_direct_custom_field_vendordata', '', $order );
保存它,然后在下订单/购买时,Opayo 网站上的 Reference
字段填充了我设置的 VendorData
。
快速说明:VendorData
字段最多 200 个字符,只有 Aa
或 0-9
,我有几次失败了当我尝试 _
时尝试,直到我搜索了我在此页面上收到的错误:
https://www.opayo.co.uk/support/error-codes?keyword=3189
我希望我的问题和解决方案对以后的人有所帮助,对于我浪费了大家的时间,我深表歉意!
非常具体的问题,但是,我被拖到我们公司的 Wordpress / Woocommerce 网站上的支付网关问题上,我们在该网站上使用 Opayo 插件(对于 Opayo Direct)。
问题是:
- 最初设置时,没有为发送到 API 的数据/对象的
Reference
字段选择模板/选项
最初做网站的人然后尝试联系这个现在不受支持的插件的原始开发人员,他们收到了一些代码以放入另一个名为 PHP Injection
的插件中,代码类似于以下内容:
add_filter( 'opayo_direct_custom_field_vendordata', 'my_opayo_direct_custom_field_vendordata', 10, 2 );
function my_opayo_direct_custom_field_vendordata ( $vendordata, $order ) {
// Get Order ID
$order_id = $order->get_order_number();
$reference = "test_" . $order_id;
// Get the reference field - set '_reference_field' to the meta_key from your order
if( isset( get_post_meta( $order_id, '_reference_field', TRUE ) ) ) {
$vendordata = get_post_meta( $order_id , '_reference_field', TRUE );
//$vendordata['_reference_field'] = $reference; ### Commented as I'm unsure if this is correct
}
return $vendordata;
}
经过无数次测试和小改动后,Opayo 本身的 Reference
字段似乎仍然没有显示任何内容?
请告诉我以前有人遇到过这种情况或者知道我可能遗漏了什么,我已经有一段时间没有接触了PHP
首先,您在尝试获取订单元数据时不能使用 $order->get_order_number()
,而是使用带有 get_post_meta()
函数的 $order->get_id()
。
现在您还可以使用 WC_Data 方法 get_meta() 用于 $order 对象变量。
您需要找出的是您需要用来通过 opayo_direct_custom_field_vendordata
过滤器挂钩将该自定义字段值合并到供应商数据中的密钥块。
尝试以下 (我使用 'reference' 作为键别名,将替换为正确的别名):
add_filter( 'opayo_direct_custom_field_vendordata', 'my_opayo_direct_custom_field_vendordata', 10, 2 );
function my_opayo_direct_custom_field_vendordata ( $vendor_data, $order ) {
$reference = $order->get_meta('_reference_field');
if ( ! empty($reference) ) {
$vendor_data['reference'] = $reference;
}
return $vendor_data;
}
或使用get_post_meta()
函数:
add_filter( 'opayo_direct_custom_field_vendordata', 'my_opayo_direct_custom_field_vendordata', 10, 2 );
function my_opayo_direct_custom_field_vendordata ( $vendor_data, $order ) {
$reference = get_post_meta($order->get_id(), '_reference_field', true);
if ( ! empty($reference) ) {
$vendor_data['reference'] = $reference;
}
return $vendor_data;
}
它可以更好地工作……
好的,所以,我自己联系了Opayo,看看Opayo网站上的Reference
列的Mapping
是什么,发送到API的数据是什么映射table.
Reference
列
显然发送到 API 的值对应于 VendorData
(不需要,200 个字符限制,自由文本)
所以,要解决这个问题,我必须:
- 在 Wordpress 上打开插件编辑器
- Select
woocommerce-gateway-sagepay-form
插件 - 导航并 select
woocommerce-gateway-sagepay-form/classes/direct/sagepay-direct-request-class.php
文件
然后我滚动到 $end
数组内的 Line 335
,然后我添加了 VendorData
的字段,如下面的代码所示:
$end = array(
"CustomerEMail" => $order->get_billing_email(),
"ClientIPAddress" => $this->get_ipaddress(),
"AccountType" => $this->accounttype,
"ReferrerID" => $this->referrerid,
"Website" => site_url(),
"VendorData" => '#######',
"Crypt" => MD5( $this->open_salt . $order->get_order_key() . $this->close_salt ),
);
然后将 #######
设置为我需要发送到 Opayo 以显示在付款 table 的 Reference
列中的值 table。
然后只是为了确保它不会被修剪(同样,有一段时间没有触及 PHP,我去了(现在)Line 378
并将其注释掉,见下文:
// Customiseable fields
$end['TransType'] = apply_filters( 'opayo_direct_custom_field_transtype', '01', $order );
//$end['VendorData'] = apply_filters( 'opayo_direct_custom_field_vendordata', '', $order );
保存它,然后在下订单/购买时,Opayo 网站上的 Reference
字段填充了我设置的 VendorData
。
快速说明:VendorData
字段最多 200 个字符,只有 Aa
或 0-9
,我有几次失败了当我尝试 _
时尝试,直到我搜索了我在此页面上收到的错误:
https://www.opayo.co.uk/support/error-codes?keyword=3189
我希望我的问题和解决方案对以后的人有所帮助,对于我浪费了大家的时间,我深表歉意!