在iOS应用中使用Braintree payment api

时间:2013-12-06 12:28:28

标签: ios payment braintree

我想在我的iOS应用中使用Braintree API。

我的应用程序用于出租目的,即请求者用户必须向他想租用的资产所有者付款。

我检查过以下链接: http://www.youtube.com/watch?v=s7GlgBFM20I

https://www.braintreepayments.com/developers

http://www.youtube.com/watch?v=2y8Tsml6JYo

https://www.braintreepayments.com/braintrust/venmo-touch-screencasts-add-one-touch-payments-to-your-app-in-15-minutes

但是我不知道在哪里使用Braintree或Venmo api提供接收者的帐户详细信息,例如我们可以在PayPal iOS sdk中传递接收者的电子邮件,然后PayPal向注册的用户支付金额电子邮件。

我在Braintree Payment API中搜索的内容相同。

非常感谢任何帮助。

提前致谢。

我正在使用以下代码:(使用braintree提供的示例代码)

/* Get called when user pay on Pay button on screen. 
   User wil see a form for entering his credit card number, CVV and expiration date. */
-(IBAction)payButtonClicked 
{
    self.paymentViewController =
    [BTPaymentViewController paymentViewControllerWithVenmoTouchEnabled:YES];
    self.paymentViewController.delegate = self;

    [self presentViewController:self.paymentViewController animated:YES completion:nil];
}

// When a user types in their credit card information correctly, the BTPaymentViewController sends you
// card details via the `didSubmitCardWithInfo` delegate method.
//
// NB: you receive raw, unencrypted info in the `cardInfo` dictionary, but
// for easy PCI Compliance, you should use the `cardInfoEncrypted` dictionary
// to securely pass data through your servers to the Braintree Gateway.
- (void)paymentViewController:(BTPaymentViewController *)paymentViewController
        didSubmitCardWithInfo:(NSDictionary *)cardInfo
         andCardInfoEncrypted:(NSDictionary *)cardInfoEncrypted {
    [self savePaymentInfoToServer:cardInfoEncrypted]; // send card through your server to Braintree Gateway
}

// When a user adds a saved card from Venmo Touch to your app, the BTPaymentViewController sends you
// a paymentMethodCode that you can pass through your servers to the Braintree Gateway to
// add the full card details to your Vault.
- (void)paymentViewController:(BTPaymentViewController *)paymentViewController
didAuthorizeCardWithPaymentMethodCode:(NSString *)paymentMethodCode {
    // Create a dictionary of POST data of the format
    // {"payment_method_code": "[encrypted payment_method_code data from Venmo Touch client]"}
    NSMutableDictionary *paymentInfo = [NSMutableDictionary dictionaryWithObject:paymentMethodCode
                                                                          forKey:@"payment_method_code"];
    [self savePaymentInfoToServer:paymentInfo]; // send card through your server to Braintree Gateway
}

#define SAMPLE_CHECKOUT_BASE_URL @"http://venmo-sdk-sample-two.herokuapp.com"
//#define SAMPLE_CHECKOUT_BASE_URL @"http://localhost:4567"

// Pass payment info (eg card data) from the client to your server (and then to the Braintree Gateway).
// If card data is valid and added to your Vault, display a success message, and dismiss the BTPaymentViewController.
// If saving to your Vault fails, display an error message to the user via `BTPaymentViewController showErrorWithTitle`
// Saving to your Vault may fail, for example when
// * CVV verification does not pass
// * AVS verification does not pass
// * The card number was a valid Luhn number, but nonexistent or no longer valid
- (void) savePaymentInfoToServer:(NSDictionary *)paymentInfo {

    NSURL *url;
    if ([paymentInfo objectForKey:@"payment_method_code"]) {
        url = [NSURL URLWithString: [NSString stringWithFormat:@"%@/card/payment_method_code", SAMPLE_CHECKOUT_BASE_URL]];
    } else {
        url = [NSURL URLWithString: [NSString stringWithFormat:@"%@/card/add", SAMPLE_CHECKOUT_BASE_URL]];
    }
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];

    // You need a customer id in order to save a card to the Braintree vault.
    // Here, for the sake of example, we set customer_id to device id.
    // In practice, this is probably whatever user_id your app has assigned to this user.
    NSString *customerId = [[UIDevice currentDevice] identifierForVendor].UUIDString;
    [paymentInfo setValue:customerId forKey:@"customer_id"];

    request.HTTPBody = [self postDataFromDictionary:paymentInfo];
    request.HTTPMethod = @"POST";

    [NSURLConnection sendAsynchronousRequest:request
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response, NSData *body, NSError *requestError)
     {
         NSError *err = nil;
         if (!response && requestError) {
             NSLog(@"requestError: %@", requestError);
             [self.paymentViewController showErrorWithTitle:@"Error" message:@"Unable to reach the network."];
             return;
         }

         NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:body options:kNilOptions error:&err];
         NSLog(@"saveCardToServer: paymentInfo: %@ response: %@, error: %@", paymentInfo, responseDictionary, requestError);

         if ([[responseDictionary valueForKey:@"success"] isEqualToNumber:@1]) { // Success!
             // Don't forget to call the cleanup method,
             // `prepareForDismissal`, on your `BTPaymentViewController`
             [self.paymentViewController prepareForDismissal];
             // Now you can dismiss and tell the user everything worked.
             [self dismissViewControllerAnimated:YES completion:^(void) {
                 [[[UIAlertView alloc] initWithTitle:@"Success" message:@"Saved your card!" delegate:nil
                                   cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
                 [[VTClient sharedVTClient] refresh];
             }];

         } else { // The card did not save correctly, so show the error from server with convenenience method `showErrorWithTitle`
             [self.paymentViewController showErrorWithTitle:@"Error saving your card" message:[self messageStringFromResponse:responseDictionary]];
         }
     }];
}

1 个答案:

答案 0 :(得分:1)

我在Braintree工作。如果您有更多问题或需要更多帮助,请与our support team联系。

Braintree iOS SDK docs包含quickstart guide,以及有关图书馆功能的详细信息。

如果您正在寻找有关如何在您的应用/网站用户之间进行付款的信息,则应该查看the marketplace guideVenmo APIs。< / p>