1. 程式人生 > >Apple Pay 和 蘋果內購買

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測試的, 一個是正式購買成功的;
最後,後臺先用於校驗正式購買的,如果不正確再校驗測試的,為了上線嘛;