Skip to content

Instantly share code, notes, and snippets.

@jacks205
Created November 20, 2014 09:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jacks205/f998654983796b7cbf1c to your computer and use it in GitHub Desktop.
Save jacks205/f998654983796b7cbf1c to your computer and use it in GitHub Desktop.
Basic Example of creating a SOAP request with AEXML and through a normal NSMutableURLRequest
//
// CitizenViewController.swift
// citizencrossfit
//
// Created by Mark Jackson on 19/11/2014.
// Copyright (c) 2014 Mark Jackson. All rights reserved.
//
import UIKit
class CitizenViewController: UIViewController{
override func viewDidLoad(){
super.viewDidLoad()
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
let soapRequest = AEXMLDocument(version: 1.0, encoding: "utf-8", standalone: "no")
let attributes = ["xmlns:xsi" : "http://www.w3.org/2001/XMLSchema-instance", "xmlns:xsd" : "http://www.w3.org/2001/XMLSchema", "xmlns:soap": "http://schemas.xmlsoap.org/soap/envelope/"]
let envelope = soapRequest.addChild("soap:Envelope", attributes: attributes)
let body = envelope.addChild("soap:Body")
let getClasses = body.addChild("GetClasses", attributes: ["xmlns" : "http://clients.mindbodyonline.com/api/0_5"])
let request = getClasses.addChild("Request")
//Source Credentials
let sourceCredentials = request.addChild("SourceCredentials")
sourceCredentials.addChild("SourceName").value = "MarkJacksonCrossfit"
sourceCredentials.addChild("Password").value = "SA0qUvKP6ndeb8mDdGaZJRFnS7g="
let siteIds = sourceCredentials.addChild("SiteIDs")
siteIds.addChild("int").value = "-99"
//User Credentials
let userCredentials = request.addChild("UserCredentials")
userCredentials.addChild("Username").value = "Siteowner"
userCredentials.addChild("Password").value = "apitest1234"
let userSiteIds = userCredentials.addChild("SiteIDs")
userSiteIds.addChild("int").value = "-99"
//Fields
let fields = request.addChild("Fields")
fields.addChild("string").value = "Classes.Resource"
//XMLDetail
request.addChild("XMLDetail").value = "Basic"
//PageSize
request.addChild("PageSize").value = "10"
//CurrentPageIndex
request.addChild("CurrentPageIndex").value = "0"
// println(soapRequest.xmlString)
let reqData : NSData = soapRequest.xmlString.dataUsingEncoding(NSUTF8StringEncoding)!
let urlRequest : NSMutableURLRequest = NSMutableURLRequest(URL: NSURL(string: "https://api.mindbodyonline.com/0_5/ClassService.asmx")!)
urlRequest.HTTPMethod = "POST"
urlRequest.setValue("api.mindbodyonline.com", forHTTPHeaderField: "Host")
urlRequest.setValue("text/xml; charset=utf-8", forHTTPHeaderField: "Content-Type")
urlRequest.setValue("length", forHTTPHeaderField: "Content-Length")
urlRequest.setValue("http://clients.mindbodyonline.com/api/0_5/GetClasses", forHTTPHeaderField: "SOAPAction")
urlRequest.HTTPBody = reqData
urlRequest.timeoutInterval = 10
println(urlRequest.allHTTPHeaderFields!)
NSURLConnection.sendAsynchronousRequest(urlRequest, queue: NSOperationQueue.mainQueue(), completionHandler: { (response, data: NSData?, error: NSError?) -> Void in
if (error == nil) {
var resData = NSString(data: data!, encoding: NSUTF8StringEncoding)
var xmlError : NSError?
if let xmlDoc = AEXMLDocument(xmlData: data!, error: &xmlError){
let getClassesResult = xmlDoc.rootElement["soap:Body"]["GetClassesResponse"]["GetClassesResult"]
let classes = getClassesResult["Classes"]
for child in classes.children {
println(child.name)
}
}
}else{
println(error)
}
})
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment