首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Woocommerce & Opayo:在发送到API的数据中添加一个自定义字段

Woocommerce & Opayo:在发送到API的数据中添加一个自定义字段
EN

Stack Overflow用户
提问于 2021-02-23 14:06:55
回答 2查看 436关注 0票数 2

非常具体的问题,但,我已经拖到了一个问题与我们的公司支付网关在我们的Wordpress / Woocommerce网站,我们正在使用Opayo插件(为Opayo )。

问题是:

最初安装

  • 时,没有为发送到API

的数据/对象上的Reference字段选择模板/选项。

最初做这个网站的人随后尝试联系这个现在不受支持的插件的原始开发人员,他们被发送了一些代码到另一个名为PHP Injection的插件中,代码类似于下面的代码:

代码语言:javascript
复制
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了

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-24 09:59:22

好的,所以我亲自联系了Opayo,看看Opayo网站上的Mapping列是什么,以及发送到API的哪些数据映射到表中的Reference列。

显然,发送给API的与此对应的值是VendorData (不需要,200 Char限制,免费文本)。

所以,为了解决这个问题,我不得不:

打开Wordpress

  • Select Plugin

  • Navigate上的插件编辑器
  1. 并选择woocommerce-gateway-sagepay-form/classes/direct/sagepay-direct-request-class.php文件

然后在Line 335数组中滚动到$end,然后添加VendorData字段,如下代码所示:

代码语言:javascript
复制
            $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并将其注释掉,请参见下面的内容:

代码语言:javascript
复制
// 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个字符,只有Aa0-9,当我尝试使用_时,尝试了几次失败的尝试,直到我搜索了在这个页面上收到的错误:

https://www.opayo.co.uk/support/error-codes?keyword=3189

我希望我的问题和解决方案在未来帮助某人,并为我浪费的任何人的时间感到遗憾!

票数 0
EN

Stack Overflow用户

发布于 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”作为关键的段塞,用正确的子弹替换)

代码语言:javascript
复制
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()函数:

代码语言:javascript
复制
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;
}

它可以更好地工作…

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66334711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档