非常具体的问题,但,我已经拖到了一个问题与我们的公司支付网关在我们的Wordpress / Woocommerce网站,我们正在使用Opayo插件(为Opayo )。
问题是:
最初安装
的数据/对象上的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了
发布于 2021-02-24 09:59:22
好的,所以我亲自联系了Opayo,看看Opayo网站上的Mapping列是什么,以及发送到API的哪些数据映射到表中的Reference列。
显然,发送给API的与此对应的值是VendorData (不需要,200 Char限制,免费文本)。
所以,为了解决这个问题,我不得不:
打开Wordpress
woocommerce-gateway-sagepay-form/classes/direct/sagepay-direct-request-class.php文件然后在Line 335数组中滚动到$end,然后添加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的值,以便在payments表的Reference列中显示。
然后,为了确保它不会被修剪(再次,有一段时间没有触及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。
Quick :VendorData字段最多只有200个字符,只有Aa或0-9,当我尝试使用_时,尝试了几次失败的尝试,直到我搜索了在这个页面上收到的错误:
https://www.opayo.co.uk/support/error-codes?keyword=3189
我希望我的问题和解决方案在未来帮助某人,并为我浪费的任何人的时间感到遗憾!
发布于 2021-02-23 15:10:00
首先,在尝试获取order元数据时不使用$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;
}它可以更好地工作…
https://stackoverflow.com/questions/66334711
复制相似问题