PHPからカスタムRestAPIを呼び出すサンプルです。作成したカスタムRestAPIの動作チェックなどに利用しています。
前提条件
呼び出すカスタムRestAPIのパスは/example/とし、このカスタムRestAPIは取引先のSalesforce IDをGETパラメータaidで受け取って、当該取引先の情報をjson形式で返すものとします。
サンプルコード
sample.php
<?php
// Salesforce 接続共通設定
$username = ''; // Salesforceの接続に用いるアカウント名(メールアドレス)
$password = ''; // Salesforceの接続に用いるアカウントのパスワード
$token = ''; // セキュリティートークン。接続元IP制限している場合は不要
$client_id = ''; // コンシューマ鍵
$client_secret = ''; // コンシューマの秘密
$oauth2 = 'https://login.salesforce.com/services/oauth2/token'; // OAuth API's URL
$api_version = 'v28.0';
// カスタムRestAPIのパス
$apipath = '/example/';
// カスタムRestAPIに渡すパラメータ設定
$aid = ''; // 情報を取得する対象の取引先のSalesforce ID
// アクセストークン取得
$post = array(
"grant_type" => "password",
"client_id" => $client_id,
"client_secret" => $client_secret,
"username" => $username,
"password" => $password . $token,
);
$curl = curl_init();
curl_setopt( $curl, CURLOPT_URL, $oauth2 );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1 );
curl_setopt( $curl, CURLOPT_POSTFIELDS, $post );
$buf = curl_exec( $curl );
if ( curl_errno( $curl ) ) {
exit;
}
curl_close( $curl );
$json = json_decode( $buf );
$instance_url = '';
$access_token = '';
try {
$json = json_decode( $buf );
$instance_url = $json->instance_url;
$access_token = $json->access_token;
} catch ( SalesforceApiException $e ) {
exit;
}
// カスタムRestAPI情報取得
$endpoint = $instance_url . '/services/apexrest' . $apipath . '?aid=' . $aid;
$result = salesforce_curl_get( $endpoint, $access_token );
if (! $result ) { exit; }
$json = json_decode( $result );
// 取得した情報を出力して終了
echo var_dump( $json );
exit;
function salesforce_curl_get( $api, $access_token ) {
$curl = curl_init();
curl_setopt( $curl, CURLOPT_HTTPHEADER, array( "Authorization: OAuth ${access_token}" ) );
curl_setopt( $curl, CURLOPT_URL, $api );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1 );
$buf = curl_exec( $curl );
if ( curl_errno( $curl ) ) {
return '';
}
curl_close( $curl );
return $buf;
}
?>
実行方法
コマンドラインから実行します。
php sample.php
RestAPIをPOSTでコールするには?
サンプルではGETでカスタムRestAPIをコールしています(salesforce_curl_get)が、次のようにPOSTでコールする事もできます。POSTで送りたいパラメータを連想配列 $send に指定して使います。
function salesforce_curl_post( $api, $access_token, $send=array() ) {
$curl = curl_init();
curl_setopt( $curl, CURLOPT_HTTPHEADER, array( "Authorization: OAuth ${access_token}", "Content-Type: application/json" ) );
curl_setopt( $curl, CURLOPT_URL, $api );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1 );
curl_setopt( $curl, CURLOPT_CUSTOMREQUEST, 'PATCH' );
curl_setopt( $curl, CURLOPT_POSTFIELDS, json_encode( $send ) );
$buf = curl_exec( $curl );
if ( curl_errno( $curl ) ) {
return '';
}
curl_close( $curl );
return $buf;
// 返却値ではなくHTTPステータスを返したい場合は以下のようにする。
// $http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
// curl_close( $curl );
// return $http_code;
}