Faraz Haider Faraz Haider - 11 days ago 4
iOS Question

ios paypal simple payment with multiple objects

UPDATED CODE
thanks to ragnesh I am able to do multiple items payment but without a discount, i needed a 10% discount on each product, can anyone help regarding this?

- (void)simplePayment {
[PayPal getPayPalInst].shippingEnabled = TRUE;

[PayPal getPayPalInst].dynamicAmountUpdateEnabled = TRUE;

[PayPal getPayPalInst].feePayer = FEEPAYER_EACHRECEIVER;

PayPalPayment *payment = [[PayPalPayment alloc] init];

payment.recipient = @"email@example.com";
payment.paymentCurrency = @"USD";

payment.invoiceData = [[PayPalInvoiceData alloc] init];

payment.invoiceData.totalShipping = [NSDecimalNumber decimalNumberWithString:@"0"];

payment.invoiceData.totalTax = [NSDecimalNumber decimalNumberWithString:@"0.00"];

payment.invoiceData.invoiceItems = [NSMutableArray array];

NSMutableDictionary * dic = [[NSMutableDictionary alloc]init];

for (int i = 0; i < [db.array count]; i++) {
myData =[db.array objectAtIndex:i];
[dic setValue:myData.itemName forKey:[NSString stringWithFormat:@"title%d",i]];
[dic setValue:[NSString stringWithFormat:@"%d",myData.itemPrice] forKey:[NSString stringWithFormat:@"price%d",i]];
[dic setValue:[NSString stringWithFormat:@"%d",myData.itemQuantity] forKey:[NSString stringWithFormat:@"quantity%d",i]];
}

NSLog(@"%@",dic);


for (int i=0; i<[db.array count]; i++) {
PayPalInvoiceItem *item = [[PayPalInvoiceItem alloc] init];
[item setItemCount:[NSDecimalNumber decimalNumberWithString:[dic objectForKey:[NSString stringWithFormat:@"quantity%d",i]]]];
[item setItemPrice:[NSDecimalNumber decimalNumberWithString:[dic objectForKey:[NSString stringWithFormat:@"price%d",i]]]];
item.name = [dic objectForKey:[NSString stringWithFormat:@"title%d",i]];

[payment.invoiceData.invoiceItems addObject:item];


NSDecimalNumber *paypalItemQuantity = [NSDecimalNumber decimalNumberWithString:[dic objectForKey:[NSString stringWithFormat:@"quantity%d",i]]];

NSDecimalNumber *paypalItemPrice = [NSDecimalNumber decimalNumberWithString:[dic objectForKey:[NSString stringWithFormat:@"price%d",i]]];


payment.subTotal =[NSDecimalNumber decimalNumberWithString: [NSString stringWithFormat:@"%f",[payment.subTotal floatValue]
+[paypalItemPrice floatValue] *

[paypalItemQuantity floatValue]

]];


NSLog(@"%@",[dic objectForKey:[NSString stringWithFormat:@"price%d",i]]);
NSLog(@"%@",[dic objectForKey:[NSString stringWithFormat:@"title%d",i]]);
NSLog(@"%@",payment.subTotal);


}

[[PayPal getPayPalInst] checkoutWithPayment:payment];
}


for discount i did something like that: but it pops up error

payment.subTotal =[NSDecimalNumber decimalNumberWithString: [NSString stringWithFormat:@"%f",([payment.subTotal floatValue]*

[paypalItemQuantity floatValue])
-([paypalItemPrice floatValue] *

[paypalItemQuantity floatValue] *0.1)

]];

Answer

Follow this for payPal integration

Put this line out of your loop

payment.invoiceData.invoiceItems = [NSMutableArray array];

EDIT

- (void)simplePayment
{
    //dismiss any native keyboards

    //optional, set shippingEnabled to TRUE if you want to display shipping
    //options to the user, default: TRUE
    [PayPal getPayPalInst].shippingEnabled = TRUE;

    //optional, set dynamicAmountUpdateEnabled to TRUE if you want to compute
    //shipping and tax based on the user's address choice, default: FALSE
    [PayPal getPayPalInst].dynamicAmountUpdateEnabled = TRUE;

    //optional, choose who pays the fee, default: FEEPAYER_EACHRECEIVER
    [PayPal getPayPalInst].feePayer = FEEPAYER_EACHRECEIVER;


    //for a payment with a single recipient, use a PayPalPayment object
    NSMutableDictionary *dic=[[NSUserDefaults standardUserDefaults]valueForKey:@"drinkDetailDic"];


    PayPalPayment *payment = [[PayPalPayment alloc] init];

    payment.recipient = @"email@example.com";
    payment.paymentCurrency = @"USD";

    payment.description = [dic objectForKey:@"title"];


    //invoiceData is a PayPalInvoiceData object which contains tax, shipping, and a list of PayPalInvoiceItem objects
    payment.invoiceData = [[PayPalInvoiceData alloc] init];

    //shippping charge
    payment.invoiceData.totalShipping = [NSDecimalNumber decimalNumberWithString:@"0"];

    payment.invoiceData.totalTax = [NSDecimalNumber decimalNumberWithString:@"0.00"];

    payment.invoiceData.invoiceItems = [NSMutableArray array];


    for (int i=0; i<2; i++)
    {
        PayPalInvoiceItem *item = [[PayPalInvoiceItem alloc] init];
        item.totalPrice = payment.subTotal;
        [item setItemCount:[NSNumber numberWithInt:1]];
        [item setItemPrice:[NSDecimalNumber decimalNumberWithString:[dic objectForKey:@"price"]]];
        item.name = [dic objectForKey:@"title"];

        [payment.invoiceData.invoiceItems addObject:item];

        payment.subTotal =[NSDecimalNumber decimalNumberWithString: [NSString stringWithFormat:@"%f",[payment.subTotal floatValue]
                                                                     +[[dic objectForKey:@"price"] floatValue]]];

    }

    [[PayPal getPayPalInst] checkoutWithPayment:payment];
}

NOTE

If you are adding multiple item then subTotal price is same as sum of all item price.

Comments