Могу ли я использовать PayPal в приложениях для iPhone / iPad? - PullRequest
4 голосов
/ 04 августа 2011

Я работаю над приложением, через которое хочу продавать билеты на мероприятия.

Могу ли я использовать PayPal для этой цели, и Apple утвердит приложение с использованием другой, чем StoreKit Framework.

Я искал в этой теме, но не могу найти какое-либо возможное решение.

В некоторых поисках говорится, что можно использовать PayPal, а в другом говорится, что Apple никогда не одобряет приложение с использованием платежного шлюза.кроме inAppPurchase.

Пожалуйста, помогите мне!

Ответы [ 5 ]

16 голосов
/ 04 августа 2011

Да, вы можете использовать платежный шлюз PayPal со своим приложением. Вы можете увидеть полную документацию по ссылке ниже:

https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/library_documentation#mobile

Добавьте следующий код в ваш .h файл

#import "PayPal.h"
#import "PayPalList.h"

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

Реализация этого метода делегата "PayPalPaymentDelegate"

PayPalList *payPalList;
PaymentStatus status;

Добавьте следующий код в ваш .m файл

#import "PayPalPayment.h"
#import "PayPalAdvancedPayment.h"
#import "PayPalAmounts.h"
#import "PayPalReceiverAmounts.h"
#import "PayPalAddress.h"
#import "PayPalInvoiceItem.h"
#define SPACING 3.

- (void)ButtonWithType:(PayPalButtonType)type withAction:(SEL)action 
{

    UIButton *btnPayWithPayPal = [[PayPal getInstance] getPayButtonWithTarget:self andAction:action andButtonType:type];

    CGRect frame;
    frame.origin.x = 60;
    frame.origin.y = 315;
    frame.size.width = 304;
    frame.size.height = 40;

    btnPayWithPayPal.frame = frame;
    [self.view addSubview:btnPayWithPayPal];
}

- (void)viewDidLoad
{
     [self ButtonWithType:BUTTON_194x37 withAction:@selector(simplePayment)];
}

#pragma mark -
#pragma mark PayPalPaymentDelegate methods

- (void)paymentSuccessWithKey:(NSString *)payKey andStatus:(PayPalPaymentStatus)paymentStatus 
{
    status = PAYMENTSTATUS_SUCCESS;
}

- (void)paymentFailedWithCorrelationID:(NSString *)correlationID andErrorCode:(NSString *)errorCode andErrorMessage:(NSString *)errorMessage 
{
    status = PAYMENTSTATUS_FAILED;
}

- (void)paymentCanceled 
{
    status = PAYMENTSTATUS_CANCELED;
}

- (void)paymentLibraryExit 
{
    UIAlertView *alert = nil;
    switch (status) {
        case PAYMENTSTATUS_SUCCESS:
            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 = @"USD";
    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_ERROR_OTHER;

    return newAmounts;
}

#pragma mark -
#pragma mark Actions triggered by Pay with PayPal buttons

- (void)simplePayment 
{
        //optional, set shippingEnabled to TRUE if you want to display shipping
    //options to the user, default: TRUE
    [PayPal getInstance].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 getInstance].dynamicAmountUpdateEnabled = TRUE;

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

    //for a payment with a single recipient, use a PayPalPayment object
    PayPalPayment *payment = [[[PayPalPayment alloc] init] autorelease];

    payment.recipient = [NSString stringWithFormat:@"%@",payPalList.strRecipientPayPalId];
    payment.paymentCurrency = [NSString stringWithFormat:@"%@",e_commerceAppDelegate.strProductCurrency];
    payment.merchantName = [NSString stringWithFormat:@"%@",payPalList.strPayPalMerchantName];
    payment.ipnUrl = [NSString stringWithFormat:@"%@",payPalList.strIpnUrl];

    //subtotal of all items, without tax and shipping
    payment.subTotal = [NSDecimalNumber decimalNumberWithString:stringsubtotal];

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

    //invoiceItems is a list of PayPalInvoiceItem objects
    //NOTE: sum of totalPrice for all items must equal payment.subTotal
    //NOTE: example only shows a single item, but you can have more than one
    payment.invoiceData.invoiceItems = [NSMutableArray array];
    PayPalInvoiceItem *item = [[[PayPalInvoiceItem alloc] init] autorelease];
    item.totalPrice = payment.subTotal;

    //int i=0;

    for(i=0 ; i<[e_commerceAppDelegate.cartList count] ; i++)
    {
        cart = (Cart*)[e_commerceAppDelegate.cartList objectAtIndex:i];

        item.name = cart.proName;

        item.itemCount = [NSNumber numberWithInteger:cart.quantity];

        NSString *itemSingPrice = [NSString stringWithFormat:@"%.2f",cart.price];
        item.itemPrice = [NSDecimalNumber decimalNumberWithString:itemSingPrice];

        NSString *itemSubTotal = [NSString stringWithFormat:@"%.2f",cart.quantity*cart.price];
        item.totalPrice = [NSDecimalNumber decimalNumberWithString:itemSubTotal];

        [payment.invoiceData.invoiceItems addObject:item];

        item = [[[PayPalInvoiceItem alloc] init] autorelease];
    }

    NSScanner* scanner = [NSScanner localizedScannerWithString:e_commerceAppDelegate.strDeliveryCharges];
    NSDecimal decimal;
    [scanner scanDecimal:&decimal];
    NSDecimalNumber *decimalNumber = [NSDecimalNumber decimalNumberWithDecimal:decimal];

    payment.invoiceData.totalShipping = decimalNumber;

    [[PayPal getInstance] checkoutWithPayment:payment];

}

По ссылкам ниже вы можете получить представление о PayPal

https://www.x.com/community/ppx/xspaces/mobile/mep

https://www.x.com/docs/DOC-2532

https://cms.paypal.com/cms_content/US/en_US/files/developer/IPNGuide.pdf

https://cms.paypal.com/cms_content/US/en_US/files/developer/PP_MPL_Developer_Guide_and_Reference_Android.pdf

https://www.x.com/thread/45094

https://www.x.com/message/193751#193751

http://googlecheckout.blogspot.com/2010/06/pay-on-go-with-android-payment.html

https://chrome.google.com/webstore/detail/omomllobcfbllglbhpmafongpckhdcdn

1 голос
/ 26 августа 2011

Несмотря на то, что существует API для интеграции Paypal в iPhone, но в соответствии с рекомендациями Apple он не одобрит такие приложения для своего AppStore. См. Пункт 11.3 руководства Apple здесь https://developer.apple.com/appstore/resources/approval/guidelines.html

0 голосов
/ 14 января 2015

Нет, вы не можете. В Руководстве по обзору магазина , которому должно соответствовать каждое приложение iOS, чтобы получить разрешение от Apple, четко говорится, что: - вам не разрешается использовать «систему, отличную от API-интерфейсов покупок в приложении (IAP), для покупки контента, функций или услуг» для оплаты (11.2) - не разрешается «нам [e] IAP приобретать физические товары или товары и услуги, используемые за пределами Приложения»

Действительно, для этой цели существует API от Paypal , но, как указано выше, приложения, использующие его, не пройдут проверку.

0 голосов
/ 04 августа 2011

Ну, я думаю, что это зависит.

Хотя я был уверен, что Apple не допустит ничего, кроме покупок в приложении, я знаю знаю хотя бы одно приложение в немецком магазине приложений, который позволяет приобрести билеты в кинотеатр в приложении.Они предлагают оплату с помощью кредитной карты и ряда других услуг, IAP даже не доступен.

Они каким-то образом добрались до магазина, поэтому я бы посоветовал вам заранее поговорить с Apple и выяснить,одобрят ли они вашу бизнес-модель или нет.

Может быть, они одобрят другие способы оплаты, если покупка состоит из 100% реальных объектов или услуг и не меняет поведение или содержимое самого приложения.

0 голосов
/ 04 августа 2011

Возможно, но Appstore не позволит использовать API PayPal, насколько я знаю. Способ сделать это - отправить пользователя на сайт, который будет обрабатывать платеж. Здесь вы можете использовать PHP API, например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...