簡體   English   中英

從Swift 5 iOS App調用Mailchimp API時出現“ API密鑰丟失”

[英]'API Key Missing' when making Mailchimp API call from Swift 5 iOS App

我正在嘗試從我的Swift 5 iOS應用程序將訂閱者添加到我的郵件列表中。 嘗試執行此操作時出現以下錯誤:

{
    detail = "Your request did not include an API key.";
    instance = "3f4cb654-c674-4a97-adb8-b4eb6d86053a";
    status = 401;
    title = "API Key Missing";
    type = "http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/";
}

當然,這表明我缺少我的API密鑰,但是我在Authorization標頭中指定了它(請參見下面的代碼)。 我試圖回答的混合這里和導在這里 ,但我並沒有到目前為止多少運氣。 這是我當前用於設置請求的代碼:

let mailchimpAPIURL = "https://us3.api.mailchimp.com/3.0"
let requestURL = NSURL(string: mailchimpAPIURL)!

let apiCredentials = "anystring:<API_KEY>"
let loginData = apiCredentials.data(using: String.Encoding.utf8)!.base64EncodedString()

let params = [
    "list_id": "<LIST_ID>",
    "email_address": email,
    "status": "subscribed",
    "merge_vars": [
         "FNAME": firstName,
         "LNAME": lastName
    ]
] as [String: Any]

let request = NSMutableURLRequest(url: requestURL as URL)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
request.setValue("Basic \(loginData)", forHTTPHeaderField: "Authorization")
do {
    request.httpBody = try JSONSerialization.data(withJSONObject: params, options: [])
} catch {
    return
}

您需要在授權標頭中發送api密鑰,如下所示:

let params: [String: AnyObject] = ["email_address": email, "status": "subscribed"]
guard let url = "https://us10.api.mailchimp.com/3.0/lists/<listID>/members/".stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding) else { return }

let credentialData = "user:<apikey>".dataUsingEncoding(NSUTF8StringEncoding)!
let base64Credentials = credentialData.base64EncodedStringWithOptions([])

let headers = ["Authorization": "Basic \(base64Credentials)"]

Alamofire.request(.POST, url, headers: headers, parameters: params, encoding: .URL)
    .responseJSON { response in

    if response.result.isFailure {

    }
    else if let responseJSON = response.result.value as? [String: AnyObject] {

    }
}

知道了 @Sam的答案使我意識到我使用的URL是錯誤的,因此我需要將ListID添加到該URL中。 我也將setValue更改為addValue ,並將NSMutableURLRequest更改為URLRequest 我還添加了request.httpMethod = "POST"這是我更新的工作代碼:

let subscribeUserURL = "https://us3.api.mailchimp.com/3.0/lists/<LISTID>/members/"
let requestURL = NSURL(string: subscribeUserURL)!

let apiCredentials = "anystring:<APIKEY>"
let loginData = apiCredentials.data(using: String.Encoding.utf8)!.base64EncodedString()

let params = [
    "email_address": email,
    "status": "subscribed",
    "merge_fields": [
        "FNAME": firstName,
        "LNAME": lastName
    ]
] as [String: Any]

var request = URLRequest(url: requestURL as URL)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
request.addValue("Basic \(loginData)", forHTTPHeaderField: "Authorization")
request.httpMethod = "POST"
do {
    request.httpBody = try JSONSerialization.data(withJSONObject: params, options: [])
} catch {
    return
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM