Javascript 使用自定义 Woocommerce 支付网关覆盖“下订单按钮”

Javascript override for “Place Order button” using custom Woocommerce payment gateway

我目前正在开发一个自定义 Woocommerce 支付网关,它通过内联弹出窗口接收信用卡详细信息。网关希望用户单击按钮,然后加载弹出窗口,用户可以输入他的银行卡详细信息。

一切正常,但用户体验流程不如预期,因为用户必须依次单击两个按钮才能结帐。

我做了什么:选择网关后,用户单击一个按钮加载内联弹出窗口,输入付款详细信息,如果获得授权,javascript 回调将交易参考作为隐藏字段发送,这当用户点击 "place order" 时提交。这很好用,但单击两个按钮既不直观也不友好。不知情的用户可能会先点击 "Place Order" 按钮,这会触发错误,因为付款过程尚未完成。

我想要实现的目标:用户只需点击 "Place order",在处理订单之前,它会运行网关 JavaScript 功能,像往常一样加载安全内联弹出窗口,授权后我可以回调Place order按钮的正常流程

我考虑过的:制作结帐表单和脚本的自定义副本并放入主题中。但是支付网关脚本是一个插件,应该是独立于主题的。

P.S。我之前在 WordPress Stack xchange 上发布了这个,但我在那里没有得到任何关注。

这是您需要注入页面的全部 JavaScript:

jQuery( function($) {     
  $("form.woocommerce-checkout")
  .on('submit', function() { return gatewayFunction( this ); } ); 
} );

外部 jQuery( function($) {} ); 确保中间的代码仅在加载 HTML 文档时获得 运行 (这样 <form> 将在代码 运行) 时存在,并使 jQuery 在两者之间作为 $ 可用。

return gatewayFunction( this )<form> 传递给函数,因此它可以使用它的值并添加或更新隐藏的支付令牌字段,因此您需要将该参数添加到 gatewayFunction:

function gatewayFunction( form ) {
  ...
  return is_payment_complete;
}