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

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

ただいまの
回答率

88.10%

PHP×SOAP ヘッダー情報の付与方法を教えてください

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 773

score 4

前提・実現したいこと

PHPを用いて、SOAP通信を実現したいです。
現状通信元のサーバがPHP・SOAPどちらも利用可能であることは確認済みです。
ただ、通信しようとしているAPI側がヘッダーに認証情報を設定しないと
いけないのですが、いろいろと調べて試してみたものの
SOAPヘッダがエラーと返ってきている状況です。

私自身JavaやRubyなどの開発経験はあるのですが、
PHP自体は疎いので、色々とおかしな点があるかもしれません。
そういった点も含めて全体的に見ていただけたら幸いです。

下記ソースのconfig.txtには、認証に必要な
logId,logArgment,apiKey が記載されております。

■WSDL情報
https://ax.ebis.ne.jp/v2.3/services/AdService?wsdl

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

<?xml version='1.0' encoding='utf-8'?>
 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
 <soapenv:Body>
  <soapenv:Fault>
   <faultcode>soapenv:EAW10000</faultcode>
   <faultstring>SOAPヘッダが不正です.</faultstring><detail />
  </soapenv:Fault>
 </soapenv:Body>
</soapenv:Envelope>
connection error

該当のソースコード

<?php

class RequestParams {
    public $startDate = '';
    public $endDate = '';
    public $conversionIds = array();
    public $adGroup1Ids = array();
    public $adGroup2Ids = array();
    public $mediaIds = array();
    public $adIds = array();
    public $terminalTypes = array();
    public $keyward = '';
    public $includeNaturalConversion = false;
}

class HeadParams {
    public $logId;
    public $logArgument;
    public $apiKey;
}

$filename = './config.txt';
$file = fopen($filename, 'r');
$key_ary = array();
if($file) {
    while($line = fgets($file)) {
        array_push($key_ary, $line);
    }
} else {
    file_put_contents("./error.txt", 'config read error');
}
fclose($file);

$wsdl = 'https://ax.ebis.ne.jp/v2.3/services/AdService?wsdl';
$ns   = 'http://entity.ws.extreme.ebis.ne.jp/xsd';
$opt = ['trace'=>1];

$searchcondition = new RequestParams();
$searchcondition->startDate = '2020/01/01';
$searchcondition->endDate = '2020/01/01';
$searchcondition->mediaIds = array(77);

$hp = new HeadParams();
$hp->logId = $key_ary[0];
$hp->logArgument = $key_ary[1];
$hp->apiKey = $key_ary[2];

try{
    $client = new SoapClient($wsdl, $opt);

    $header = new SoapHeader($ns, 'HoteiAuthHeader', $hp);
    $client->__setSoapHeaders($header);

} catch (Exception $e) {
    file_put_contents("./error.txt", 'wsdl read error');
}

try{
    $result = $client->getAdConversionAttributesCount($searchcondition);
} catch (SoapFault $e) {
    file_put_contents("./error.txt", 'connection error');
}

$resultstr = $client->__getLastResponse();
file_put_contents("./result.txt", $resultstr);

?>

<?php
    echo 'FINISH';
?>

試したこと

上記のコードからは何も試せていないです。

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

SOAP 1.1
PHP Version 5.4.45

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

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

  • ただいまの回答率 88.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る