gpt4 book ai didi

iphone - 在 iPhone 应用程序中使用 PayPal 实现简单支付?

转载 作者:太空宇宙 更新时间:2023-11-03 16:19:49 25 4
gpt4 key购买 nike

我正在尝试在 IOS 应用程序中通过 PayPal 进行简单支付。我尝试了 PayPal API。 API 提供的示例代码运行良好。我正在尝试在我的应用程序中实现它不会正确获得崩溃。有没有最简单的方法来实现这一目标。

我添加了 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];
}

对于付款操作,它会出错请帮助解决这个问题。

提前致谢。

最佳答案

导入整个 paypal 库后使用此代码

#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

关于iphone - 在 iPhone 应用程序中使用 PayPal 实现简单支付?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14849131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com