Here is my solution for connecting to the German online stamp serivce "Internetmarke" via SOAP for those who need to do the same (sometimes)
private func stampLogIn() {
let aktDate = dateFormatterSOAP.string(from: Date())
let partnerID: String = "XXXXX"
let partnerKey: String = "sajklfgweiqulskdjfvbluw"
let sign: String = partnerID + "::" + aktDate + "::1::" + partnerKey
let signature_key = Insecure.MD5.hash(data: sign.data(using: .utf8)!).map {String(format: "%02x", $0)}.joined()
let message: String = """
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v3="http://oneclickforapp.dpag.de/V3">
<soapenv:Header>
<v3:PARTNER_ID>\(partnerID)</v3:PARTNER_ID>
<v3:REQUEST_TIMESTAMP>\(aktDate)</v3:REQUEST_TIMESTAMP>
<v3:KEY_PHASE>1</v3:KEY_PHASE>
<v3:PARTNER_SIGNATURE>\(signature_key.prefix(8))</v3:PARTNER_SIGNATURE>
</soapenv:Header>
<soapenv:Body>
<v3:AuthenticateUserRequest>
<v3:username>login_mail@dhldp-test.de</v3:username>
<v3:password>myPassword</v3:password>
</v3:AuthenticateUserRequest>
</soapenv:Body>
</soapenv:Envelope>
"""
let urlString = "https://internetmarke.deutschepost.de/OneClickForAppV3?wsdl"
let url = URL(string: urlString)!
let request = NSMutableURLRequest(url: url)
request.httpMethod = "POST"
request.addValue("text/xml; charset=utf-8", forHTTPHeaderField: "Content-Type")
request.addValue("\(message.count)", forHTTPHeaderField: "Content-Length")
request.httpBody = message.data(using: .utf8)
let task = URLSession.shared
.dataTask(with: request as URLRequest,
completionHandler: { data, response, error in
guard error == nil else {
// Handle the error
print(error!)
return
}
guard let data = data else {
return
}
// Continue checking response or data...
let dataStr = String(decoding: data, as: UTF8.self)
// Here goes XML-Parsing
print(dataStr)
})
task.resume()
}
This ist only for the first step. Of course the other steps have to be done analogically. To be done: the XML parsing of the response.