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

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

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

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

6190閲覧

SimpleMembershipでStripe決済ボタンを設置しようとすると本番環境でエラーが出る

kawai_haruka

総合スコア2

Stripe

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2021/06/11 08:06

編集2021/06/12 05:15

お世話になります。下記エラー状況の解消に向けて、アドバイスをいただければ幸いです。

【現状と解消したいエラー】
現在WordPressサイトで「SimpleMembership」プラグインを利用して有料会員サイトを運営しております。
いままでPayPal決済のみで対応していたのですが、決済方法にStripeも導入しようと、
本番WordPressサイト(現在運用している本番ドメイン。仮に「Xサーバー上のhttps://A.com」と呼びます。)
と同一サーバー上のテスト環境(仮に「Xサーバー上のhttps://B.com」と呼びます。現在は運用していない別ドメインを使っています。)で以下の状況下で動作テストをしました。
結果、「Xサーバー上のhttps://B.com」では正常に動きました。

・同一テーマ(TCD AVANT)
・同一プラグイン(設定も同じ)
・同一サーバー(Xサーバー)

ところが、いざ本番の「Xサーバー上のhttps://A.com」に実装しようと
非公開ページに同一設定で決済ボタンを設置したところ、
「購入する」ボタンを押すと、以下のエラー画面に遷移してしまいます。

Error occurred: No API key provided. (HINT: set your API key using "Stripe::setApiKey(<API-KEY>)". You can generate API keys from the Stripe web interface. See https://stripe.com/api for details, or email support@stripe.com if you have any questions.

エラーが発生しました:APIキーが提供されていません。 (ヒント:「Stripe :: setApiKey(<API-KEY>)」を使用してAPIキーを設定します。StripeWebインターフェイスからAPIキーを生成できます。詳細についてはhttps://stripe.com/apiを参照するか、support @に電子メールを送信してください。ご不明な点がございましたら、stripe.comをご覧ください。

ちなみに、Stripeのサポートセンターにも問い合わせましたが、Stripe側には問題はなく、WordPress側は調べられないため解決できませんでした。
また、今回WordPressサイトとの接続を確認したStripe環境は「テストモードのみ」です。(Live環境では試していません)

【現在確認できている状況(プラグインから出力されるはずのStripe('')の値が取得できていない)】

まず、凡ミスを疑ってAPIキーは何度もテスト環境と同一だということを確認しました。
よって、入力ミスなどAPIキー設定が間違っているということではありませんでした。
そこで、
エラーが出てしまうサイトの決済ボタン配置ページのHTMLを確認したところ、以下の部分が空欄になってしまっていることが確認できました。

html

1コード 2<div class="swpm-payment-button"> 3<div class="swpm-button-wrapper swpm-stripe-buy-now-wrapper"> 4 <form id='swpm-stripe-payment-form-12345' action='http://test.local/?swpm_process_stripe_sca_subscription=1&ref_id=swpm_7xxxxxxx' METHOD='POST'> 5<div style='display: none !important'> 6<script src="https://js.stripe.com/v3/"></script> 7<link rel='stylesheet' href='https://checkout.stripe.com/v3/checkout/button.css' type='text/css' media='all' /><script> 8//該当部分 本来 var stripe = Stripe('pk_test_xxxxxxxx')とStripeキーが入るべき場所が空欄 9 var stripe = Stripe(''); 10//該当部分ここまで 11 jQuery('#swpm-stripe-payment-form-12345').on('submit',function(e) { 12 e.preventDefault(); 13 var btn = jQuery(this).find('button').attr('disabled', true);

また、GoogleDeveloperToolのConsoleでは当然のように

Uncaught IntegrationError: Please call Stripe() with your publishable key. You used an empty string.

と文字列が空だとしてエラーが出ています。

変数 stripe の中身を「console.log = stripe;」とConsoleに入力して確認してみましたが

undefined 

と返ってきてしまいます。
正常に動作しているサイトでは

e {_listenerRegistry: {…}, retrieveSource: ƒ, …}

verifyMicrodepositsForSetup: ƒ (r,a)
_apiKey: "pk_test_xxxxxxxx"

と返ってきます。

【試したこと】
(以下大幅に追記と変更をしました)
■ややこしくなるので今の検証環境の表記を整理しておきます。
1)Xサーバー上のhttps://A.com ※本番環境
2)Xサーバー上のhttps://B.com ※テスト環境
3)Local A ※ローカル環境上にhttps://A.comをコピーしたもの
4)Local B ※ローカル環境上にhttps://B.comをコピーしたもの
Xサーバー設定が原因なのか?WordPressが原因なのか?を切り分けたく、上記4種を用意しました。

■Stripe購入ボタンの状況
いずれも、SimpleMembershipのStripeボタン設定は
・Stripe管理画面で「テストモードを表示」をON
・プラグインの支払ボタン新規作成で「Stripe SCA Subscription」を選択
・Test用入力欄にTestキーを入力
・Live用入力欄は空欄
(※「Use Global API Keys Settings」のチェックははずしています。)
で設定しています。

  1. WPテスト環境「Xサーバー上のhttps://B.com」を作成してボタンを設置 :WPテスト環境ではStripeテスト環境が正常に動作することを確認

  ・同一テーマ(TCD AVANT)
・同一プラグイン(設定も同じ)
・同一サーバー(Xサーバー)
の状態で設置してみました。

  1. ローカル環境「Local A ※https://A.comをコピーしたもの」を作成してボタンを設置 :エラーが出ることを確認
  2. ローカル環境「Local B ※https://B.comをコピーしたもの」を作成してボタンを設置 :正常に動作することを確認

  よって、Xサーバーの設定ではないと考え、意向はローカル環境でテストしました。

  1. 正常に動作するLocal Bへ、エラーがでるLocal Aのテーマとプラグインをコピー :正常に動作することを確認

 All in One Migrationを使って、エラーが出るWP本番環境のデータベース以外の部分をコピーしてみましたが、正常に決済画面に進めました。
また、エラーが出ているサイトのプラグインをSimpleMembership以外すべてOFFにしましたが解決しませんでした。
よってプラグインやテーマの問題ではないと思っております。

  1. 正常に動作するLocal Bへ、エラーがでるLocal Aデータベースをコピー:テスト環境では正常に動作することを確認

 試しにデータベースもコピーしてみました。ただし、MySQL の wp_options 以外です。

上記のように、正常に動作するWPサイトとエラーが出る本番サイトの違いを比較しようと色々と検証したのですが、原因が特定できませんでした。

【お聞きしたいこと】
上記エラー内容をご覧いただいた上で、考えられる原因はわかりますでしょうか?

また、他に原因特定に役立つ検証方法などあればご教授いただけると嬉しいです。
上記の試した内容を踏まえて、使用テーマ・プラグイン・Sripeの購入ボタン設定の入力ミスが原因ではないとは思いますが、もし漏らしている検証方法などありましたらお教えいただければ幸いです。
また、Stripeサポート以外で、他に質問する適切な場があればお教えいただければ助かります。

何卒よろしくお願い致します。

【追記】
検証したサイトがわかりづらくなってしまっているようなので、表記を統一して変更しました。

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

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

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

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

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

tabuu

2021/06/11 08:58

>同一サーバー上のテスト環境で以下の状況下で動作テストをし正常に動きました。 WordPressはテスト環境ということですが、StripeのLive環境と接続されようとしているのでしょうか? >1.テスト環境を作成してボタンを設置 :テスト環境では正常に動作することを確認 試したことですが、WordPressのテスト環境をもう1つ作ってStripeのTest環境と接続は成功されたのでしょうか?
kawai_haruka

2021/06/11 09:32

ご質問ありがとうございます。 >WordPressはテスト環境ということですが、StripeのLive環境と接続されようとしているのでしょうか? StripeのLive環境というのは、テストモードではない状態ということで合っていますでしょうか? そうしましたら、今回試しているStripeはすべてテスト環境(テストモード)の状態です。 >試したことですが、WordPressのテスト環境をもう1つ作ってStripeのTest環境と接続は成功されたのでしょうか? 仰る通りです。XサーバーのWPテストサイトとStripeのテスト環境との接続は成功しました。 また、記入漏れで申し訳ないのですが Xサーバーのなんらかの設定が問題の場合も考え、 念の為、local by flywheelでも「テスト環境のコピー」「本番環境のコピー」と同じ状況を作りましたが、 Xサーバー上と同様「本番環境のみ」エラーが出ました。
yuki84web

2021/06/11 11:35

WAF有効にしているとか?
tabuu

2021/06/11 11:42

本番環境はPaypal決済が動いているんですよね? その状態でStripeは本番環境ではなくテスト環境ってどのようにされているのでしょうか?
kawai_haruka

2021/06/12 02:27

yuki84web様 ありがとうございます。ローカル環境にエラーがでる本番環境をコピーした際にも、エラーが出たので、サーバー側の設定ではないと切り分けてしまったのですが、 以前もPayPal導入時にXサーバー側のセキュリティ設定が問題だったことがあるので、 今回ももう一度WAF設定が関係しているか見直してみます。 知見をいただき感謝いたします。 tabuu様 引き続きありがとうございます。 仰るとおり、本番環境ではPayPal決済が稼働しています。 WP本番サイトでのStripeのテストは以下の通り行っています。 - Stripe側でテストモードを起動(テスト用クレジットカード番号が使える状態) - テストモードで発行される公開キーやシークレットキー、StripeIDを取得 - SimpleMembershipプラグインで購入ボタンを作成 - 非公開ページにショートコードを貼り付けて設置 をしてテストをいたしました。 ちなみに、ブラウザキャッシュクリア・WPキャッシュクリアも試しまして、サーバーキャッシュはもともとOFFでした。
tabuu

2021/06/12 04:30

SimpleMembershipはTest用とLive用のそれぞれのStripeのキーを入力する欄がありますが、 どのように入力していますか? WordPressの本番環境は SandBoxがOFF、 Live用の入力欄にStripeのTestキーを入力 WordPressの検証環境は SandBoxがON、 Test用の入力欄にStripeのTestキーを入力 ということ?
kawai_haruka

2021/06/12 05:19

tabuu様 ご質問ありがとうございます。 確認ですが、 SandBoxのON/OFFというのは、Stripe管理画面で「テストモードを表示」のON/OFFのことでしょうか? であれば、今回検証しているすべてのボタン設定は、本番環境であれテスト環境であれ ・Stripe管理画面で「テストモードを表示」をON ・プラグインの支払ボタン新規作成で「Stripe SCA Subscription」を選択 ・Test用入力欄にTestキーを入力 ・Live用入力欄は空欄 (※「Use Global API Keys Settings」のチェックははずしています。) で統一しております。 また、本番環境、テスト環境がややこしくなってしまうため、本文の呼称を変更して整理しました。
tabuu

2021/06/12 05:55

>SandBoxのON/OFFというのは、Stripe管理画面で「テストモードを表示」のON/OFFのことでしょうか? いえ、SimpleMembershipの設定です。 本番環境がPaypal決済を稼働しているということはSimpleMembershipのSandBoxがオフに なっているということではないでしょうか? その状態でどのようにStripeのテスト環境と接続しているのか気になります。
kawai_haruka

2021/06/12 06:39

tabuu様 ありがとうございます。 仰る通りSandBoxのEnable Sandbox Testingのチェックが WordPressの本番環境は SandBoxがOFF、 Test用の入力欄にStripeのTestキーを入力 WordPressの検証環境は SandBoxがON、 Test用の入力欄にStripeのTestキーを入力 の状態になっておりました。 完全に見落としておりました。 ためしに、検証環境でチェックをはずしたところ、同様のエラーが出ましたので、原因がこのSandBoxがOFF状態でTestキーで検証していた所為だとわかりました。 だいぶ遠回りしてしまい、時間を無駄にしてしまったようです… ご助言いただき大変助かりました。 ありがとうございました。
guest

回答1

0

自己解決

▼SimpleMembershipの決済ボタンがStripeのテスト用キーを使用しているにもかかわらず、
▼SimpleMembershipのSandboxがOFFの状態(Enable Sandbox Testingのチェックが外れている)だったことが原因

でした。

私の設定項目に対する理解不足でした。

WAFの可能性をご指摘いただいたyuki84web様、
的確に見直しポイントをご指南いたいたtabuu様、ありがとうございました。

投稿2021/06/12 06:47

kawai_haruka

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問