Phaxio API Создать факс и использовать страшный тип кодирования multipart / form-data - PullRequest
0 голосов
/ 16 февраля 2020

Я замедляю создание интерфейса Swift для набора API Phaxio. Я разобрался с некоторыми из основных функций c GET, но самая сложная - это функция создания факса. Это моя первая попытка создать POST-файл multipart / form-data и загрузить двоичный файл на факс-сервер. Я думаю, что я рядом. Я пытаюсь правильно передать свои учетные данные и номер факса, а также включить файл в многочастном формате. Только сейчас я смог обработать ответ «Плохое сообщение», который я возвращал с сервера для загрузки файла. Теперь я застрял на ошибку ниже. Любая помощь будет оценена.

import Cocoa

// This program uses the phaxio API to send a fax (at least thats the intent). Shout out to Ignacio Nieto Carvajal's very helpful Networking in Swift: The Complete Guide on www.digialleaves.com to help me piece this together. //

// handy function to create unique identifier to define the multi-part boundaries
func generateBoundaryString() -> String {
   return "Boundary-\(UUID().uuidString)"
}

var body = Data()
var parameter = ""

// Open file, read contents into buffer - This works great, so easy in SWIFT!
let fileMgr = FileManager.default
var sourceFile = "/tmp/test.pdf"
let databuffer = fileMgr.contents(atPath: sourceFile)

// post the user, pass and faxnumber
let boundary = generateBoundaryString()

parameter.append("--\(boundary)\r\n")
parameter.append(contentsOf: "Content-Disposition: form-data; name=\"api_key\"; value=\"cn577fcvrcrjuj9v8\"\r\n")

parameter.append("--\(boundary)\r\n")
parameter.append(contentsOf: "Content-Disposition: form-data; name=\"api_secret\"; value=\"ciwx0sc7owqv4gzg\"\r\n")

parameter.append("--\(boundary)\r\n")
parameter.append(contentsOf: "Content-Disposition: form-data; name=\"to\"; value=\"5555555555\"\r\n")

parameter.append("--\(boundary)\r\n")
parameter.append(contentsOf: "Content-Disposition: form-data; name=\"file\"; filename=\"\(sourceFile)\"\r\n")
parameter.append(contentsOf: "Content-Type: application/PDF\r\n\r\n")

// Create boundary around file contents
body.append(contentsOf: parameter.utf8)

// Add binary contents of file
body.append((databuffer ?? nil)!)

body.append(contentsOf: "\r\n".utf8)
body.append(contentsOf: "--\(boundary)--\r\n".utf8)

// Initialize our URL & Request
let baseURL = "https://api.phaxio.com/v2/faxes"
let session = URLSession.shared
let url = URL(string: baseURL)!
var request = URLRequest(url: url)

//Define request method & set header values
request.httpMethod = "POST"
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Accept")

// Initialize HTTP Request Body
request.httpBody = body

URLSession.shared.dataTask(with: request) { (data, response, error) in
    if let error = error {
        print("error took Place\(error)")
        return
    }

    if let data = data, let dataString = String(data: data, encoding: .utf8) {
        print("response data string: \(dataString)")

    }

}.resume()


This is the Response I'm getting from the Server:

{"success":false, "message": "You must provide API credentials for this operation (HTTP auth or api_key and api_secret)."}

1 Ответ

0 голосов
/ 17 февраля 2020

Решено! Хотите верьте, хотите нет, добавив учетные данные API_KEY, API_SECRET и номер телефона в строку URL, Phaxio принял сообщение и поставил в очередь факс для отправки.

...