2017-08-18 7 views
1

私は外部のAPIとwordpressサイトを統合しています。私は自分のサーバーにポストするフォームを持っており、私は外部APIへのwp_remote_get呼び出しを行うサーバー上の関数を呼び出します。wp_remote_getからブラウザにpdfを送ってください

外部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

javascriptを使用してフォームの情報をURLパラメータとして渡して、自分のフォームを新しいウィンドウにリダイレクトして管理しました。 JavaScriptで

<form onsubmit="return qrsDownload()"> 

そして:私のHTMLで すなわち、

function qrsDownload() { 
    // a bunch of jquery and processing to build the URL.. 
    window.open(url, 'My Title', 'width=800, height=600'); 
} 

私は、私は標準のWPテンプレートを省略することを、私が作成した使い捨てのページテンプレートでした開かれたページ(そうないヘッダ、フッタなし、ノーワードプレスループ)、そのページの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 STRAからの結果を渡すために本質的ではありませんユーザーには戻ってきますが、具体的にはヘッダーがPDFである必要があり、出力を書き出す前にヘッダーを設定する必要があります。これを確実にする簡単な方法は、厳密にはフォームのポストバックではなく、新しいウィンドウで行うことでした。

関連する問題