WordPress 随机数验证因 AJAX 调用而失败

问题描述 投票:0回答:1

我正在创建一个与支付聚合器集成的支付插件。因此,在 wooCommerce 结帐的情况下,付款人有可能通过移动钱包付款,这将触发 USSD,一旦付款人输入他们的 PIN,并且我得到交易状态的更改,他们将被重定向到成功或失败页面。由于我正在与聚合器集成,因此我有

api_keys
token
等敏感数据,直接从前端调用并不是一个好主意。因此,我使用 WordPress 的应用程序挂钩创建了端点,并专门创建了一个用于验证事务状态的端点。因此,前端发送
transactionId
并且该端点调用聚合器来验证该事务的状态并将事务负载返回到前端。 WordPress 团队要求我使用
nonce
,但是当使用 AJAX 请求调用创建的 API 端点时,我的随机数验证总是失败。

请记住,用户当前位于

/checkout
页面上,API 端点位于另一个端点(例如
/wp-json/my-plugin/get-transaction
)上。当 woocommerce 订单成功创建时,我创建随机数,并将创建的随机数发送到前端,或者使用
wp_nonce_field( 'my-plugin-key-'.$tx_id );
来创建随机数,然后将其作为有效负载的一部分发送到后端。下面是示例代码

此方法将由 woocommerce 调用来初始化付款方式并呈现它

  public function payment_scripts()
        {
          // we need JavaScript to process a token only on cart/checkout pages, right?
          if (!is_cart() && !is_checkout() && !isset($_GET['pay_for_order'])) {
            return;
          }
  
          // if our payment gateway is disabled, we do not have to enqueue JS too
          if ('no' === $this->enabled) {
            return;
          }
          // creating nonce input on checkout page 
          wp_nonce_field( 'my-plugin-key-'.$tx_id );
          
          ...
    }

处理从

/wp-json/my-plugin/get-transaction
页面
/checkout

进行的API调用
 public function apiHandler($req)
  {
    $transaction = new Transactions();
    // $_POST['_wp_nonce'] holds the value of the nonce created when checkout page is loaded
    if(!wp_verify_nonce($_POST['_wp_nonce'],'my-plugin-key-'.$_POST['txnId'])){

      wp_send_json_error('Incorrect nonce ');
      die();
    }
   ...
}

这总是验证失败。请帮忙。

wordpress woocommerce wordpress-rest-api wordpress-plugin-creation
1个回答
0
投票

基于我在这里看到的解决方案,没有让 wordpress nonce 与 wp-rest api 应用程序一起使用

我用过

$requstURL = wp_nonce_url( get_site_url().'/wp-json/my-gateway/v1/verify', 'wp_rest' );

这将为提供的 url 生成一个随机数,并且可以作为查询字符串使用,然后我可以使用名称进行验证

wp_rest

你的随机数的名称

MUST
wp_rest
才能发挥作用

© www.soinside.com 2019 - 2024. All rights reserved.