关闭

[置顶] iOS内购步骤详情,从申请税收协议开始

标签: iOS内购申请iOS内购详细步骤苹果支付iOS支付iOS内部购买
802人阅读 评论(0) 收藏 举报
分类:

* 先告诉大家如何去申请,先上图了,后上代码 *

第一步:登陆成功之后
登陆成功之后


第二步
这里写图片描述


第三步 这里应该都是setup 一个一个来就好了
这里写图片描述

  • 这里是第一个 应该是没有的,那就点击添加(Add New)就可以了
    这里写图片描述

都是一些个人信息 最后一个传真就不用填写了 写完了以后,在上一步我用红框圈起来的那些信息,选上对应的就可以了
这里写图片描述


  • 这是第二个银行信息
    没有账号,就得添加了嘛
    这里写图片描述

选中国,没毛病吧,你要是国际的,就看老板让你选什么了
这里写图片描述


CNAPS CODE 查询地址
https://e.czbank.com/CORPORBANK/query_unionBank_index.jsp
这个自己去查了,查完填上,直接next就可以了
这里写图片描述


这里是信息核对,没问题就next
这里写图片描述


上面是你的信息,下面填一个银行卡号就可以,确认卡号,(就是在填写一次),持卡人姓名(英文,就是拼音了,哈哈) 最后一行是货币选择,选Chinese Yuan,当然了,你们要是美刀还是别的,自己选了。最后写完了就next
这里写图片描述


  • 这是最后一个这个税
    setup进去是这个样子的,根据自己情况,第一个美国是必填的,其他加拿大,澳大利亚看你自己情况了
    这里写图片描述

进来之后,问你 “你是一个美国公民,美国居民,美国伙伴关系,或美国公司?”
是不是 自己选 然后submit
这里写图片描述


问你 “有没有啥美国方面的贸易啊?” 你有没有,自己选喽 继续submit
这里写图片描述


这个页面有点长,我分两个图
上半部分是这样的,自己核对信息,然后选择一下收益类型,个人(Individual/Sole proprieto)、公司(Corporation)、还是什么(我就不罗列了)
这里写图片描述


下面这个就厉害了,总共15条
这里写图片描述
我只能说,不在美国纳税,和你毛关系没有,直接忽略


直接这个图就可以了,把这两个框选了就行了,点击submit以后,会再次让你submit的,你确定没问题就行了
这里写图片描述


大功告成了!!!这个税收和协议就可以了,正确的样子,是这样的
这里写图片描述


下面开始,内购项目的创建
继续上图
这里面我自己创建了3个,点击加号创建新的项目
这里写图片描述


什么需求,自己选,说的很明白了,不懂你私信我(这都不懂的话…)
这里写图片描述


内购项目信息的配置
名字和产品ID自己规定的,后期ID在代码里会用到的,商量好规则,价格自己定了呗
这里写图片描述

这里名字,描述,根据你自己的产品和价格来吧
这里写图片描述

再来个截图,没图不成功,切记啊,我被坑过的,去和UI妹纸要
这里写图片描述


你测试的时候,的有测试账号吧,当然啦,土豪可以忽略的,这个就不多说了,特简单,给你个图,自己体会
这里写图片描述

这里写图片描述


下面上代码了,特简单,写的都累了

//这个是点击事件,怎么触发,你自己去想
一个.m
#import <StoreKit/StoreKit.h>
#import "SVProgressHUD.h"

@interface ViewController ()<SKPaymentTransactionObserver,SKProductsRequestDelegate>
@property (nonatomic,strong) NSArray *profuctIdArr;
@property (nonatomic,copy) NSString *currentProId;

@end

@property (nonatomic,strong) NSArray *profuctIdArr;
@property (nonatomic,copy) NSString *currentProId;
- (void)btnClick:(UIButton *)button
{
    NSString *product = self.profuctIdArr[button.tag-100];
    _currentProId = product;
    if([SKPaymentQueue canMakePayments]){
        [self requestProductData:product];
    }else{
        NSLog(@"不允许程序内付费");
    }
}

//请求商品
- (void)requestProductData:(NSString *)type{
    NSLog(@"-------------请求对应的产品信息----------------");

    [SVProgressHUD showWithStatus:nil maskType:SVProgressHUDMaskTypeBlack];

    NSArray *product = [[NSArray alloc] initWithObjects:type,nil];

    NSSet *nsset = [NSSet setWithArray:product];
    SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:nsset];
    request.delegate = self;
    [request start];

}

//收到产品返回信息
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{

    NSLog(@"--------------收到产品反馈消息---------------------");
    NSArray *product = response.products;
    NSArray *invalidProductIdentifiers = response.invalidProductIdentifiers;
    NSLog(@"invalidProductIdentifiers == %@",invalidProductIdentifiers);
    if([product count] == 0){
        [SVProgressHUD dismiss];
        NSLog(@"--------------没有商品------------------");
        return;
    }

    NSLog(@"productID:%@", response.invalidProductIdentifiers);
    NSLog(@"产品付费数量:%lu",(unsigned long)[product count]);

    SKProduct *p = nil;
    for (SKProduct *pro in product) {
        NSLog(@"%@", [pro description]);
        NSLog(@"%@", [pro localizedTitle]);
        NSLog(@"%@", [pro localizedDescription]);
        NSLog(@"%@", [pro price]);
        NSLog(@"%@", [pro productIdentifier]);

        if([pro.productIdentifier isEqualToString:_currentProId]){
            p = pro;
        }
    }

    SKPayment *payment = [SKPayment paymentWithProduct:p];

    NSLog(@"发送购买请求");
    [[SKPaymentQueue defaultQueue] addPayment:payment];
}

//请求失败
- (void)request:(SKRequest *)request didFailWithError:(NSError *)error{
    [SVProgressHUD showErrorWithStatus:@"支付失败"];
    NSLog(@"------------------错误-----------------:%@", error);
}

- (void)requestDidFinish:(SKRequest *)request{
    [SVProgressHUD dismiss];
    NSLog(@"------------反馈信息结束-----------------");
}
//沙盒测试环境验证
#define SANDBOX @"https://sandbox.itunes.apple.com/verifyReceipt"
//正式环境验证
#define AppStore @"https://buy.itunes.apple.com/verifyReceipt"
/**
 *  验证购买,避免越狱软件模拟苹果请求达到非法购买问题
 *
 */
-(void)verifyPurchaseWithPaymentTransaction{
    //从沙盒中获取交易凭证并且拼接成请求体数据
    NSURL *receiptUrl=[[NSBundle mainBundle] appStoreReceiptURL];
    NSData *receiptData=[NSData dataWithContentsOfURL:receiptUrl];

    NSString *receiptString=[receiptData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];//转化为base64字符串

    NSString *bodyString = [NSString stringWithFormat:@"{\"receipt-data\" : \"%@\"}", receiptString];//拼接请求数据
    NSData *bodyData = [bodyString dataUsingEncoding:NSUTF8StringEncoding];


    //创建请求到苹果官方进行购买验证
    NSURL *url=[NSURL URLWithString:SANDBOX];
    NSMutableURLRequest *requestM=[NSMutableURLRequest requestWithURL:url];
    requestM.HTTPBody=bodyData;
    requestM.HTTPMethod=@"POST";
    //创建连接并发送同步请求
    NSError *error=nil;
    NSData *responseData=[NSURLConnection sendSynchronousRequest:requestM returningResponse:nil error:&error];
    if (error) {
        NSLog(@"验证购买过程中发生错误,错误信息:%@",error.localizedDescription);
        return;
    }
    NSDictionary *dic=[NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:nil];
    NSLog(@"%@",dic);
    if([dic[@"status"] intValue]==0){
        NSLog(@"购买成功!");
        NSDictionary *dicReceipt= dic[@"receipt"];
        NSDictionary *dicInApp=[dicReceipt[@"in_app"] firstObject];
        NSString *productIdentifier= dicInApp[@"product_id"];//读取产品标识
        //如果是消耗品则记录购买数量,非消耗品则记录是否购买过
        NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
        if ([productIdentifier isEqualToString:@"123"]) {
            int purchasedCount=[defaults integerForKey:productIdentifier];//已购买数量
            [[NSUserDefaults standardUserDefaults] setInteger:(purchasedCount+1) forKey:productIdentifier];
        }else{
            [defaults setBool:YES forKey:productIdentifier];
        }
        //在此处对购买记录进行存储,可以存储到开发商的服务器端
    }else{
        NSLog(@"购买失败,未通过验证!");
    }
}
//监听购买结果
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transaction{


    for(SKPaymentTransaction *tran in transaction){



        switch (tran.transactionState) {
            case SKPaymentTransactionStatePurchased:{
                NSLog(@"交易完成");
                [self verifyPurchaseWithPaymentTransaction];
                [[SKPaymentQueue defaultQueue] finishTransaction:tran];

            }




                break;
            case SKPaymentTransactionStatePurchasing:
                NSLog(@"商品添加进列表");

                break;
            case SKPaymentTransactionStateRestored:{
                NSLog(@"已经购买过商品");

                [[SKPaymentQueue defaultQueue] finishTransaction:tran];
            }
                break;
            case SKPaymentTransactionStateFailed:{
                NSLog(@"交易失败");
                [[SKPaymentQueue defaultQueue] finishTransaction:tran];
                [SVProgressHUD showErrorWithStatus:@"购买失败"];
            }
                break;
            default:
                break;
        }
    }
}

//交易结束
- (void)completeTransaction:(SKPaymentTransaction *)transaction{
    NSLog(@"交易结束");

    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}


- (void)dealloc{
    [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
}
1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:11391次
    • 积分:432
    • 等级:
    • 排名:千里之外
    • 原创:31篇
    • 转载:1篇
    • 译文:0篇
    • 评论:9条
    最新评论