XML Datei mit Zertifikat versenden via SOAP + PHP
Markus
- php
XML Datei mit Zertifikat versenden via SOAP + PHP
Hallo zusammen,
ich habe eine Frage bzgl. der Übertragung von XML Dateien via SOAP mit zertifikat + PHP.
Gegeben habe ich eine Beispiel - XML - Datei (siehe unten), Zugangsdaten zu einem Server:
[url]https://b2blabla.eu.net/8000[/url] (was etwa so aussieht) und man hat mir noch ein Zertifikat
mitgegeben, was der Server dann offensichtlich zur Authentifizierung benötigt.
Soweit so gut, die Frage ist nun, kann mir jemand sagen, wie ich mit einer PHP Anwendung mit diesem Server sprechen kann?
Heisst, ich könnte diese XML Datei automatisch aus der Datenbank heraus erstellen lassen. Das funktioniert auch schon. Jetzt würde ich sie gerne nach dem Auslösen eines Submit-Buttons zur anderen Seite --> [url]https://b2blabla.eu.net/8000[/url] schicken, wo es dann dort wieder von einer SAP-Anwendung eingelesen werden soll.
Hat jemand eine Ahnung, wie man sowas bewerkstelligen könnte?
Wäre um jeden Rat sehr dankbar.
Viele Grüsse und schon mal mercie!
Markus
P.S. Ach ja, meine Anwendung, welche die XML Dateien erzeugt und auch zum anderen https:/... Server senden soll, basiert auf einem Debian Server, einer MySQL Datenbank und HTML-Doc und natürlich PHP..
P.P.S. Hier noch ein Beispiel einer ähnlichen XML-Datei, die schon bereits immer vorliegt und automatisch erzeugt werden kann:
[CODE]<?xml version="1.0" encoding="UTF-8"?>
<!-- Mit XMLSpy v2005 rel. 3 U bearbeitet (http://www.altova.com) von () -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:simpleType name="AuftragsID">
xs:annotation
xs:documentationLALA-ID</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:integer">
<xs:totalDigits value="8"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Betrag">
xs:annotation
xs:documentationGeldbetrag</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:decimal">
<xs:totalDigits value="10"/>
<xs:fractionDigits value="2"/>
</xs:restriction>
</xs:simpleType>
$RCSfile: lalaanlage.xsd,v $
$Revision: 1.7 $
$Date: 2005/09/20 14:41:59 $
</xs:documentation>
</xs:annotation>
xs:complexType
xs:sequence
<xs:element name="LALAauftragKopf">
xs:complexType
xs:sequence
<xs:element name="KommNummer" type="AuftragsID">
xs:annotation
xs:documentationKommissions-Nr. der NDL</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="NdlNummer">
xs:annotation
xs:documentationKundennummer der NDL, Stellen 1-7 der PULZ-ID (Partnernummer)</xs:documentation>
</xs:annotation>
xs:simpleType
<xs:restriction base="xs:positiveInteger">
<xs:totalDigits value="7"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="PULZID">
xs:annotation
xs:documentationKEY</xs:documentation>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="TP_ReparaturauftragPosition">
xs:complexType
xs:sequence
<xs:element name="Leistung" type="Kurzbezeichnung" maxOccurs="unbounded">
xs:annotation
xs:documentationLulu</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Preis" type="Kurzbezeichnung" maxOccurs="unbounded">
xs:annotation
xs:documentationPreis je Leistung</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Version" type="xs:decimal" use="required">
xs:annotation
xs:documentationVersionsnummer der XML-Datenstruktur</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>[/CODE]
Hallo Markus,
Soweit so gut, die Frage ist nun, kann mir jemand sagen, wie ich mit einer PHP Anwendung mit diesem Server sprechen kann?
das Thema wird z.B. auch im Buch "Web APIs with PHP" behandelt.
Die Code-Beispiele dazu gibt es hier
http://www.wrox.com/WileyCDA/WroxTitle/productCd-0764589547,descCd-download_code.html
Vielleicht kannst Du da auch ohne Buch was passendes finden.
Der für Dich interessante Teil dürfte das clientseitige Zertifikat sein.
Dafür kommt curl zum Einsatz.
<?php
function callAPI($endpoint, $requestBody)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $endpoint);
curl_setopt($ch, CURLOPT_SSLCERT, "../certs/cert_key_pem-1.txt");
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $requestBody);
ob_start();
curl_exec($ch);
$response = ob_get_clean();
if (curl_error($ch))
{
file_put_contents("/tmp/curl_error_log.txt", curl_errno($ch) . ": " .
curl_error($ch), "a+");
curl_close($ch);
return null;
}else
{
curl_close($ch);
return $response;
}
}
?>
$endpoint ist hier die URL, $requestBody der SOAP-request.
Wenn alles klappt solltest Du eine entsprechende Antwort erhalten.
Viele Grüße
Stefan