Api Call не работает в alamofire, но работает в почтальоне - PullRequest
0 голосов
/ 27 апреля 2018

enter image description here У меня есть вызов API, который работает с использованием почтальона, но когда те же данные передаются в alamofire, он не работает. Пожалуйста, помогите мне. Я потратил около 1 дня, чтобы починить его.

        let parameters = [
        "paymenttype":"debitcard",
        "coupon":"",
        "products":[["pid":"72","qnty":"1"],["pid":"4","qnty":"1"],["pid":"3","qnty":"1"]],
        "grandtotal":"71499.52",
        "discount":"",
        "itemtotalval":"69417.0",
        "cgst":"1041.26",
        "comment":"sss",
        "sgst":"1041.26",
        "billingaddress":[["bfname":"debdeep nandy","bmobilenumber":"9875463215","bpincode":"823691" , "baddress":"kolkata","bcity":"kolkata","bstate":"West Bengal","bcountry":"india","bemail":"dev@gmail.com"]],
        "shippingaddress":[["sfname":"debdeep nandy","smobilenumber":"9875463215","spincode":"823691","saddress":"kolkata","scity":"kolkata","sstate":"West Bengal","scountry":"india","semail":"india"]],
        "user_id":1
        ] as [String : AnyObject]
    Alamofire.request(
        URL(string:"http://jarsservices.com/pccj-app/apiv1/place_order")!,
        method: .post,
        parameters: parameters)
        .validate()
        .responseString { (response) -> Void in

            guard response.result.isSuccess else {
                print("Error while sending data: \(response.result.error)")
                return
            }

            if let value = response.result.value as? [String: Any] {
                DispatchQueue.main.async {
                   // self.activityView.stopAnimating()

                    if value["status"] as! Int == 1 {
                        self.view.makeToast("Thank you! Your feedback is recorded in server.")
                    }
                    else {
                        self.view.makeToast(value["msg"] as? String)
                    }
                }

            }
            else {
                print("Malformed data received from fetchAllRooms service")
                return
            }


    }

В заголовках нет аутентификации. пожалуйста, помогите мне.

Я добавил изображение от работающего почтальона.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Попробуйте этот код,

Добавить это расширение

extension Array where Element: Codable {

    public var toData: Data {
        let encoder = JSONEncoder()
        do {
            return try encoder.encode(self)
        }
        catch {
            fatalError(error.localizedDescription)
        }
    }

    public var toJson: String? {
        return toData.toJson
    }
}

extension Data {
    //  Convert NSData to String
    public var toJson : String? {
        return String(data: self, encoding: String.Encoding.utf8)
    }
}

Ваш веб-API Parameters, как

let parameters: [String : Any] = [
        "paymenttype":"debitcard",
        "coupon":"",
        "products":[["pid":"72","qnty":"1"],["pid":"4","qnty":"1"],["pid":"3","qnty":"1"]].toJson ?? "[]",
        "grandtotal":"71499.52",
        "discount":"",
        "itemtotalval":"69417.0",
        "cgst":"1041.26",
        "comment":"sss",
        "sgst":"1041.26",
        "billingaddress":[["bfname":"debdeep nandy","bmobilenumber":"9875463215","bpincode":"823691" , "baddress":"kolkata","bcity":"kolkata","bstate":"West Bengal","bcountry":"india","bemail":"dev@gmail.com"]].toJson ?? "[]",
        "shippingaddress":[["sfname":"debdeep nandy","smobilenumber":"9875463215","spincode":"823691","saddress":"kolkata","scity":"kolkata","sstate":"West Bengal","scountry":"india","semail":"india"]].toJson ?? "[]",
        "user_id":1
        ]

А твоя другая часть

else {
    print("Malformed data received from fetchAllRooms service")
    debugPrint(String(data: response.data!, encoding: String.Encoding.utf8)) 
    //Print out our data 
    return
}

enter image description here

Примечание: в Alamofire параметр Передайте значение Array или Dictionary, используя формат строки JSON, тогда это сработает.

0 голосов
/ 27 апреля 2018

Попробуйте этим методом:

func hitPostServiceJsonForm(_ params:Dictionary<String,Any>,unReachable:(() -> Void),handler:@escaping ((Dictionary<String,Any>?) -> Void)) {


        var request = URLRequest(url: URL(string: BASE_URL)!)
        request.httpMethod = "POST"
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = try! JSONSerialization.data(withJSONObject: params, options: .prettyPrinted)

        print_debug(BASE_URL)
        Alamofire.request(request).responseJSON { response in
            SwiftLoader.hide()
            //print_debug("Request: \(String(describing: response.request))")   // original url request
            //print_debug("Response: \(String(describing: response.response))") // http url response
            print_debug("Result: \(response.result)")                         // response serialization result
            switch response.result {
            case .success:
                if let jsonDict = response.result.value as? Dictionary<String,Any> {
                    print_debug("Json Response: \(jsonDict)") // serialized json response
                    handler(jsonDict)
                }
                else{
                    handler(nil)
                }
                if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) {
                    print("Server Response: \(utf8Text)") // original server data as UTF8 string
                }
                break
            case .failure(let error):
                handler(nil)
                print_debug(error)
                break
            }
        }
    }
...