iOS Parse Stripe Integration

前端之家收集整理的这篇文章主要介绍了iOS Parse Stripe Integration前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我对编程很新,我创建了一个应用程序来向客户收费,并希望存储他们的CC信息并在以后收费.我一直在浏览所有的教程和文档,我无法理解如何将其集成到我的应用程序中.我是否需要了解其他技术技能,例如Rest API,Curl,Ruby等才能进行此设置?所有指南和文档都指向了这个方向.我真的不明白GET / POST是什么以及它如何适合iOS Objective-C编程.

关于如何设置它的任何指导都将非常感激.我已经坚持了一段时间了.

解决方法

Parse的条带API并不像它应该的那样完整.它本身不包含许多功能,但可以通过HTTP请求完成.我必须学习一点 Javascript和HTTP请求以获得许多功能.当然,你的第一直觉应该告诉你不要在任何设备上存储CC号码!只要您有用户输入CC编号,立即获得一个令牌,然后就是您需要使用的全部内容.

幸运的条纹使您能够节省客户,并将CC附加到客户,然后在未来再次获得CC编号时向该客户收费. Parse的api无法处理向客户添加CC,因此我自己添加了该功能.

因此,步骤1和2使用Parse的API生成客户,并使用Parse的API再次从他们输入的CC信息生成令牌.如果您需要有关此方面的帮助,请告知我们所需的云代码.

步骤3向客户添加CC.我正在使用自定义Customer对象,但您真正需要的主要是条形customerId,我的代码中是customer.identifier,CC中的tokenID,在我的例子中是token.tokenId.响应将是带有卡信息的JSON字符串,我将其转换为字典,然后从字典中创建STPCard.我还展示了如何从客户中删除卡.

iOS代码

  1. +(void)addToken:(STPToken *)token toCustomerId:(NSString *)customerId completionHandler:(PFIdResultBlock)block
  2. {
  3. [PFCloud callFunctionInBackground:@"stripeUpdateCustomer" withParameters:@{@"customerId":customerId,@"data":@{@"card":token.tokenId}} block:block];
  4. }
  5.  
  6. + (void)removeCard:(STPCard *)card FromCustomer:(ELCustomer *)customer completion:(STPCardDeletionBlock)handler
  7. {
  8. if (!customer ||!customer.identifier || !card || !card.identifier || !handler) [NSException raise:@"requiredParameter" format:@"required Parameter Missing for deleting card from customer"];
  9.  
  10. [PFCloud callFunctionInBackground:@"stripeDeleteCardFromCustomer" withParameters:@{@"cardId":card.identifier,@"customerId":customer.identifier} block:^(id object,NSError *error)
  11. {
  12. NSDictionary *dict = nil;
  13. NSError *jsonError = nil;
  14.  
  15. if (object && [object isKindOfClass:[NSString class]] && !error) {
  16. dict = [NSJSONSerialization JSONObjectWithData:[object dataUsingEncoding:NSUTF8StringEncoding] options:kNilOptions error:&jsonError];
  17. }
  18. if (!jsonError && dict) {
  19. handler(dict[@"id"],[dict[@"deleted"] boolValue],error);
  20. }
  21. else if(jsonError) handler(nil,NO,jsonError);
  22. else handler(nil,error);
  23. }];
  24. }

需要云代码

  1. Parse.Cloud.define("stripeUpdateCustomer",function(request,response)
  2. {
  3. Stripe.Customers.update
  4. (
  5. request.params["customerId"],request.params["data"],{
  6. success:function(results)
  7. {
  8. console.log(results["id"]);
  9. response.success(results);
  10. },error:function(error)
  11. {
  12. response.error("Error:" +error);
  13. }
  14. }
  15. );
  16. });
  17.  
  18. Parse.Cloud.define("stripeDeleteCardFromCustomer",response)
  19. {
  20. Stripe.initialize(STRIPE_SECRET_KEY);
  21. Parse.Cloud.httpRequest({
  22. method:"DELETE",//STRIPE_SECRET_KEY will be your stripe secrect key obvIoUsly,this is different from the public key that you will use in your iOS/Android side.
  23. // STRIPE_API_BASE_URL = 'api.stripe.com/v1'
  24. url: "https://" + STRIPE_SECRET_KEY + ':@' + STRIPE_API_BASE_URL + "/customers/" + request.params.customerId + "/cards/" + request.params.cardId,success: function(httpResponse) {
  25. response.success(httpResponse.text);
  26. },error: function(httpResponse) {
  27. response.error('Request Failed with response code ' + httpResponse.status);
  28. }
  29. });
  30. });

用于向客户或令牌收取费用的iOS代码通知字典中所需的参数是以美分而非美元,货币,然后是客户或tokenId的金额.请注意,客户可以拥有多张信用卡,但其中一张是活动信用卡.有效卡是在向客户收费时将收取的卡:

  1. //Will attempt to charge customer,if no customer exists,or it fails to charge the custoemr it will attempt to charge a card token directly;
  2. //*********Warning: This is the final step it will APPLY A CHARGE TO THE ACCOUNT.***************
  3.  
  4. -(void)processChargeThroughStripeWithCompletionHandler:(STPChargeCompletionHandler)handler
  5. {
  6. if (![self validForCardProcessing] && ![self validForCustomerProcessing]) {
  7. handler(nil,[NSError errorWithDomain:MY_ERROR_DOMAIN code:elErrorCodeNoCustomerOrTokenID userInfo:[NSDictionary dictionary]]);
  8. return;
  9. }
  10. [self processChargeThroughStripeUsingCustomerWithCompletionHandler:^(STPCharge *charge,NSError *error)
  11. {
  12. if (!error) handler(charge,error);
  13. else{
  14. [self processChargeThroughStripeUsingCardWithCompletionHandler:^(STPCharge *charge,NSError *error) {
  15. handler(charge,error);
  16. }];
  17. }
  18. }];
  19. }
  20.  
  21. //Process payment using a customer to their active card. No token is required if customer exists with a card on record.
  22. //*********Warning: This is the final step it will APPLY A CHARGE TO THE ACCOUNT.***************
  23.  
  24. -(void)processChargeThroughStripeUsingCustomerWithCompletionHandler:(STPChargeCompletionHandler)handler
  25. {
  26. if (!self.validForCustomerProcessing)
  27. {
  28. handler(self,[NSError errorWithDomain:MY_ERROR_DOMAIN code:elErrorCodeNoCustomerID userInfo:[NSDictionary dictionary]]);
  29. return;
  30. }
  31. [PFCloud callFunctionInBackground:@"chargeToken" withParameters:[STPCharge dictionaryFromSTPChargeForProccessingUsingCustomer:self] block:^(id object,NSError *error)
  32. {
  33. if (!error)
  34. {
  35. [self initSelfWithDictionary:object];
  36. NSLog(@"object:%@",object);
  37. }
  38. handler(self,error);
  39. }];
  40. }
  41.  
  42. //Process payment using a token that is attached to the charge,when complete self will be updated with the new charge information
  43. //*********Warning: This is the final step it will APPLY A CHARGE TO THE ACCOUNT.***************
  44.  
  45. -(void)processChargeThroughStripeUsingCardWithCompletionHandler:(STPChargeCompletionHandler)handler
  46. {
  47. if (!self.validForCardProcessing)
  48. {
  49. handler(self,[NSError errorWithDomain:MY_ERROR_DOMAIN code:elErrorCodeNoTokenID userInfo:[NSDictionary dictionary]]);
  50. return;
  51. }
  52. [PFCloud callFunctionInBackground:@"chargeToken" withParameters:[STPCharge dictionaryFromSTPChargeForProccessingUsingCard:self] block:^(id object,NSError *error)
  53. {
  54. if (!error)
  55. {
  56. [self initSelfWithDictionary:object];
  57. }
  58. handler(self,error);
  59. }];
  60. }
  61. + (NSDictionary *)dictionaryFromSTPChargeForProccessingUsingCard:(STPCharge *)charge
  62. {
  63. NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
  64. dictionary[@"amount"] = charge.amountInCents;
  65. dictionary[@"currency"] = charge.currency;
  66. dictionary[@"card"] = charge.token.tokenId;
  67. return dictionary;
  68. }
  69. + (NSDictionary *)dictionaryFromSTPChargeForProccessingUsingCustomer:(STPCharge *)charge
  70. {
  71. NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
  72. dictionary[@"amount"] = charge.amountInCents;
  73. dictionary[@"currency"] = charge.currency;
  74. dictionary[@"customer"] = charge.customer.identifier;
  75. return dictionary;
  76. }

用于向客户/令牌收费的云代码

  1. Parse.Cloud.define("chargeToken",response)
  2. {
  3. Stripe.initialize(STRIPE_SECRET_KEY);
  4. Stripe.Charges.create
  5. (
  6. request.params,{
  7. success:function(results)
  8. {
  9. response.success(results);
  10. },error:function(error)
  11. {
  12. response.error("Error:" +error);
  13. }
  14. }
  15. );
  16. });

猜你在找的iOS相关文章