iOS APP内支付

一、证书配置(在此暂时不赘述了)

developer.apple.com/account/ios/identifier/bundle

二、苹果内支付需要的产品ID

创建内支付ID

1、创建一个新的APP(此APP的)  -> 看下图

创建APP

                   选择新建APP<根据自己所需,此处已APP为例>

添加APPID

  到此一个APP创建好了,当然如果需要上线的话,就需要详细填写内容,再次不多说了。此处仅作为内支付测试所以不需要填写,直接下一步>>>>>>>>>>>

选择支付样式


>>>>>>>>>>>>>>


添加一个测试账号
储存、完工~



到此,一个产品ID创建完成,下面走一趟项目配置

三、项目配置

1、不废话,图片走起


到这里就差不多了,下面就是最想看到也是最简单的代码部分了。代码很简单、只是前期工作有点繁琐

四、代码 

1、头文件不会忘了吧

#import <StoreKit/StoreKit.h>             // pay支付

2、协议还记得吧

<SKProductsRequestDelegate,SKPaymentTransactionObserver>

3、复制代码的地方

#pragma mark ---- 苹果Pay支付

/** 苹果Pay支付 */

- (void)doApplePayWithData:(NSDictionary *)orderDic {

// 设置代理

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

//判断是否可进行支付

if ([SKPaymentQueue canMakePayments])

{

NSLog(@"许程序内付费购买");

//根据商品ID查找商品信息

NSArray *product = [[NSArray alloc] initWithObjects:@"申请到的产品ID", nil];

NSSet *nsset = [NSSet setWithArray:product];

//创建SKProductsRequest对象,用想要出售的商品的标识来初始化, 然后附加上对应的委托对象。

//该请求的响应包含了可用商品的本地化信息。

SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:nsset];

request.delegate = self;

[request start];

}

else

{

[SVProgressHUD showErrorWithStatus:@"不允许程序内付费"];

}

}

#pragma mark ---- SKProductsRequestDelegate

// 以上查询的回调函数

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {

NSLog(@"----%lu---",(unsigned long)response.invalidProductIdentifiers.count);

NSLog(@"goods info back");

NSArray *myProduct = response.products;

if(myProduct.count == 0){

NSLog(@"无法获取产品信息,购买失败。");

return;

}

for(SKProduct *pro in myProduct){

NSLog(@"%@", [pro description]);

NSLog(@"%@", [pro localizedTitle]);

NSLog(@"%@", [pro localizedDescription]);

NSLog(@"%@", [pro price]);

NSLog(@"%@", [pro productIdentifier]);

NSLog(@"%@", [pro.priceLocale objectForKey:NSLocaleCurrencySymbol]);

NSLog(@"%@", [pro.priceLocale objectForKey:NSLocaleCurrencyCode]);

if([pro.productIdentifier isEqualToString:@"申请到的产品ID"]){

// 下面代码看需要

_currentProduct  = pro;

_appPayGoodsPrice = [NSString stringWithFormat:@"%@", [pro price]];

_appPayGoodsCurrency = [NSString stringWithFormat:@"%@",[pro.priceLocale objectForKey:NSLocaleCurrencyCode]];

break;

}

}

NSLog(@"start pay");

//创建一个支付对象,并放到队列中

SKPayment *payment = [SKPayment paymentWithProduct:_currentProduct];

NSLog(@"---------发送购买请求------------");

[[SKPaymentQueue defaultQueue] addPayment:payment];

}

- (void)request:(SKRequest *)request didFailWithError:(NSError *)error {

NSLog(@"请求商品失败%@",error);

}

- (void)requestDidFinish:(SKRequest *)request {

[SVProgressHUD dismiss];

NSLog(@"反馈信息结束调用");

}

#pragma mark ---- SKPaymentTransactionObserver

// 监听购买结果

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions{

NSLog(@"pay result");

for(SKPaymentTransaction *transaction in transactions){

switch (transaction.transactionState)

{

case SKPaymentTransactionStatePurchased:

{

//交易完成

NSLog(@"transactionIdentifier = %@", transaction.transactionIdentifier);

NSLog(@"---苹果Pay支付-交易完成---");

kSucPrompt(@"---苹果Pay支付-交易完成---");

}

break;

case SKPaymentTransactionStateFailed:

{

//交易失败

NSLog(@"---苹果Pay支付-交易失败---");

kFailPrompt(@"---苹果Pay支付-交易失败---");

}

break;

case SKPaymentTransactionStateRestored:

{

//已经购买过该商品

NSLog(@"---苹果Pay支付-已经购买过该商品---");

kFailPrompt(@"---苹果Pay支付-已经购买过该商品---");

}

break;

case SKPaymentTransactionStatePurchasing:

{

//商品添加进列表

NSLog(@"---苹果Pay支付-商品添加进列表---");

kSucPrompt(@"---苹果Pay支付-商品添加进列表---");

}

break;

default:

break;

}

}

}

//交易结束

- (void)completeTransaction:(SKPaymentTransaction *)transaction {

NSLog(@"交易结束");

[[SKPaymentQueue defaultQueue] finishTransaction:transaction];

}

//- (void)dealloc{

//    [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];

//    [[NSNotificationCenter defaultCenter] removeObserver:self];

//}


五、补充

1、支付测试前需要把测试机上面已登录的苹果账号注销掉;

2、沙箱测试员的邮箱需是未注册过苹果账号的邮箱;


ps:粗略整理,不完善之处望见谅~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,511评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,495评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,595评论 0 225
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,558评论 0 190
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,715评论 3 270
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,672评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,112评论 2 291
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,837评论 0 181
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,417评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,928评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,316评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,773评论 2 234
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,253评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,827评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,440评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,523评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,583评论 2 249

推荐阅读更多精彩内容

  • iOS支付 iOS支付分为两类,第三方支付和应用内支付(内购)。 第三方支付包括:支付宝支付、微信支付、银联支付、...
    请输入账号名阅读 6,055评论 3 22
  • 在我们应用开发中我们经常在自己的项目中使用到支付,下面我们来谈谈iOS这块的支付;iOS支付主要分为两类,第三方支...
    Hither阅读 8,063评论 9 42
  • iOS应用如果涉及到支付功能,分为两类:第三方支付和苹果内购。那么什么情况下选择使用第三方支付,又在什么情况下选择...
    ZfRee阅读 38,228评论 36 66
  • - 消耗型项目 就像你玩游戏需要买金币,买钻石等,只要花钱就可以无限次的购买 - 非消耗型项目 就像你在App S...
    tiger2016阅读 553评论 0 1
  • Proxy代理是一个共通的概念,可以起到拦截的作用。ES6里将Proxy标准化了,提供了Proxy构造函数,用来生...
    张歆琳阅读 10,079评论 1 7