2016-09-25 71 views
5

我需要將以下json傳遞給此函數,以便Shopify Api可以理解提交。swift 3將json參數發送到api

每次執行此代碼時,都會收到一條錯誤消息,指出缺少必需的參數。顯然,我無法創建正確的變量格式並將其傳遞給服務器。

Shopify API期待下面的JSON通過POST

傳遞
{ 
    "customer": { 
     "first_name": "Steve", 
     "last_name": "Lastnameson", 
     "email": "[email protected]", 
     "verified_email": true, 
     "addresses": [ 
      { 
       "address1": "123 Oak St", 
       "city": "Ottawa", 
       "province": "ON", 
       "phone": "555-1212", 
       "zip": "123 ABC", 
       "last_name": "Lastnameson", 
       "first_name": "Mother", 
       "country": "CA" 
      } 
     ] 
    } 
} 

這裏是我的郵政代碼:

let customer = [ 
    "customer": [ 
     "first_name": "Steve", 
     "last_name": "Lastnameson", 
     "email": "[email protected]", 
     "verified_email": "true", 
     "addresses": [ 
      [ 
       "address1": "123 Oak St", 
       "city": "Ottawa", 
       "province": "ON", 
       "phone": "555-1212", 
       "zip": "123 ABC", 
       "last_name": "Lastnameson", 
       "first_name": "Mother", 
       "country": "CA", 
      ], 
     ], 
    ], 
] as [String: Any] 

var request = URLRequest(url: URL(string: shopUrl + "/admin/customers.json")!) 
request.httpMethod = "POST" 
request.httpBody = try! JSONSerialization.data(withJSONObject: customer, options: []) 

URLSession.shared.dataTask(with:request, completionHandler: {(data, response, error) in 
    if error != nil { 
     print(error) 
    } else { 
     do { 
      guard let json = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: Any] else { return } 

      guard let errors = json?["errors"] as? [[String: Any]] else { return } 
       if errors.count > 0 { 
        // show error 
        return 
       } else { 
        // show confirmation 
       } 
      } 
     } 
    }).resume() 
+0

從服務器獲得的確切響應是什麼? –

+1

創建一個新的客戶賬號 – Hamid

+0

問題是服務器沒有以預期的格式獲取數據 – Hamid

回答

5

請求需要有內容類型聲明。添加:

request.addValue("application/json", forHTTPHeaderField: "Content-Type") 
request.addValue("application/json", forHTTPHeaderField: "Accept")