Ошибка Alamofire при создании идентификатора клиента Stripe (iOS) - PullRequest
0 голосов
/ 26 июня 2018

Я использую Alamofire и Swift в своем приложении Heroku, используя Node.js (интегрирующий Stripe). Однако при создании идентификатора клиента я получаю следующую ошибку. Мои кодовые наборы ниже.

Дайте мне знать, если требуются какие-либо другие сведения.

Сообщение об ошибке: 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 Ответ

0 голосов
/ 26 июня 2018

Сообщение об ошибке означает, что при обработке ответа JSON происходит сбой Alamofire.

В частности, проблема, похоже, связана со стороной сервера - насколько я могу судить, вы не отправляете верный ответ JSON с сервера, просто код состояния 200.

Чтобы отправить данные обратно, вам необходимо указать параметр res.send (), например:

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

Кроме того, Stripe API docs заявляет, что функция обратного вызова получает два параметра, вторым является объект клиента. Таким образом, код может быть реализован так:

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