2016-10-31 3 views
0

Я использую Stripe и iOS для добавления платежей в свое приложение.Каков процесс после того, как делегат Add Token вызывается в реализации iOS Stripe?

Я знаю, что мне нужно отправить токен и другую информацию на мой сервер, чтобы завершить процесс, но я не уверен, что делать с функцией, чтобы показать успех, убрать контроллер Stripe и вернуться в мое приложение.

func addCardViewController(_ addCardViewController: STPAddCardViewController, didCreateToken token: STPToken, completion: @escaping STPErrorBlock) { 
    self.submitTokenToBackend(token: token, completion: { (error: Error?) in 
     if let error = error { 
      completion(error) 
     } else { 
      self.dismiss(animated: true, completion: { 
       //self.showReceiptPage() 
       completion(nil) 
      }) 
     } 
    }) 
} 

func submitTokenToBackend(token: STPToken, completion: (_ error:Error)->()){ 
    print("doing this") 
} 

Я использую Alamofire как мой транспортный двигатель.

ответ

1

Я использую Stripe тоже с быстрой и ASP.NET Web API на сервере, я поставил полный proccess я использую, который прекрасно работает:

1) Сервер - ASP.NET Web API с библиотекой полоса:

[Route("PostCharge")] 
    [HttpPost] 
    [ResponseType(typeof(Ride))] 
    public async Task<IHttpActionResult> PostCharge(StripeChargeModel model) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 
     var chargeId = await ProcessPayment(model); 
     return Ok(chargeId); 
    } 

    private async Task<string> ProcessPayment(StripeChargeModel model) 
    { 
     return await Task.Run(() => 
     { 
      var myCharge = new StripeChargeCreateOptions 
      { 
       Amount = (int)(model.Amount * 100), 
       Currency = "usd", 
       Description = model.CardHolderName + "Charge", 
       StatementDescriptor = model.CardHolderName, 
       SourceTokenOrExistingSourceId = model.Token 
      }; 
      var chargeService = new StripeChargeService("sk_test_laskdjfasdfafasd"); 
      var stripeCharge = chargeService.Create(myCharge); 
      return stripeCharge.Id; 
     }); 
    } 

2) 3 Swift с библиотекой Alamofire и нашивки:

 STPAPIClient.shared().createToken(withCard: card, completion: { (token, error) -> Void in 
     if error != nil { 
      self.hideProgress() 
      self.showAlert(self, message: "Internet is not working") 
      print(error) 
      return 
     } 
     let params : [String : AnyObject] = ["Token": token!.tokenId as AnyObject, "Amount": paymentAmount as AnyObject, "CardHolderName": AppVars.RiderName as AnyObject] 

     Alamofire.request(url + "/api/postcharge", method: .post, parameters: params, encoding: JSONEncoding.default, headers: [ "Authorization": "Bearer " + token]).responseJSON { response in 
      switch response.result { 
      case .failure(_): 
       self.hideProgress() 
       self.showAlert(self, message: "Internet is not working") 
      case .success(_): 
       let dataString:NSString = NSString(data: response.data!, encoding: String.Encoding.utf8.rawValue)! 
       if (dataString as? String) != nil { 
        self.showAlert(self, message: "Your payment has been successful") 
       } else { 
        self.showAlert(self, message: "Your payment has not been successful. Please, try again") 
       } 
      } 
     } 
    }) 

3) быстрое 3, вставить линию в применении AppDelegate:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    STPPaymentConfiguration.shared().publishableKey = "pk_test_xxasdfasdfasdf" 
    return true 
} 
+0

спасибо, что я посмотрю на этот вечер ... и посмотрю, что я могу сделать из этого. Я заметил, что вы вызываете вызов token и сервер вместе. – BostonMacOSX

+0

Хорошо ... сомневаюсь, что я здесь, и если это поможет вам ... принять ваш голос ... –

 Смежные вопросы

  • Нет связанных вопросов^_^