I'm using this solution to convert to md5 hash https://stackoverflow.com/a/32166735/1898829
and this is the code that I create the hash parameter I send to marvel.
class CharacterListInteractorApi: CharacterListInteractor {
// MARK: Dependencies
private let client: NetworkLayer
// MARK: - Properties
var timeStamp: String = ""
// MARK: - Life cycle
init(client: NetworkLayer) {
self.client = client
}
// MARK: - Internal
func verifySomething(someInput: String) -> Observable<Async<Any>> {
timeStamp = Date().stringValue()
return RxAlamofire
.requestJSON(
.get,
url,
parameters: parameters
)
.flatMap { (response, json) -> Observable<Any> in
Observable.just(json)
}.async()
}
}
private extension CharacterListInteractorApi {
var url: String {
"https://gateway.marvel.com:443/v1/public/characters?apikey=ApiKey"
}
var hash: String { timeStamp+"privateKey"+"fbb2d7f9074949c9fb335f9a42e48678"
}
var md5Hash: Data {
MD5(string: hash)
}
var parameters: [String: Any] {
[
"ts": timeStamp,
"hash": md5Hash
]
}
}
but I get an error from marvel saying That hash, timestamp and key combination is invalid
update
here is the date time func
func stringValue() -> String {
let dateFormatter = DateFormatter()
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
dateFormatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSSSSS'Z'"
return dateFormatter.string(from: self)
}
here is the print out of the md5 hash
(lldb) po md5Hash
▿ 16 bytes
- count : 16
▿ pointer : 0x0000600003941c20
- pointerValue : 105553176304672
▿ bytes : 16 elements
- 0 : 188
- 1 : 255
- 2 : 118
- 3 : 230
- 4 : 64
- 5 : 100
- 6 : 140
- 7 : 75
- 8 : 144
- 9 : 42
- 10 : 18
- 11 : 136
- 12 : 94
- 13 : 27
- 14 : 230
- 15 : 252