質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Stripe

Stripeとは、米国のオンライン決済システム提供企業、及び同社が提供する決裁システムを指します。Webサイトやモバイルアプリにコードを組み込むことでクレジットカードなどの決済サービスが簡潔に追加できます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

1回答

1285閲覧

WordPress:Stripe決済を導入しているが決済後?に完了ページにリダイレクトしない

X-men

総合スコア12

Stripe

Stripeとは、米国のオンライン決済システム提供企業、及び同社が提供する決裁システムを指します。Webサイトやモバイルアプリにコードを組み込むことでクレジットカードなどの決済サービスが簡潔に追加できます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2018/11/05 03:39

編集2018/11/06 01:16

WordPressで作成したサイトにStripe決済を導入しようと思い、下記のページを参考に全く同じようにやってみたのですが、最後の「完了ページへのリダイレクト」がうまくいかない状態です。
WordPressでカード決済!Stripeの使い方【自動返信メール対応】

▼以下決済ボタンページのHTML

<form action="https://●●●●●●●●.co.jp/wp-content/themes/●●●●●●●●/checkout.php" method="POST"> <script src="https://checkout.stripe.com/checkout.js" class="stripe-button" data-key="pk_test_●●●●●●●●" data-amount="10000" data-name="株式会社●●●●●●●●" data-description="●●●●●●●●" data-image="https://stripe.com/img/documentation/checkout/marketplace.png" data-locale="auto" data-currency="jpy" data-zip-code="false" data-allow-remember-me="false" data-label="申し込む(決済する)"></script> </form> </div>

▼以下checkout.php

<?php require_once( dirname(__FILE__).'/lib/stripe-php-6.19.5/init.php'); // Set your secret key: remember to change this to your live secret key in production // See your keys here: https://dashboard.stripe.com/account/apikeys \Stripe\Stripe::setApiKey("sk_test_●●●●●●●●"); // Token is created using Stripe.js or Checkout! // Get the payment token submitted by the form: $token = $_POST['stripeToken']; $email = $_POST['stripeEmail']; // フォームから情報を取得: try { $charge = \Stripe\Charge::create(array( "amount" => 10000, "currency" => "jpy", "source" => $token, "description" => "●●●●●●●●", )); }catch (\Stripe\Error\Card $e) { // 決済できなかったときの処理 die('決済が完了しませんでした'); } // 自動返信メール mb_language("Japanese"); mb_internal_encoding("UTF-8"); $title = "●●●●●●●●お申し込みありがとうございます"; $content = "●●●●●●●●お申し込みありがとうございます。\nクレジットカード決済が完了いたしました。"; $from_name = "株式会社●●●●●●●●"; $from_addr = "info@●●●●●●●●.co.jp"; $from_name_enc = mb_encode_mimeheader($from_name, "ISO-2022-JP"); $from = $from_name_enc . "<" . $from_addr . ">"; $header = "From: " . $from . "\n"; $header = $header . "Reply-To: " . $from; //to user send mail if(mb_send_mail($email,$title, $content, $header, "-f" .$from_addr)){ echo "メールを送信しました"; } else { echo "メールの送信に失敗しました"; }; // 管理者宛メール $title_me = "Stripe決済がありました"; $from_me = "info@●●●●●●●●.co.jp"; $content_me = "●●●●●●●●申し込みで\nStripe決済がありました。"; if(mb_send_mail($from_me,$title_me, $content_me, $header, "-f" .$from_addr)){ echo "メールを送信しました"; } else { echo "メールの送信に失敗しました"; }; // サンキューページへリダイレクト header('Location: https://●●●●●●●●.co.jp/stripe-thanks.html'); exit; ?>

決済ボタンを押しても、上記のサンキューページへリダイレクトせず、
https://●●●●●●●●.co.jp/wp-content/themes/●●●●●●●●/checkout.php
ページになったままの状態です。

どなたかご教授いただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2018/11/05 11:15

うまくいかないとはどのような状態になるのでしょうか? 具体的に発生している状態を記載してください。
X-men

2018/11/06 01:16

説明不足で申し訳ございません。現在の状態を追記いたしました。
CHERRY

2018/11/06 03:23

Webサーバーのエラーログや Web ブラウザのコンソールでエラーが出ていたりしないでしょうか?
X-men

2018/11/06 04:32

決済ボタンのページには以下のようなエラーがありましたが、
X-men

2018/11/06 04:32

Error in event handler for runtime.onMessage: SecurityError: Failed to read the 'cssRules' property from 'CSSStyleSheet': Cannot access rules at findStyleSheets (chrome-extension://diebikgmpmeppiilkaijjbdgciafajmg/scripts/content-script.js:1014:12) at chrome-extension://diebikgmpmeppiilkaijjbdgciafajmg/scripts/content-script.js:1052:13
X-men

2018/11/06 04:33

https://●●●●●●●●.co.jp/wp-content/themes/●●●●●●●●/checkout.phpにはなにもエラーはありませんでした。
CHERRY

2018/11/06 05:11

Web サーバーのログにもエラーはなかったということでよろしいですか? checkout.php で送信しているメールは全て届いている状態ですか?
X-men

2018/11/06 05:33

はい、サーバーにも特にエラーは見当たりませんでした。ただメールは全く届いていない状態です。
CHERRY

2018/11/07 03:57 編集

php から送信されたかどうか smtp サーバー(メールサーバー)のログは、確認できるでしょうか? smtp のログもないということであれば、checkout.php のどこかで、エラーが発生していると思われます。たとえば、最初の決済失敗の部分の die で終了しているとメールは送信されないし、リダイレクトもされないと思われます。
guest

回答1

0

ベストアンサー

原因を特定しての回答ではありませんが、ソースコードで気になったので、記載しておきます。

PHPマニュアル > header

覚えておいて頂きたいのは、header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。
頻出するエラーとして、include または require 関数、他のファイルをアクセスする関数に 空白または空行があり、header() の前に出力が 行われてしまうというものがあります。同じ問題は、単一の PHP/HTML ファイルを使用している場合でも存在します。

と記載されています。

質問に記載されている checkout.php には、 header() 関数の前に dieecho 等のテキスト出力する関数が使われているので、header()が実行されても、PHPマニュアルの注意事項にある「header()前に出力されているエラー」になり、リダイレクトされません

投稿2018/11/07 04:47

CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

X-men

2018/11/07 08:45

ご回答ありがとうございます。 おっしゃる通り、header()以前をすべて削除しましたところ、リダイレクトしました。 ただ、 $charge = \Stripe\Charge::create(array( "amount" => 10000, "currency" => "jpy", "source" => $token, "description" => "お申し込み", )); この部分を残してしまうと、リダイレクトしなくなってしまいました。 こちらも影響してしまうのでしょうか。
CHERRY

2018/11/07 11:13

` \Stripe\Charge::create ` が、呼び出せなくて、エラーになっていることはないでしょうか?
X-men

2018/11/08 09:49

ご回答ありがとうございます。Stripeにも色々と問い合わせていたのですが、そもそも今のサーバーでTLSやPHP(今は5.3)のバージョンに問題がありそうです。 なので、一度その辺りも含めて一度見直してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問