SalesforceからWP REST APIへOAuth認証を利用して投稿する
salesforceからWP REST APIのエンドポイントへコールアウトして投稿する。
投稿の際には、OAuth認証を利用する。
前提
WordPress側にで、OAuth 1.0a Serverを導入してアプリケーションを作成しておく。
また、そのアプリケーションを使用して、アクセストークンまで取得しているものとする。
通常は承認のフローなどはユーザー側が行うため、アクセストークンまでもった状態からスタートすることはないと思うが、今回は最後の投稿部分だけに絞って試してみた。
WP REST APIでアクセストークンを取得するには、前回書いたこの記事を参考にどうぞ。
WordPress REST APIにOAuth1.0aで認証して投稿する – KayaMemo
リモートサイトの登録
コールアウトする先のドメインを事前に許可しておいてやる必要がある。
設定 -> セキュリティのコントロール -> リモートサイトの設定
から、新規リモートサイト
をクリック。
- リモートサイト名 : 適当な名前
- リモートさサイトのURL : 接続先ドメイン
- プロトコルセキュリティの無効化 : HTTPでも接続を許可するか
- 説明 : 適当な説明
- 有効 : オンに
通常では当然だが、HTTPSでの通信が推奨されている。 しかし、リスクを承知、もしくはテストでの接続の場合など、HTTPでも接続させる場合はこの項目にチェックをつけると許可する事が可能。 今回はテストってことでオンにした。
ちなみに、このリモートサイトへの登録をせずにコールアウトしようとすると、以下のようなエラーが出力される。
Unauthorized endpoint, please check Setup->Security->Remote site settings. endpoint =xxx
OAuth1.0a認証
今回は、WP REST API + OAuth 1.0a Server の設定で投稿するため、OAuth1.0aでの認証になる。
OAuth 1.0a での認証をするためには、アクセストークンやシグネチャなどの情報をヘッダーに付与してやる必要がある。
参考: OAuth1.0の署名(Signature)を作成する方法
これらの処理をするためのクラスがあったのでこちらを参考にさせてもらった。
ただし、このままでは足りない情報があったため、アクセストークンなどを送信するように修正させてもらったものが以下となる。
コールアウトを実装
上記のクラスを利用して実際にコールアウトしてやる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|
コールアウトしたレスポンスがJSONで返ってくるので、投稿した記事IDを取得したい場合はここから取得したりも出来る。
(JSONでの取得はややこしいので、パースすることになるが)