2013-02-13 107 views
0

我正試圖在IOS應用程序中通過PayPal實現簡單付款。我嘗試了PayPal API。 API給出的示例代碼工作正常。我試圖在我的應用程序中實現它不會得到正確的崩潰。有沒有最簡單的方法來實現這一點。在iPhone應用程序中使用PayPal實現簡單付款?

我添加了Libray文件。並按照代碼:

[PayPal getPayPalInst].feePayer = feePayer; 
[PayPal getPayPalInst].shippingEnabled = shippingSwitch.on; 
[PayPal getPayPalInst].dynamicAmountUpdateEnabled = dynamicAmountCalculationSwitch.on; 

if (isAdvanced) { 
    [[PayPal getPayPalInst] advancedCheckoutWithPayment:advancedPayment]; 
} else { 
    [[PayPal getPayPalInst] checkoutWithPayment:payment]; 
} 

對於付款的行動將越來越埃羅 請幫助這個問題。

在此先感謝。

+2

你能證明你在做什麼和你得到了什麼錯誤後? – tkanzakic 2013-02-13 08:18:43

+3

您將無法使用PayPal付款在商店中獲得您的應用程序...您必須在應用程序中使用蘋果付款選項 – Bastian 2013-02-13 08:22:39

+0

@Bastian使用PayPal,我已獲得蘋果公司的批准,並且有3款Apps適合我...蘋果公司接受payapl集成/ – Dany 2013-02-13 08:50:40

回答

2

導入整個貝寶庫使用此代碼

#import "PayPal.h" 


typedef enum PaymentStatuses { 
PAYMENTSTATUS_SUCCESS, 
PAYMENTSTATUS_FAILED, 
PAYMENTSTATUS_CANCELED, 
} PaymentStatus; 



@interface Paybypal : UIViewController<PayPalPaymentDelegate>{ 

@private 
CGFloat y; 
BOOL resetScrollView; 
PaymentStatus status; 
} 

@property(nonatomic,retain)NSString *details; 
@property(nonatomic,retain)NSDecimalNumber *totalvaluemin; 





in .m file 



#import "Paybypal.h" 
#import "PayPalPayment.h" 
#import "PayPalAdvancedPayment.h" 
#import "PayPalAmounts.h" 
#import "PayPalReceiverAmounts.h" 
#import "PayPalAddress.h" 
#import "PayPalInvoiceItem.h" 
#import "SuccessViewController.h" 

#define SPACING 3. 

@interface Paybypal() 

@end 

@implementation Paybypal 

@synthesize details,totalvaluemin; 


-(void)addLabelWithText:(NSString *)text andButtonWithType:(PayPalButtonType)type withAction:(SEL)action { 
UIFont *font = [UIFont boldSystemFontOfSize:14.]; 
CGSize size = [text sizeWithFont:font]; 


UIButton *button = [[PayPal getPayPalInst] getPayButtonWithTarget:self andAction:action andButtonType:type]; 
CGRect frame = button.frame; 
frame.origin.x = round((self.view.frame.size.width - button.frame.size.width)/2.); 
frame.origin.y = round(y + size.height); 
button.frame = frame; 
[self.view addSubview:button]; 

UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(frame.origin.x, y, size.width, size.height)] autorelease]; 
label.font = font; 
label.text = text; 
label.backgroundColor = [UIColor clearColor]; 
[self.view addSubview:label]; 

y += size.height + frame.size.height + SPACING; 
} 



- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 



self.view = [[[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame] autorelease]; 
self.view.autoresizesSubviews = FALSE; 
UIColor *color = [UIColor groupTableViewBackgroundColor]; 
if (CGColorGetPattern(color.CGColor) == NULL) { 
    color = [UIColor lightGrayColor]; 
} 
self.title = @""; 


UIImageView *backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Background.JPG"]]; 
backgroundView.frame = self.view.bounds; 
[[self view] addSubview:backgroundView]; 

status = PAYMENTSTATUS_CANCELED; 

y = 2.; 

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
button.frame = CGRectMake((self.view.frame.size.width - 125), 222, 75, 25); 

[button setTitle:@"" forState:UIControlStateNormal]; 
[button addTarget:self action:@selector(RetryInitialization) forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubview:button]; 

[self addLabelWithText:@"" andButtonWithType:BUTTON_294x43 withAction:@selector(simplePayment)]; 


} 

- (void)viewDidUnload 
{ 
[super viewDidUnload]; 
// Release any retained subviews of the main view. 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
} 

- (void)simplePayment { 

[PayPal getPayPalInst].shippingEnabled = TRUE; 

[PayPal getPayPalInst].dynamicAmountUpdateEnabled = TRUE; 


[PayPal getPayPalInst].feePayer = FEEPAYER_EACHRECEIVER; 


PayPalPayment *payment = [[[PayPalPayment alloc] init] autorelease]; 
payment.recipient = @"receiver email id"; 
payment.paymentCurrency = @"USD"; 
payment.description = [NSString stringWithFormat:@"%@",details]; 
payment.merchantName = @"receiver name"; 


payment.subTotal = totalvaluemin; 

payment.invoiceData = [[[PayPalInvoiceData alloc] init] autorelease]; 
payment.invoiceData.totalShipping = [NSDecimalNumber decimalNumberWithString:@"0"]; 
payment.invoiceData.totalTax = [NSDecimalNumber decimalNumberWithString:@"0.00"]; 




payment.invoiceData.invoiceItems = [NSMutableArray array]; 
PayPalInvoiceItem *item = [[[PayPalInvoiceItem alloc] init] autorelease]; 
item.totalPrice = payment.subTotal; 
item.name =[NSString stringWithFormat:@"%@",details]; 
[payment.invoiceData.invoiceItems addObject:item]; 

[[PayPal getPayPalInst] checkoutWithPayment:payment]; 
    } 



    #pragma mark - 
    #pragma mark PayPalPaymentDelegate methods 

    -(void)RetryInitialization 
{ 
//[PayPal initializeWithAppID:@"APP-80W284485P519543T" forEnvironment:ENV_SANDBOX]; 

//DEVPACKAGE 
    //[PayPal initializeWithAppID:@"APPLIVEID" forEnvironment:ENV_LIVE]; 
// [PayPal initializeWithAppID:@"anything" forEnvironment:ENV_NONE]; 
} 


- (void)paymentSuccessWithKey:(NSString *)payKey andStatus:(PayPalPaymentStatus)paymentStatus { 
NSString *severity = [[PayPal getPayPalInst].responseMessage objectForKey:@"severity"]; 
NSLog(@"severity: %@", severity); 
NSString *category = [[PayPal getPayPalInst].responseMessage objectForKey:@"category"]; 
NSLog(@"category: %@", category); 
NSString *errorId = [[PayPal getPayPalInst].responseMessage objectForKey:@"errorId"]; 
NSLog(@"errorId: %@", errorId); 
NSString *message = [[PayPal getPayPalInst].responseMessage objectForKey:@"message"]; 
NSLog(@"message: %@", message); 

status = PAYMENTSTATUS_SUCCESS; 
} 


- (void)paymentFailedWithCorrelationID:(NSString *)correlationID { 

NSString *severity = [[PayPal getPayPalInst].responseMessage objectForKey:@"severity"]; 
NSLog(@"severity: %@", severity); 
NSString *category = [[PayPal getPayPalInst].responseMessage objectForKey:@"category"]; 
NSLog(@"category: %@", category); 
NSString *errorId = [[PayPal getPayPalInst].responseMessage objectForKey:@"errorId"]; 
NSLog(@"errorId: %@", errorId); 
NSString *message = [[PayPal getPayPalInst].responseMessage objectForKey:@"message"]; 
NSLog(@"message: %@", message); 

status = PAYMENTSTATUS_FAILED; 
} 


- (void)paymentCanceled { 
status = PAYMENTSTATUS_CANCELED; 
} 


- (void)paymentLibraryExit { 
UIAlertView *alert = nil; 
switch (status) { 
    case PAYMENTSTATUS_SUCCESS: 
     [self.navigationController pushViewController:[[[SuccessViewController alloc] init] autorelease] animated:TRUE]; 
     break; 
    case PAYMENTSTATUS_FAILED: 
     alert = [[UIAlertView alloc] initWithTitle:@"Order failed" 
              message:@"Your order failed. Touch \"Pay with PayPal\" to try again." 
              delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     break; 
    case PAYMENTSTATUS_CANCELED: 
     alert = [[UIAlertView alloc] initWithTitle:@"Order canceled" 
              message:@"You canceled your order. Touch \"Pay with PayPal\" to try again." 
              delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     break; 
} 
[alert show]; 
[alert release]; 
} 


- (PayPalAmounts *)adjustAmountsForAddress:(PayPalAddress const *)inAddress andCurrency:(NSString const *)inCurrency andAmount:(NSDecimalNumber const *)inAmount 
           andTax:(NSDecimalNumber const *)inTax andShipping:(NSDecimalNumber const *)inShipping andErrorCode:(PayPalAmountErrorCode *)outErrorCode { 
//do any logic here that would adjust the amount based on the shipping address 
PayPalAmounts *newAmounts = [[[PayPalAmounts alloc] init] autorelease]; 
newAmounts.currency = @"SGD"; 
newAmounts.payment_amount = (NSDecimalNumber *)inAmount; 

//change tax based on the address 
if ([inAddress.state isEqualToString:@"CA"]) { 
    newAmounts.tax = [NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%.2f",[inAmount floatValue] * .1]]; 
} else { 
    newAmounts.tax = [NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%.2f",[inAmount floatValue] * .08]]; 
} 
newAmounts.shipping = (NSDecimalNumber *)inShipping; 

//if you need to notify the library of an error condition, do one of the following 
//*outErrorCode = AMOUNT_ERROR_SERVER; 
//*outErrorCode = AMOUNT_CANCEL_TXN; 
//*outErrorCode = AMOUNT_ERROR_OTHER; 

return newAmounts; 
} 


- (NSMutableArray *)adjustAmountsAdvancedForAddress:(PayPalAddress const *)inAddress andCurrency:(NSString const *)inCurrency 
          andReceiverAmounts:(NSMutableArray *)receiverAmounts andErrorCode:(PayPalAmountErrorCode *)outErrorCode { 
NSMutableArray *returnArray = [NSMutableArray arrayWithCapacity:[receiverAmounts count]]; 
for (PayPalReceiverAmounts *amounts in receiverAmounts) { 
    //leave the shipping the same, change the tax based on the state 
    if ([inAddress.state isEqualToString:@"CA"]) { 
     amounts.amounts.tax = [NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%.2f",[amounts.amounts.payment_amount floatValue] * .1]]; 
    } else { 
     amounts.amounts.tax = [NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%.2f",[amounts.amounts.payment_amount floatValue] * .08]]; 
    } 
    [returnArray addObject:amounts]; 
} 

//if you need to notify the library of an error condition, do one of the following 
//*outErrorCode = AMOUNT_ERROR_SERVER; 
//*outErrorCode = AMOUNT_CANCEL_TXN; 
//*outErrorCode = AMOUNT_ERROR_OTHER; 

return returnArray; 
} 


#pragma mark - 
#pragma mark UITextFieldDelegate methods 

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
[textField resignFirstResponder]; 
return TRUE; 
} 

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
resetScrollView = FALSE; 
return TRUE; 
} 

- (void)textFieldDidBeginEditing:(UITextField *)textField { 
resetScrollView = TRUE; 

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:.3]; 
[UIView setAnimationBeginsFromCurrentState:TRUE]; 
self.view.frame = CGRectMake(0., -216., self.view.frame.size.width, self.view.frame.size.height); 
[UIView commitAnimations]; 
} 

- (void)textFieldDidEndEditing:(UITextField *)textField { 
if (resetScrollView) { 
    resetScrollView = FALSE; 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:.3]; 
    [UIView setAnimationBeginsFromCurrentState:TRUE]; 
    self.view.frame = CGRectMake(0., 0., self.view.frame.size.width, self.view.frame.size.height); 
    [UIView commitAnimations]; 
} 
} 

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
return TRUE; 
} 


@end 
+0

我在PayPal中的說明字符串很長,我如何增加標籤大小? – Madhu 2013-12-03 10:12:06