サイトにペイパルを組み込んでいますが、トークンを受け取ってペイパルのサイトにリダイレクトしようとしても、何も起こりません。フロントエンドでknockout.jsを使用しています。ボタンをクリックして GET リクエストを行うと、対応する CakePHP アクションに値が送信され、データが検証され、paypal のサイトにリダイレクトされてトランザクションが完了します。
ここが奇妙な部分です。最初は、GET を作成するために jQuery を台無しにしたと思っていましたが、そうではないようです。対応するアクションに含まれる header('location...') コードを使用して GET リクエストを行うと、ネットワーク タブにリクエストが「キャンセルされました」と表示されます。ただし、header('location..') コードをコメントアウトすると、リクエストは正常に処理されます。
ここにGETリクエストがあります
//order_processing.js
$.getJSON("/orders/pay_for_order/" + itemNumbers + "/" + quantities + "/" + prices + "/" + productNames + "/" + self.fullName() + "/" + self.addressLine1() + " " + self.addressLine2() + "/" + self.city() + "/" + self.state() + "/" + self.ZIP() + "/" + self.email(),function(data) {
});
リクエストが送信されるアクションは次のとおりです
//OrdersController
function pay_for_order($id = null){
//processing code here
//get token from paypal
if($finalize_order->verifyPrice($item_numbers, $prices) == TRUE){
//when I comment out this header redirect the GET request is successful, but of course then does not redirect
header( 'Location: https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token='.$token ) ;
}
}
リンクをコピーしてアドレスバーに貼り付けると、リダイレクトされるため(トークンが正常に受信されたことを意味します)、paypalへの呼び出しが正しく機能してトークンを取得できることを知っています。これは、リクエストを行うjQueryの問題のようです。ただし、ヘッダーリダイレクトが含まれているときにGETリクエストが失敗する理由について混乱していますが、コメントアウトするとGETがパスします。
アップデート
次のヘッダーリダイレクトを交換しましたが、失敗しませんが、リダイレクトもしません。このコードはレスポンスにも表示されるので、おそらく CakePHP が header('location') リダイレクトを好まないことを意味していると思います。
echo '<META HTTP-EQUIV="Refresh" Content="0; URL=https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token='.$token.'">';