将条带连接数据添加到WC_STRPE_Payment_Request中

时间:2020-04-03 作者:JpaytonWPD

我正在使用Stripe Connect在woocommerce网站上收取销售佣金。

我需要在付款请求JSON中添加以下内容。

  \'application_fee_amount\' => (Gateway Based Fees Amount),
  \'transfer_data\' => [
    \'destination\' => \'{{CONNECTED_STRIPE_ACCOUNT_ID}}\',
  ],
我找到并修改了这段代码,以符合我的目的。编辑:我已经完全重写了这个,我只需要将额外的变量数组值添加到请求中。

//add_filter( \'woocommerce_stripe_request_body\', \'add_application_fee\', 20, 2 );
add_filter(\'wc_stripe_generate_payment_request\', \'add_application_fee\', 20, 3 );

function add_application_fee( $post_data ) {
    //$applicationFee = (int)apply_filters(\'vnm_wc_stripe_connect_application_fee\', $order, $request);
    $applicationFee = 25;  //  <- Use this for testing, I 
    $post_data[\'application_fee_amount\'] = $applicationFee;
    $post_data[\'on_behalf_of\'] = \'acct_1GQjzOHenYA2KZ8B\';
    $post_data[\'transfer_data\'][\'destination\'] = \'acct_1GQjzOHenYA2KZ8B\';
    return $post_data;
}
这不会产生任何错误,但是信息不会添加到条带支付中。

{
  "amount": "12766",
  "currency": "USD",
  "description": "Order 35215",
  "metadata": {
    "instance": "example.com",
    "order_id": "35215",
    "order_email": "[email protected]",
    "cart_hash": ""
  },
  "setup_future_usage": "off_session",
  "capture_method": "automatic",
  "confirmation_method": "manual",
  "customer": "cus_H1VGhq2aNJWokc"
}

2 个回复
SO网友:Himad

wc_stripe_generate_payment_request 传递3个参数。查看源代码:

/**
    * Filter the return value of the WC_Payment_Gateway_CC::generate_payment_request.
    *
    * @since 3.1.0
    * @param array $post_data
    * @param WC_Order $order
    * @param object $source
    */
    return apply_filters( \'wc_stripe_generate_payment_request\', $post_data, $order, $prepared_source );
尝试为过滤器挂钩设置正确数量的参数,否则将无法调用它。

add_filter(\'wc_stripe_generate_payment_request\', \'add_application_fee\', 10, 3);

SO网友:James Bayley

这是已知问题(~ bug)。看见

第一个链接提供了一种解决方法-使用add\\u筛选器(“woocommerce\\u stripe\\u request\\u body”、“add\\u application\\u fee”,20,2)

第二个链接指出,您还必须修改Javascript调用(很容易忘记!)

“indextwo于2019年2月23日发表了评论……我在Stripe文档中遗漏了一点:如果您正在创建一个Stripe源并打算向一个连接的帐户直接收费,则需要将其作为JavaScript中Stripe()调用的一部分:

var stripe=stripe(wc\\u stripe\\u params.key);

成为

var stripe=stripe(wc\\u stripe\\u params.key,{stripeAccount:acct\\u CONNECTED\\u ACCOUNT\\u ID});“”