美文网首页
iOS内购人走的心酸路(下)

iOS内购人走的心酸路(下)

作者: 默默码字的我 | 来源:发表于2022-02-07 17:22 被阅读0次

现在先了解哈内购的流程

好的思路我们都了解了 现在我们开始动工

我写的比较简单没有封装就是在那个地方用到了然后就直接调支付的方法

这个就是在我们要用的时候调后台的接口然后后台给我们返回订单号

-(void)buttonActionTequan{

    [SVProgressHUD showWithStatus:@"正在支付"];

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

    [dictParameterssetObject:@""forKey:@""];

    NSString*payType =@"";

    if ([currentPayType isEqualToString:@"产品id"]) {

        payType =@"";

    }

    [dictParameterssetObject:payTypeforKey:@"type"];

    [HttpManagerpostWithAction:@""andParams:dictParameterssuccess:^(NSDictionary*dict,BOOLsuccess) {

        intcode = [[dictobjectForKey:@"code"]intValue];

        NSString *message = [NSString stringWithFormat:@"%@",[dict objectForKey:@"msg"]];

        if(code ==1) {

            NSDictionary*dictData = [dictobjectForKey:@"data"];

            currentOrderNo = [NSString stringWithFormat:@"%@",[dictData objectForKey:@"order_num"]];

            [[SKPaymentQueue defaultQueue] addTransactionObserver:self];

                       if([SKPaymentQueuecanMakePayments]){

                            // 这里发起支付

                           [selfrequestProductData:currentPayType];

                       }else{

                           NSLog(@"不允许程序内付费");

                       }

        }else{

            [SVProgressHUD dismissWithError:message];

 }

    }fail:^(NSError*error) {

        [SVProgressHUD dismissWithError:@"请求失败,请检查网络"];

    }];}

//收到产品返回信息

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

    NSLog(@"--------------收到产品反馈消息---------------------");

    NSArray*product = response.products;

    NSLog(@"productID:%@", response.invalidProductIdentifiers);

    if(product.count==0){

        [SVProgressHUD dismissWithError:@"查询不到对应消息"];

        return;

    }

    [SVProgressHUD showWithStatus:@"支付中"];

    SKProduct*p =nil;

    for(SKProduct*proinproduct) {

        if([pro.productIdentifier isEqualToString: currentPayType]){

            p = pro;

        }

    }

    SKPayment *payment = [SKPayment paymentWithProduct:p];

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

    [[SKPaymentQueue defaultQueue] addPayment:payment];

}

//请求失败

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

    [SVProgressHUD dismissWithError:@"支付失败"];

}

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

    //[SVProgressHUD dismiss];

}

//监听购买结果

- (void)paymentQueue:(SKPaymentQueue*)queueupdatedTransactions:(NSArray*)transaction{

    for(SKPaymentTransaction*tranintransaction){

        switch(tran.transactionState) {

            case SKPaymentTransactionStatePurchased:{

            //购买完成向自己的服务器验证

                [self verifyPurchaseWithPaymentTransaction:[NSNumber numberWithInt:tran.transactionState]];

                [[SKPaymentQueue defaultQueue] finishTransaction:tran];

            }

                break;

            case SKPaymentTransactionStatePurchasing:

                [SVProgressHUD showWithStatus:@"支付中"];

                break;

            case SKPaymentTransactionStateRestored:{

                [[SKPaymentQueue defaultQueue] finishTransaction:tran];

            }

                break;

            case SKPaymentTransactionStateFailed:{

                [[SKPaymentQueue defaultQueue] finishTransaction:tran];

                [SVProgressHUD dismissWithError:@"购买失败"];

            }

                break;

            default:

                break;

        }

    }

}

//交易结束

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

    NSLog(@"交易结束");

    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];

}

-(void)verifyPurchaseWithPaymentTransaction:(NSNumber*)resultState{

    //从沙盒中获取交易凭证并且拼接成请求体数据

    NSURL *receiptUrl=[[NSBundle mainBundle] appStoreReceiptURL];

    NSData*receiptData=[NSDatadataWithContentsOfURL:receiptUrl];

    NSString * base64String = [receiptData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];

    NSLog(@"receiptData = %@",base64String);    NSMutableDictionary *dictParameters = [[NSMutableDictionary alloc]init];

    [dictParameterssetObject:currentOrderNoforKey:@"order_no"];

    [dictParameterssetObject:base64StringforKey:@"trade_no"];

}

相关文章

  • iOS内购人走的心酸路(下)

    现在先了解哈内购的流程 好的思路我们都了解了 现在我们开始动工 我写的比较简单没有封装就是在那个地方用到了然后就直...

  • iOS内购人走的心酸路(上)

    内购的风向越刮越大 终于在最后我们公司也挣扎不了了可怜的打工人就是我也不得来接内购了,之前我就听有些人说内购特别麻...

  • iOS 苹果内购流程

    本文参考: iOS开发之内购完全笔记 iOS开发内购全套图文教程 iOS应用程序内购/内付费(一) 代码...

  • iOS内购流程文档-Lion

    iOS内购流程: iOS内购 什么时候用到呢? 虚拟产品就需要用到iOS内购;购买的商品,是在本app中...

  • iOS H5支付宝 微信支付.

    iOS开发中, 如果不想接入支付的SDK 或者 商品只能走内购, 但是又不想要走内购(不想给苹果手续费...), ...

  • iOS-内购

    前言:关于iOS内购,参考两篇博文 iOS-iOS内购流程(手把手图文教程)iOS内购你看我就够了(埋坑篇) 我自...

  • 苹果支付的坑

    这篇主要是回顾一下之前做过的ios app内购,以及在实现过程中遇到的问题 IOS 内购支付有两种模式: 内置模式...

  • iOS内购一条龙------项目代码 (4)

    步骤一 iOS内购一条龙------账户信息填写(1)步骤二 iOS内购一条龙------配置内购产品ID (2)...

  • iOS内购一条龙------内购测试账号 (3)

    步骤一 iOS内购一条龙------账户信息填写(1)步骤二 iOS内购一条龙------配置内购产品ID (2)...

  • iOS 内购 IAP

    1. iOS内购IAP(一) —— 基础配置篇(一)2. iOS内购IAP(二) —— 工程实践(一)3. iOS...

网友评论

      本文标题:iOS内购人走的心酸路(下)

      本文链接:https://www.haomeiwen.com/subject/iibmkrtx.html