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

原创 2017年04月19日 16:09:32

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

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


第二步
这里写图片描述


第三步 这里应该都是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];
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS App提交指南-协议、税务和银行业务

本文源自:http://chanye.18183.com/201503/280100.html iOS App提交指南-协议、税务和银行业务 来源:chanye.1...
  • wang_we
  • wang_we
  • 2015年03月16日 11:42
  • 6152

iOS应用程序内购/内付费(一)

很久之前就想出一篇IOS内付费的教程,但是一查网上的教程实在太多了,有的写得真的蛮不错的......进入苹果的ItunesConnection(https://itunesconnect.apple....

iOS App提交指南-协议、税务和银行业务

App通过审核时,选择的是手动发布,想着等到自己生日那天来发布,当做留个纪念,结果生日当天发布时,由于App属于收费应用,还需要填写协议、税务和银行信息,结果又急急忙忙地去找了下这方面的资料,现在把整...
  • avi9111
  • avi9111
  • 2016年04月26日 15:10
  • 5387

iOS-iOS内购流程(手把手图文教程)

前言 一直觉得苹果生态圈很安全,iOS操作系统也很流畅,而且软件有严格的审核机制,软件来源唯一(当然是你不越狱),但是这也为苹果的霸权铺路;上家公司做了一个APP,可以充值虚拟金币,但是如果是虚拟道具...

IAP-应用内购买(部分)

前言:自我总结--- loadStore(监听交易,请求产品描述:完成交由委托->获取产品描述-.交给fetch自定义委托LB显示)-> 2,点击购买->激活交易监听进行购买payment->交易...
  • chowpan
  • chowpan
  • 2013年02月25日 18:12
  • 24552

10-1文字排版--字体、字号、颜色、粗体、斜体、下划线、删除线

我们可以使用css样式为网页中的文字设置字体、字号、颜色等样式属性。下面我们来看一个例子,下面代码实现:为网页中的文字设置字体为宋体。 body{font-family:"宋体";} ...
  • dada678
  • dada678
  • 2016年06月19日 20:23
  • 576

iOS7.1以后企业应用发布需要HTTPS协议,解决步骤(加了五、六步)

实现IOS7.1以上本地下载 一、安装环境 1、安装Tomcat6以上(实际测试tomcat7) 2、安装JDK6以上(实际测试jdk7) 3、安装openssl 4、将jdk、jr...

iOS 证书申请 应用上线详细步骤

  • 2014年08月30日 11:53
  • 4.98MB
  • 下载

Linux-CentOS7.x的安装步骤图文详情

Centos 7.2 安装部署 1.进入BIOS setup (开机时按Del按键,根据实际情况) --无非也就F2、Del 等等自己可以搜一下自己电脑的型号。虚拟机一般都是F2吧 从光盘启动,其他的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS内购步骤详情,从申请税收协议开始
举报原因:
原因补充:

(最多只允许输入30个字)