Webサイトから安全にSalesforceへデータ登録
Web to Lead、Web to CaseがリキャプチャV3に対応していなかったり、
特定のサーバー以外からも登録できたりとセキュリティに問題意識を感じるシチュエーションがあったので、
Webサイト上の問い合わせフォームからOAuth認証をしてREST APIで登録できるようにしました。
記事の通りやってみる
ということで、記事の通りまずはやってみました。
ここまでは本当に難なくクリア。手順通りやっていけば出来るよって記事でした。
問い合わせフォーム化
上記記事では、サーバー上でphpを実行してSalesforceに登録するって仕組みでした。
そのままフォーム化すれば出来るだろう!ってことで、こんな感じで作ってみました。
問い合わせページ「contact.php」→問い合わせ処理ファイル「contact_post.php」への値の渡し方は以下のサイトを参考に実施。
さてやってみたところすんなりうまく行きました!
翌日社内に共有したところ問題発生…!
この記事の通りなんですが、Salesforceのセッション時間があるらしく、それが切れると再度セッション取得をしないといけないようでした。
なのですが、なぜかWebフォームからだと出来ない…
Error: '401 Unauthorized HTTP'
色々試しても401…401…401…
・PHPの実行ユーザーを変更
・ファイル権限の変更
あと何を試したかわからないくらい…
そもそも環境変数を読み込めないらしい。
今回記事を見て設定した方法だとWebサイトからのアクセスではユーザーに指定した(?)環境変数が読み込めないらしい…(おい、まじか)
なので、いったんファイルに書き出して、ファイルにログイン情報などを転記しそっちを読み込むことに。
これもエラーログ吐かせて吐かせてようやくわかったこと…
だって、セキュアな情報だからWeb画面上に表示できなくしているとかありえそうじゃん!
それは置いておいて、ようやく認証が試行されたので次へ
「安全でないチャネルを介してログインしています」…?
Salesforceのログイン履歴を見たら、「 安全でないチャネルを介してログインしています」ということでうまくログインができていないことがわかりました。
ここでまたドツボにはまりました…
結論だけ伝えると、「Force.com-OAuth-Toolkit-for-PHP」の「OAuth.php」の中の記述がNGでした。
TLS1.1は2019年9月からSalesforceのサポート対象外になったので使えないのです。
// TLS1.1は2019年9月からSalesforceのサポート対象外になったのでコメントアウト
// curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_1);
ここも、「contact_post.php」という記事を参考に作ったファイルの処理がダメだと思って色々試したのですが、どうしてもわからず…
まさか大元だったとは。
まとめ
ということで紆余曲折ありましたが無事に問い合わせフォーム作成することが出来ました。
レイアウト整えたりは残作業として残りますが、仕組みを知れて良かったです。
「Force.com-OAuth-Toolkit-for-PHP」に躓いたのも事実ではありますが、こういう素晴らしいツールを作成し提供してくれる人がいるから、我々は簡単に機能の実装ができるんだなと思うので、なんだかんだ言いつつも感謝しかないです。(自分でいちからSalesforceのドキュメント見ながらやったら途中で挫折していますw)
ということで、今回はここまで!
次回はリキャプチャV3の実装でもやってみようかな。
過去の記事はこちらから。
第1話:サーバー契約した話
第2話:wordpressを入れてみた話
この記事が気に入ったらサポートをしてみませんか?