代码之家  ›  专栏  ›  技术社区  ›  Annabelle Sykes

创建条带客户ID(iOS)时出现Alamo菲尔错误

  •  0
  • Annabelle Sykes  · 技术社区  · 7 年前

    我使用node.js(集成条带)在heroku应用程序中使用alamofire和swift。但是,在创建客户id时,我得到以下错误。我的代码集如下。

    如果需要知道其他细节,请告诉我。

    错误消息: alamofire.aferror.responseSerializationFailed(alamofire.aferror.responseSerializationFailureReason.inputDataNilorZeroLength)

    客户端代码

    func createCustomerKey(withAPIVersion apiVersion: String, completion: @escaping STPJSONResponseCompletionBlock) {
    
        let customerIDURL = self.baseURL.appendingPathComponent("customer")
        let customerIDParameters = ["email":(Auth.auth().currentUser?.email)!]
    
        Alamofire.request(customerIDURL, method: .post, parameters: customerIDParameters, encoding: JSONEncoding.default).validate(statusCode: 200..<300).responseJSON { responseJSON in
    
            switch responseJSON.result {
                case .success(let json):
                    completion(json as? [String:AnyObject], nil)
                    print("\(json)\n\n\n\n")
                case .failure(let error):
                    completion(nil, error)
                    print("Error message:\(responseJSON.result.error)")
                    break
            }
        }
    

    服务器端代码

    const express = require('express')
    const path = require('path')
    const PORT = process.env.PORT || 5000
    
    var app = express();
    var stripe = require('stripe')('secret_key')
    var bodyParser = require('body-parser')
    
    app.set('port', (process.env.PORT || 5000));
    
    app.use(bodyParser.json());
    
    app.use(bodyParser.urlencoded({
      extended: true
    }));
    
    app.use(express.static(path.join(__dirname, 'public')));
    
    app.set('views', path.join(__dirname, 'views'));
    
    app.set('view engine', 'ejs');
    
    app.listen(PORT, () => console.log(`Listening on ${ PORT }`));
    
    app.post('/customer', (req, res) => {
    
      var email = req.body.email;
    
      stripe.customers.create({
        email: email
      }, function(err) {
        if (err) {
          console.log(err, req.body)
          res.status(500).end()
        } else {
          res.status(200).send()
        }
      }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Aron    7 年前

    错误消息意味着alamofire在处理响应json时失败。

    具体来说,问题似乎是在服务器端——据我所知,您没有从服务器发送有效的json响应,只是状态代码200。

    要发回数据,需要向res.send()提供一个参数,例如:

    res.status(200).send({'email':email})
    

    而且 Stripe API docs 声明回调函数接收两个参数,第二个是customer对象。所以代码可以这样实现:

    stripe.customers.create({
      email: email
    }, function(err, customer) {
      if (err) {
        res.status(500).end()
      } else {
        res.status(200).send(customer)
      }
    }