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

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

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


创建APP

选择新建APP


添加APPID

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


选择支付样式



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


添加一个测试账号


储存、完工~

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

三、项目配置

1、不废话,图片走起



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

四、代码

1、头文件不会忘了吧
#import             // pay支付
2、协议还记得吧
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:粗略整理,不完善之处望见谅~