Apple Pay 和 苹果内购买

在做开发的之前先说清楚 Apple Pay 和苹果内购不是一个东西,大家得区分开;

Apple Pay –> 是类似于支付宝支付和微信支付的,用于购买实物的一种支付方式;日常会用到的场景是买个电影票啦等

苹果内购 –> 买是用于应用内购买虚拟商品的一种支付方式,苹果是要抽取30%的,在这不得不吐槽苹果公司也太黑了…. 用到的场景是APP中买金币,会员等,这些都是虚拟的东西;

先说Apple Pay吧, 集成难度也不大;
网上参考的资料还是很多了; 在这随便找一个按照步骤弄一下,基本没啥问题: http://blog.csdn.net/cyh1236951/article/details/51192669
在这就偷个懒,不再赘述, 哈哈哈, 见谅见谅
需要注意的一点就是 Apple Pay有一个自带的支付按钮,只能用于做Apple Pay, 不能用于做别的用图, 当然,因为风格不咋地,一般自定义一个button是没啥问题的;

来说苹果内购买吧, 在做这个开发的时候真的会遇到各种坑, 相信做过的朋友也有同感的;
我就谈谈遇到的一些坑吧
应用内购买的博客也是很多的,具体的操作网上确实不多了,我还不一定够他们写的详细;
http://www.jianshu.com/p/86ac7d3b593a

一般情况下3个步骤就能完成;
1.在iTunes Connect中写些银行税务信息,收到的钱总要有个去向的对吧;
这里写图片描述

2.卖的是什么… 增加需要出售的虚拟商品; 但是需要记录商品Id,因为在代码实现购买的时候会用到,如果商品id没对的话就购买失败了哦
这里写图片描述

3.实现代码;
此处省略n行代码…..

经过这三步没出问题是就行;但是… 基本第一次做的都会出问题;

1.商品id出问题: 我记得我在做的时候粗心大意了,然后在购买的时候申请商品列表与本地id对比的时候总是找不到商品导致购买失败;
2.上传凭证出问题: 应用内购买不像支付宝和微信支付, 内购买过程完全是在手机端进行的,在购买成功之后需要将购买凭据传给后台,后台再将凭证拿去校验;
这个凭证的传输就坑了很多人, 无论怎么传,后台都拿不到,或者拿到也是不正确的,那是因为我拿到的凭证是没编码,直接传当然错误啦;
给凭据编码再传就好了,给大家个例子

//9.购买成功后,将信息上传自己的服务器
- (void)completeTransaction:(SKPaymentTransaction *)transaction{

    NSString *product = transaction.payment.productIdentifier;
    if ([product length] > 0) {
        NSArray *tt = [product componentsSeparatedByString:@"."];
        NSString *bookid = [tt lastObject];
        if ([bookid length] > 0) {
            [self recordTransaction:bookid];  //记录交易
            [self provideContent:bookid];     //处理下载内容
        }
    }

    NSLog(@"购买完成,向自己的服务器验证 ---- %@", transaction.payment.applicationUsername);
    NSData *data = [NSData dataWithContentsOfFile:[[[NSBundle mainBundle] appStoreReceiptURL] path]];
    NSString *receipt = [data base64EncodedStringWithOptions:0];
    receipt = [self URLEncodedString:receipt];

    //    HHLog(@"苹果收据:%@", receipt);
    [self buySuccessWithReceipt:receipt transaction:transaction];

}
// 苹果收据 编码
-(NSString *)URLEncodedString:(NSString *)str {
    NSString *encodedString = (NSString *) CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)str,NULL,(CFStringRef)@"!*'();:@&=+$,/?%#[]",kCFStringEncodingUTF8));
    return encodedString;
}

3.内购买的测试问题: 上传项目的项目是正式版的, 但是APP审核的时候是在sanBox里测试的,但是上线了用户购买的话又是正式的购买, 这个很尴尬啊 … 然后后台的凭证检验地址就有两个, 一个是sanbox测试的, 一个是正式购买成功的;
最后,后台先用于校验正式购买的,如果不正确再校验测试的,为了上线嘛;

猜你喜欢

转载自blog.csdn.net/Jesse0308/article/details/78458823