可以使用PHP访问admin-ajax.php吗?

时间:2022-02-14 作者:Martin

这可能是个奇怪的问题,但我需要访问admin-ajax.php 使用PHP。

我的一个插件创建了一个仅在中显示的PDFadmin-ajax.php, 我想用一段PHP代码下载这个PDF。现在我已经想出了如何下载PDF并将其放在正确的文件夹中,但是当我尝试访问admin-ajax.php 在我的代码中,它只返回;0英寸;。

我认为这是因为PDF只能由登录用户访问。所以我的问题是,我是否可以访问admin-ajax.php 使用PHP?

以下是我目前的代码:

add_action( \'woocommerce_payment_complete\', \'so_payment_complete\' );
    function so_payment_complete( $order_id ){
        // Static data for debugging
        $url     =   \'https://example.com/wp-admin/admin-ajax.php?action=wcpn_export&request=get_labels&shipment_ids=124687111&_wpnonce=2da91e54ad\';

    $arrContextOptions=array(
      "ssl"=>array(
        "verify_peer"=>false,
        "verify_peer_name"=>false,
      )
    );

    // Get the pdf data
    $pdf_data = file_get_contents($url, false, stream_context_create($arrContextOptions));

    if($pdf_data) :
      //Save PDF on server
      $pdf  = file_put_contents(__DIR__."/labels/$order_id.pdf", $pdf_data);

    else :

      print_r("Error!");

    endif;

}

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

它返回一个0 因为AJAX处理程序只用于登录的请求,并且没有注册非\\u priv处理程序。0 是最后的退路。

尝试#1

虽然您可以注册自己的AJAX处理程序来调用生成PDF的函数并将其放入迷你插件中,但还有一种选择:

add_action("wp_ajax_no_priv_wcpn_export", function() {
    do_action( "wp_ajax_wcpn_export" );
} );
另一端的代码可能不是这样的,因为它可能依赖于正在登录的用户,或者可能不检查,无论哪种方式,当请求注销时,这都会触发该AJAX的登录处理程序。一个简单的解决方法。

这将导致下一个问题:

https://github.com/postnl/woocommerce/blob/master/includes/admin/class-wcpn-export.php#L232-L254

PostNL会执行许多检查,包括您是否已登录、nonce是否有效、登录用户是否具有适当的访问权限等。

尝试#2

让我们使用继承!让我们创建一个新类,调用它Martin_Export:

class Martin_Export extends WPCN_Export {
...
}
我们班将做2件事,而且只做2件事。

首先,它将有一个全新的export 作用我们将复制粘贴WCPN中的一个,并删除顶部的检查。我们不会复制粘贴任何其他内容,只是export 作用

其次,我建议添加一个新的安全性检查,比如说一个密码参数,其值只有PHP文件知道。E、 g。if ( $_GET[\'foo\'] !== \'bar\' ) { wp_die(\'get outta here\'); }

然后,我们在类后面或其他地方的末尾有一行代码,用于钩住新版本的export 进入admin-ajax.php 对于这样的已注销用户:

$martin_export = new Martin_Export();
add_action("wp_ajax_no_priv_wcpn_export", [ $martin_export, \'export\' ] );
现在,当您发出AJAX请求但未登录时,它将运行您稍微调整过的版本。只需记住添加我们添加到PHP脚本中的秘密参数

相关推荐

我应该转义函数.php中添加的文字URL吗

我在函数中添加了一个片段。php文件,用于在woocommerce结账页面中添加信用卡图标。图标在我的媒体库中,所以我添加了图像的url。这不是一个输入,不会被更改,我应该退出它吗?代码:add_action (\'woocommerce_review_order_before_submit\', \'my_custom_woocommerce_icons\'); function my_custom_woocommerce_icons() { $icons