2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Salesforce:カスタムRestAPIをPHPから呼び出すサンプル

2
Last updated at Posted at 2016-10-08

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;
}
2
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?