Stripe iOS: я не могу создать заряд, используя идентификатор карты - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь создать платежи, используя стандартную интеграцию iOS, описанную здесь: https://stripe.com/docs/mobile/ios/standard

, чтобы сделать это, у меня есть в моем CheckoutController.swift

func paymentContext(_ paymentContext: STPPaymentContext, didCreatePaymentResult paymentResult: STPPaymentResult, completion: @escaping STPErrorBlock) {

    StripeClient.shared.completeCharge(paymentResult, amount: 1000, shippingAddress: nil, shippingMethod: nil, completion: { (error: Error?) in
        if let error = error {
            completion(error)
        } else {
            completion(nil)
        }
    })
}

В моем StripeClient.swift

func completeCharge(_ result: STPPaymentResult,
                    amount: Int,
                    shippingAddress: STPAddress?,
                    shippingMethod: PKShippingMethod?,
                    completion: @escaping STPErrorBlock) {
    let url = self.baseURL.appendingPathComponent("charge")

    var params: [String: Any] = [
        "source": result.source.stripeID,
        "amount": amount,
        "description": Purchase.shared.description()
    ]
    params["shipping"] = STPAddress.shippingInfoForCharge(with: shippingAddress, shippingMethod: shippingMethod)
    Alamofire.request(url, method: .post, parameters: params, headers: Credentials.headersDictionary())
        .validate(statusCode: 200..<300)
        .responseString { response in
            switch response.result {
            case .success:
                completion(nil)
            case .failure(let error):
                completion(error)
            }
    }
}

И, в моем API (Ruby on Rails)

  def charge
    Stripe::Charge.create(charge_params)
    render json: { success: true }, status: :ok
  rescue Stripe::StripeError => e
    render json: { error: "Error creating charge: #{e.message}" },
           status: :payment_required
  end

  private

  def charge_params
    params
      .permit(:amount, :description, :source)
      .merge(currency: 'gbp')
  end

Проблема в методе completeCharge, result.source.stripeID возвращает идентификатор карты (card_xxxxxx), но янужен токен (tok_xxxxxx).Итак,

как я могу получить токен из идентификатора карты или объекта STPPaymentResult?или как я могу заставить мой Rails API работать с идентификатором карты вместо токена?или любое другое решение?

С уважением.

1 Ответ

0 голосов
/ 27 октября 2018

Иди!когда вы используете card_id вместо токена, необходимо передать идентификатор клиента в качестве параметра, поэтому я изменил свой API:

  def charge_params
    params
      .permit(:amount, :description, :source)
      .merge(currency: 'gbp',
             customer: current_user.stripe_customer_id)
  end

(я сохраняю идентификатор клиента Stripe как stripe_customer_id в моей таблице пользователей)

...