wp_remote_post and form post

时间:2016-11-12 作者:meakcey

事实上,这是一个更一般的问题,但现在我正试图在wordpress网站上使用它,所以我更愿意把它贴在这里。

我试图理解远程post和表单post之间的区别。

当我查询一个字符串并将其发布到远程服务器时,我得到的结果是字符串,并使用“print$response”在浏览器控制台上查看它。但我希望它在浏览器上显示为html。我是在期待错误的事情还是我会做这样的事情?

基本上,我希望将原始响应视为html。

EDIT

以防更具表现力。。我正试图在woocommerce内部编写信用卡支付网关

在客户订单结束时调用的process\\u payment函数中,我将所有信息发布到银行服务器,如下所示:

public function process_payment( $order_id ) {
    global $woocommerce;
    ....
    ...
    $okUrl = "http://localhost/xxx/wc-api/paymentpos/";         
    $failUrl = "http://localhost/xxx/wc-api/paymentpos/";
    $payload = array(.....);
         $response = wp_remote_post( $environment_url, array(
        \'method\'    => \'POST\',
        \'body\'      => http_build_query( $payload ),
        \'timeout\'   => 45,
        \'sslverify\' => false,
    ) );
    $respbody = wp_remote_retrieve_body($response);
    print $respbody;
    }
之后,银行服务器应该回复payment\\u callback(),如下所示

public function payment_callback(){

    global $woocommerce;

    wc_add_notice( \'OK\', \'success\' );
    .....
    exit();     
}
我在控制台上得到如下$respbody。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" language="javascript">
function moveWindow() {
  document.returnform.submit();
}
</script>  
</head>

<body onLoad="javascript:moveWindow()">
<form action="http://localhost/xxx/wc-api/paymentpos/" method="post" name="returnform">

 <input type="hidden" name="EXTRA.ERTELEMESABITTARIH" value="20121123">
 ....
 <input type="hidden" name="okUrl" value="http://localhost/xxx/wc-api/paymentpos/">
 ...
 <input type="hidden" name="mdStatus" value="2">

 <input type="hidden" name="HASH" value="QZVV9Zfv4tlzi36WJNbLVlbuWY8=">
 <input type="hidden" name="rnd" value="GSZV87rHM+Ol5WDiMbtC">
 <input type="hidden" name="HASHPARAMS" value="clientid:oid:AuthCode:ProcReturnCode:Response:mdStatus:cavv:eci:md:rnd:">
 <input type="hidden" name="HASHPARAMSVAL" value="100200000160451Declined2499850:FE7D7E1062435636DEA77FD3F96CE40C68334FAFE6458F2FC530F26814B29935:4043:##100200000GSZV87rHM+Ol5WDiMbtC">
 ...    

    <!-- To support javascript unaware/disabled browsers -->
    <noscript>
        <center><br>
        Please Click to continue.<br>
        <input type="submit" name="submit" value="Submit" id="btnSbmt"></center>
    </noscript> 
</form>
</body>
</html>
{"result":"failure","messages":"","refresh":"false","reload":"false"}
此响应应触发payment\\u callback()函数。手动触发payment\\u callback(),如http://localhost/xxx/wc-api/paymentpos/. 但这种反应无法触发。我怀疑我是否能正确处理wp\\u remote\\u post响应。

2 个回复
SO网友:Benoti

wp_remote_get 返回json字符串。

您可以使用不同的函数来处理此json响应。wp_remote_head() wp_remote_retrieve_body(), wp_remote_retrieve_header(), wp_remote_retrieve_headers(), wp_remote_retrieve_response_code(), wp_remote_retrieve_response_message()

法典中的示例:

$response = wp_remote_get( \'http://www.example.com/index.html\' );
  if( is_array($response) ) {
     $header = $response[\'headers\']; // array of http header lines
     $body = $response[\'body\']; // use the content
 }
根据页面请求,正文可以是数组、对象或HTML。当然,对于数组或对象,需要像通常一样循环遍历结果。

希望有帮助

SO网友:jgraup

不同之处在于,您对arguments 您在中使用wp_remote_post. 但是因为你有更多的控制权,默认值并不总是一样的。例如User Agent 通常为空wp_remote_post 但在浏览器中提交表单时使用浏览器名称。

当您消费POST 请求没有太大区别。通常情况下$_GET$_POST ($_REQUEST 对于其中一个),位于保存键值对的另一端。

相关推荐

使用WPForms提交表单时触发操作

我的一位客户使用WPForms插件创建前端表单。提交表单时,条目进入de数据库(在单独的表wp\\u wpform\\u entries或类似的表中,全部由插件处理)。但他们也希望以JSON格式将所有数据发布到另一个网站。是否有办法知道表单已提交,或者使用add_filter(\'wp_insert_post)?