如何在 iOS swift 4 中访问 Magento Rest API

How to Access Magento Rest API in iOS swift 4

我正在将代码写入 post 来自 Magento REST API 的数据,用于 IOS 应用程序让我出错。我尝试使用相同的代码从登录和注册视图控制器得到同样的错误 api Magento REST API 。我成功地从 api 获取数据,但在 api

中获取 post 数据时出错
    self.internetConnectionChecker { (status) in
    if status{
    KVNProgress.show();
    let userLoginApi = "http://3.85.198.62/4apps/rest/V1/integration/customer/token"
                    let parameters: Parameters = ["username": username, "password": password]
                    let header : HTTPHeaders = ["Content-Type": "application/json"]
                    Alamofire.request(userLoginApi, method: .post, parameters: parameters,  headers: header).responseObject {  (response: DataResponse<User>) in
                        KVNProgress.dismiss()
                         print(response.request?.url)
                        print(response.request?.allHTTPHeaderFields)
                        let json = try! JSONSerialization.jsonObject(with: response.data!, options: JSONSerialization.ReadingOptions.mutableContainers)
                        print(json)
                            DispatchQueue.main.async {
                                loginCallback(response.result.value!)}
                            self.maincontroller.SuccessMessage(title: "تسجيل الدخول", successbody: "")

The Output 
{
    message = "Decoding error: \nUnable to unserialize value. Error: Syntax error\n#0 /opt/bitnami/apache2/htdocs/4apps/lib/internal/Magento/Framework/Webapi/Rest/Request/Deserializer/Json.php(64): Magento\Framework\Serialize\Serializer\Json->unserialize('password=Abc%40...')\n#1 /opt/bitnami/apache2/htdocs/4apps/lib/internal/Magento/Framework/Webapi/Rest/Request.php(141): Magento\Framework\Webapi\Rest\Request\Deserializer\Json->deserialize('password=Abc%40...')\n#2 /opt/bitnami/apache2/htdocs/4apps/lib/internal/Magento/Framework/Webapi/Rest/Request.php(199): Magento\Framework\Webapi\Rest\Request->getBodyParams()\n#3 /opt/bitnami/apache2/htdocs/4apps/app/code/Magento/Webapi/Controller/Rest/InputParamsResolver.php(97): Magento\Framework\Webapi\Rest\Request->getRequestData()\n#4 /opt/bitnami/apache2/htdocs/4apps/lib/internal/Magento/Framework/Interception/Interceptor.php(58): Magento\Webapi\Controller\Rest\InputParamsResolver->resolve()\n#5 /opt/bitnami/apache2/htdocs/4apps/lib/internal/Magento/Framework/Interception/Interceptor.php(138): Magento\Webapi\Controller\Rest\InputParamsResolver\Interceptor->___callParent('resolve', Array)\n#6 /opt/bitnami/apache2/htdocs/4apps/lib/internal/Magento/Framework/Interception/Interceptor.php(153): Magento\Webapi\Controller\Rest\InputParamsResolver\Interceptor->Magento\Framework\Interception\{closure}()\n#7 /opt/bitnami/apache2/htdocs/4apps/generated/code/Magento/Webapi/Controller/Rest/InputParamsResolver/Interceptor.php(26): Magento\Webapi\Controller\Rest\InputParamsResolver\Interceptor->___callPlugins('resolve', Array, Array)\n#8 /opt/bitnami/apache2/htdocs/4apps/app/code/Magento/Webapi/Controller/Rest/SynchronousRequestProcessor.php(85): Magento\Webapi\Controller\Rest\InputParamsResolver\Interceptor->resolve()\n#9 /opt/bitnami/apache2/htdocs/4apps/app/code/Magento/Webapi/Controller/Rest.php(188): Magento\Webapi\Controller\Rest\SynchronousRequestProcessor->process(Object(Magento\Framework\Webapi\Rest\Request\Proxy))\n#10 /opt/bitnami/apache2/htdocs/4apps/lib/internal/Magento/Framework/Interception/Interceptor.php(58): Magento\Webapi\Controller\Rest->dispatch(Object(Magento\Framework\App\Request\Http))\n#11 /opt/bitnami/apache2/htdocs/4apps/lib/internal/Magento/Framework/Interception/Interceptor.php(138): Magento\Webapi\Controller\Rest\Interceptor->___callParent('dispatch', Array)\n#12 /opt/bitnami/apache2/htdocs/4apps/lib/internal/Magento/Framework/Interception/Interceptor.php(153): Magento\Webapi\Controller\Rest\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Request\Http))\n#13 /opt/bitnami/apache2/htdocs/4apps/generated/code/Magento/Webapi/Controller/Rest/Interceptor.php(26): Magento\Webapi\Controller\Rest\Interceptor->___callPlugins('dispatch', Array, Array)\n#14 /opt/bitnami/apache2/htdocs/4apps/lib/internal/Magento/Framework/App/Http.php(137): Magento\Webapi\Controller\Rest\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))\n#15 /opt/bitnami/apache2/htdocs/4apps/generated/code/Magento/Framework/App/Http/Interceptor.php(24): Magento\Framework\App\Http->launch()\n#16 /opt/bitnami/apache2/htdocs/4apps/lib/internal/Magento/Framework/App/Bootstrap.php(261): Magento\Framework\App\Http\Interceptor->launch()\n#17 /opt/bitnami/apache2/htdocs/4apps/index.php(39): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http\Interceptor))\n#18 {main}";
    trace = "<null>";
}

您看到的错误发生在 Magento 端 Decoding error: \nUnable to unserialize value... 它指向反序列化 JSON 参数的问题。所以我尝试在 Alamofire 请求上使用编码,URLEncoding.queryString 对我有用。这是我的代码

Alamofire.request(userLoginApi, method: .post, parameters: parameters, encoding: URLEncoding.queryString, headers: header).responseData {  (response: DataResponse<Data>) in
    let json = try! JSONSerialization.jsonObject(with: response.data!, options: JSONSerialization.ReadingOptions.mutableContainers)
    print("json", json)
}