我将wordpress网站与外部API集成在一起。我有一个表单发布到我的服务器,我在我的服务器上调用一个函数,该函数对外部API进行wp_remote_get调用。
外部API返回PDF,标题如下:
[date] => Fri, 18 Aug 2017 15:59:19 GMT
[x-powered-by] => Servlet/3.0
[cache-control] => no-cache
[content-type] => application/pdf;charset=utf-8
[content-language] => en-US
响应正文是令人讨厌的字符串格式的PDF,这似乎是一个好的开始。
如何将此PDF传递给用户的浏览器? 即,
$response = wp_remote_get( $url, array ( //stuff the request needs));
if (is_wp_error ($response)) {
$error_message = $response->get_error_message();
echo "Something went wrong: $error_message";
} else {
//What here?
}
我必须首先点击我的服务器,不能将表单直接发布到外部API。
答案 0 :(得分:0)
我通过使用javascript将我的表单提交重定向到我的网站上的新窗口,并将表单信息作为URL参数传递给我。 即 在我的HTML中:
<form onsubmit="return qrsDownload()">
然后在javascript中:
function qrsDownload() {
// a bunch of jquery and processing to build the URL..
window.open(url, 'My Title', 'width=800, height=600');
}
我打开的页面是我创建的一次性页面模板,我省略了标准WP模板(所以没有标题,没有页脚,没有wordpress循环),并且在该页面的php文件中:
<?php
if (isset($_GET['someParam'])) {
// started off with logic to verify that I had the params needed
// because anybody could just jump directly to this page now
}
$url = "whateverurl.com/myendpoint";
// additional logic to set up the API call
$server_response = wp_remote_get($url, $args);
if (is_wp_error( $server_response) ) {
// do something to handle error
} else {
// PASS OUR PDF to the user
$response_body = wp_remote_retrieve_body( $server_response);
header("Content-type: application/pdf");
header("Content-disposition: attachment;filename=downloaded.pdf");
echo $response_body;
}
} else {
get_header();
$html = "<div class='content-container'><p>A pretty error message here.</p></div>";
echo $html;
get_footer();
}
?>
该方法基本上是将API的结果直接传递给用户,但是您需要标题来指定它是PDF,并且必须在写出任何输出之前设置标题。确保这一点的一种更简单的方法是在新窗口中进行,而不是严格地在表单回发上进行。