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

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

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

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Q&A

2回答

1741閲覧

アクセス制限をかけている開発環境でPayjpのWebhookが使えない

退会済みユーザー

退会済みユーザー

総合スコア0

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

0グッド

0クリップ

投稿2020/03/02 02:00

前提・実現したいこと

Amazon EC2を利用して公開しているステージサイトでPayjpのWebhookのテストをしたいです。
Cakephp3で作成しているサービスで、ローカルで開発しているときはngrokを使いWebhookとシステムの疎通をしていました。

発生している問題・エラーメッセージ

ステージサイトのURLを指定して、Payjpの管理画面からWebhookのテスト送信を行うと、Payjp管理画面でこのようなフラッシュメッセージが表示されます

送信に失敗しました: 接続エラー

該当のソースコード

public function webhook() { $this->log('Payments->webhook() >>>>>', LOG_DEBUG); $this->request->allowMethod(['post']); $this->autoRender = false; $failed = false; $execProccess = false; if (!$this->_isPayjpPost($this->request)) { $this->log('> BadRequestException() - _isPayjpPost', LOG_DEBUG); throw new BadRequestException(); } $payjpPostData__type = $this->request->getData('type'); if (empty($payjpPostData__type)) { $this->log('> BadRequestException() - payjpPostData__type', LOG_DEBUG); throw new BadRequestException(); } $this->log('> payjpPostData__type - ' . $payjpPostData__type, LOG_DEBUG); $this->log($this->request->getData(), LOG_DEBUG); switch ($payjpPostData__type) { case 'subscription.paused': // 定期課金の停止 $failed = true; $execProccess = true; break; ・・・支払いの成功失敗など case 'token.created': // トークンの作成 case 'customer.created': // 顧客の作成    ・・・・その他顧客情報の更新など default: } if ($failed) {    ・・・一部実況状況の記録保存・・・ } if ($execProccess) { ・・・一部実況状況の記録保存・・・ } $this->log('<<<<< success Payments->webhook()', LOG_DEBUG); $result = "success"; $this->set('result', $result); $this->set('_serialize', ['result']); } /** * PAYJPからのリクエストか否か */ private function _isPayjpPost($request) { $checkPayjpWebhookToken = Configure::read('Payjp.Webhook.token'); $requestPayjpWebhookToken = $request->getHeaderLine('X-Payjp-Webhook-Token'); return $checkPayjpWebhookToken === $requestPayjpWebhookToken; }

試したこと

アクセス制限をかけている環境なので、利用するWebhookの送信元のIPアドレスを許可するよう担当者にサーバー設定頼みました

cakephpで設定しているPayjpの鍵とWebhookのTokenは定数設定ファイルで現在利用しているものに変更されているか確認しました

Webhookのリクエストを飛ばすURLが間違っていないか、ブラウザからアクセスして対象のメソッドに到達するか確認しました
(https://ドメイン/コントローラー/メソッド)

サーバーの /etc/httpd/logs/の直下にある、アクセスログとエラーログを確認しました
(テストリクエストを投げましたが、記録はついてませんでした)
cakephpそのもののアクセスログとエラーログも同様に何も吐き出されていませんでした

この他確認すべき項目や、この環境であればこれが必要などありましたらご指摘いただきたいです

補足情報(FW/ツールのバージョンなど)

cakephp3
Amazon aws EC2
Payjp webhook

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

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

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

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

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

guest

回答2

0

アクセスログに残らないということは、IP制限が掛かったままの可能性が一番高いですね。

Webhookの送信元のIPアドレスは正しいものを設定してもらっていますか?

PAY.jpのドキュメントには記載がないので3年前のアナウンス記事となりますが以下のIPのようです。

Webhookの送信元IPアドレスが変わります - PAY.JP Announcement

新規の送信元IPアドレスの一覧
54.249.69.31
54.248.75.29 (追加)
54.248.78.213 (追加)
54.248.225.75 (追加)
54.248.228.139 (追加)

現在もこれで正しいかはわかりませんので、送信元IPアドレスについてはPAY.JPのサポートに問い合わせるのが確実かと思います。

投稿2020/03/02 10:26

nojimage

総合スコア959

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

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

0

どう制限してるのかも分からないと何も分からない。
サーバーにも届いてないならサーバーの設定。

どこか悪いかって担当者に言わないと変更できない部分では。
AWSならその程度は開発者がさっと変更できないとまともに開発できない。

投稿2020/03/02 02:39

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問