无法读取数据,因为它的格式不正确

Posted

技术标签:

【中文标题】无法读取数据,因为它的格式不正确【英文标题】:The data could not be read because it isn't in the correct format 【发布时间】:2015-12-30 07:04:31 【问题描述】:

好吧,经过大量搜索,我不知道这是怎么回事,因为我认为我在更换钥匙时已修复并且它正在工作。但是它不再工作了,我没有改变任何东西。请勿重复报告,请没有回答任何问题。

    let URL = "http://localhost/donate/payment.php"
    let params: Dictionary<String,AnyObject> = ["stripeToken": token.tokenId,
        "amount": Int(self.amountTextField.text!)!,
        "currency": "usd",
        "description": self.emailTextField.text!]



    let manager = AFHTTPSessionManager()
    manager.responseSerializer.acceptableContentTypes = NSSet(array: ["text/plain", "text/html", "application/json"]) as! Set<String>

    manager.PATCH(URL, parameters: params, success:  (operation, responseObject) -> Void in
        guard let response = responseObject as? [String: String] else 
            print("failed")
            return
         
        )  (operation, error) -> Void in

            self.handleError(error)
           

这是我从 appcoda 获得的 php 代码(我从未用 PHP 编写过代码)

    <?php
        require_once('vendor/autoload.php');
        \Stripe\Stripe::setApiKey("key");
        $token =  $_POST['stripeToken'];
        $amount = $_POST['amount'];
        $currency = $_POST['currency'];
        $description = $_POST['description'];
            try 
            $charge = \Stripe\Charge::create(array(

            "amount" => $amount*100, // Convert amount in cents to dollar
            "currency" => $currency,
            "source" => $token,
            "description" => $description)
            );

        // Check that it was paid:
        if ($charge->paid == true) 
            $response = array( 'status'=> 'Success', 'message'=>'Payment has been charged!!' );
         else  // Charge was not paid!
            $response = array( 'status'=> 'Failure', 'message'=>'Your payment could NOT be processed because the payment system rejected the transaction. You can try again or use another card.' );
     
      header('Content-Type: application/json');
      echo json_encode($response);

      catch(\Stripe\Error\Card $e) 
      // The card has been declined
     
    ?>

【问题讨论】:

为什么你使用PATCH方法使用POST代替 帖子在 ios 9 中已弃用 @HamzaAnsari 我想这就是问题所在。您想将其发布为答案,以便我可以选择它作为正确答案。如果您还可以解释为什么 Patch 不是正确的方法,那就太好了。谢谢 【参考方案1】:

PATCH 方法用于更新现有资源。

POST 将要处理的数据(例如,来自 HTML 表单)提交到已识别的资源。数据包含在请求的正文中。 这可能会导致创建新资源或更新 现有资源或两者兼有。

在您的 php 文件中,您使用 POST 方法获取通过请求传递的参数,而您使用 PATCH 方法传递参数,这就是您的服务器在响应中返回错误的原因

【讨论】:

以上是关于无法读取数据,因为它的格式不正确的主要内容,如果未能解决你的问题,请参考以下文章

Swift 无法读取数据,因为它的格式不正确

infoPlist.strings 读取失败:无法读取数据,因为它的格式不正确

无法读取数据,因为它的格式不正确

错误是无法读取数据,因为它的格式不正确

Swift 中的 JSON 解码。无法读取数据,因为它的格式不正确

处理 json 数据时出错:无法读取数据,因为它的格式不正确