我正在开发一个应用程序,希望通过它出售某些活动门票。
我能否使用PayPal来实现此目的,并且苹果是否会批准使用除StoreKit框架之外的其他方式来开发这个应用程序。
我搜索了这个主题,但是我没有找到任何可能的解决方案。
一些搜索结果说可以使用PayPal,而另一些则表示苹果从不批准使用除In-App Purchase之外的付款网关的应用程序。
请帮帮我!
我正在开发一个应用程序,希望通过它出售某些活动门票。
我能否使用PayPal来实现此目的,并且苹果是否会批准使用除StoreKit框架之外的其他方式来开发这个应用程序。
我搜索了这个主题,但是我没有找到任何可能的解决方案。
一些搜索结果说可以使用PayPal,而另一些则表示苹果从不批准使用除In-App Purchase之外的付款网关的应用程序。
请帮帮我!
是的,您可以在应用程序中使用PayPal支付网关。您可以从以下链接查看完整的文档:
请在您的.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://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
11.3. 使用IAP购买应用外的实体商品或服务的应用将被拒绝。
如果您的活动发生在应用程序外部,则不允许使用应用内购买。 - Matthias Bauch不可以。每个iOS应用都必须符合商店审核指南,才能通过苹果的审核。该指南明确规定: - 不允许使用“除应用内购买API(IAP)以外的系统”进行付款购买内容、功能或服务(11.2) - 不允许“使用IAP购买物理商品或在应用之外使用的商品和服务”
确实,有Paypal的API可供此类目的使用,但正如上文所述,使用它的应用将无法通过审核。
嗯,我认为这取决于情况。
虽然我确信苹果不会允许除应用内购买之外的任何其他方式,但我知道德国应用商店中至少有一个应用程序可以让你在应用内购买电影院的门票。他们提供信用卡支付和其他一些服务,应用内购买甚至都不可用。
他们以某种方式进入了商店,所以我建议您事先与苹果沟通,并了解他们是否会批准您的业务模式。
也许如果购买包括100%的现实世界物品或服务,并且不会改变应用本身的行为或内容,他们会批准其他付款方式。
这是可能的,但据我所知,Appstore不允许使用PayPal API。实现此功能的方法是将用户发送到一个处理付款的网站。在这里,您可以使用PHP API等。