日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java ios内购凭证_iOS内购看我就够了(含代码)

發(fā)布時(shí)間:2023/12/31 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java ios内购凭证_iOS内购看我就够了(含代码) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

導(dǎo)入頭文件#import

遵循協(xié)議

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];// 4.設(shè)置支付服務(wù)

-(void)starBuyToAppStore:(NSString *)goodsID{? ? if ([SKPaymentQueue canMakePayments]) {//5.判斷app是否允許apple支付?? ? ?? ? ? ? [self getRequestAppleProduct:goodsID];// 6.請求蘋果后臺(tái)商品?? ? ? ?? ? } else {//? ? ? ? NSLog(@"not");? ? }}

#pragma mark ------ 請求蘋果商品- (void)getRequestAppleProduct:(NSString *)goodsID{? ? self.goodsId = goodsID;//把前面?zhèn)鬟^來的商品id記錄一下,下面要用? ? // 7.這里的com.czchat.CZChat01就對應(yīng)著蘋果后臺(tái)的商品ID,他們是通過這個(gè)ID進(jìn)行聯(lián)系的。? ? NSArray *product = [[NSArray alloc] initWithObjects:goodsID,nil];? ? NSSet *nsset = [NSSet setWithArray:product];?? ?? ? //SKProductsRequest參考鏈接:https://developer.apple.com/documentation/storekit/skproductsrequest? ? //SKProductsRequest 一個(gè)對象,可以從App Store檢索有關(guān)指定產(chǎn)品列表的本地化信息。? ? SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:nsset];// 8.初始化請求? ? request.delegate = self;? ? [request start];// 9.開始請求}

// 10.接收到產(chǎn)品的返回信息,然后用返回的商品信息進(jìn)行發(fā)起購買請求- (void) productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{? ? NSArray *product = response.products;?? ?? ? if([product count] == 0){//如果服務(wù)器沒有產(chǎn)品? ? ? ? return;? ? }?? ?? ? SKProduct *requestProduct = nil;? ? for (SKProduct *pro in product) {//? ? ? ? NSLog(@"%@", [pro description]);//? ? ? ? NSLog(@"%@", [pro localizedTitle]);//? ? ? ? NSLog(@"%@", [pro localizedDescription]);//? ? ? ? NSLog(@"%@", [pro price]);//? ? ? ? NSLog(@"%@", [pro productIdentifier]);? ? ? ? // 11.如果后臺(tái)消費(fèi)條目的ID與我這里需要請求的一樣(用于確保訂單的正確性)? ? ? ? if([pro.productIdentifier isEqualToString:self.goodsId]){? ? ? ? ? ? requestProduct = pro;? ? ? ? }? ? }? ? // 12.發(fā)送購買請求,創(chuàng)建票據(jù)? 這個(gè)時(shí)候就會(huì)有彈框了? ? SKPayment *payment = [SKPayment paymentWithProduct:requestProduct];? ? [[SKPaymentQueue defaultQueue] addPayment:payment];//將票據(jù)加入到交易隊(duì)列?? ?}

// 13.監(jiān)聽購買結(jié)果- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transaction{? ? if (self.delegate && [self.delegate respondsToSelector:@selector(EMAppStorePay:responseAppStorePayStatusshow:error:)]) {? ? ? ? [self.delegate EMAppStorePay:self responseAppStorePayStatusshow:@{@"value":transaction} error:nil];? ? }? ? for(SKPaymentTransaction *tran in transaction){//? ? ? ? NSLog(@"%@",tran.payment.applicationUsername);? ? ? ? switch (tran.transactionState) {? ? ? ? ? ? case SKPaymentTransactionStatePurchased:{//? ? ? ? ? ? ? ? NSLog(@"交易完成");? ? ? ? ? ? ? ? // 購買后告訴交易隊(duì)列,把這個(gè)成功的交易移除掉。? ? ? ? ? ? ? ? //走到這就說明這單交易走完了,無論成功失敗,所以要給它移出。finishTransaction? ? ? ? ? ? ? ? [self completeTransaction:tran];//這兒出了問題拋異常,導(dǎo)致下面一句代碼沒執(zhí)行? ? ? ? ? ? ? ? [[SKPaymentQueue defaultQueue] finishTransaction:tran];?? ? ? ? ? ? ? ?? ? ? ? ? ? }? ? ? ? ? ? ? ? break;?? ? ? ? ? ? ? ?? ? ? ? ? ? case SKPaymentTransactionStatePurchasing://? ? ? ? ? ? ? ? NSLog(@"商品添加進(jìn)列表");? ? ? ? ? ? ? ? break;?? ? ? ? ? ? ? ?? ? ? ? ? ? case SKPaymentTransactionStateRestored://? ? ? ? ? ? ? ? NSLog(@"已經(jīng)購買過商品");? ? ? ? ? ? ? ? [[SKPaymentQueue defaultQueue] finishTransaction:tran];? ? ? ? ? ? ? ? break;?? ? ? ? ? ? ? ?? ? ? ? ? ? case SKPaymentTransactionStateFailed://? ? ? ? ? ? ? ? NSLog(@"交易失敗");? ? ? ? ? ? ? ? [[SKPaymentQueue defaultQueue] finishTransaction:tran];? ? ? ? ? ? ? ? break;?? ? ? ? ? ? ? ?? ? ? ? ? ? case SKPaymentTransactionStateDeferred://? ? ? ? ? ? ? ? NSLog(@"交易還在隊(duì)列里面,但最終狀態(tài)還沒有決定");? ? ? ? ? ? ? ? break;?? ? ? ? ? ? ? ?? ? ? ? ? ? default:? ? ? ? ? ? ? ? break;? ? ? ? }?? ? ? ?? ? }?? ?}

#pragma mark ------ 支付完成,得到交易憑證- (void)completeTransaction:(SKPaymentTransaction *)transaction{?? ?? ? //此時(shí)告訴后臺(tái)交易成功,并把receipt傳給后臺(tái)驗(yàn)證? ? NSString *transactionReceiptString= nil;? ? //系統(tǒng)IOS7.0以上獲取支付驗(yàn)證憑證的方式應(yīng)該改變,切驗(yàn)證返回的數(shù)據(jù)結(jié)構(gòu)也不一樣了。? ? // 驗(yàn)證憑據(jù),獲取到蘋果返回的交易憑據(jù)? ? // appStoreReceiptURL iOS7.0增加的,購買交易完成后,會(huì)將憑據(jù)存放在該地址? ? NSURLRequest *appstoreRequest = [NSURLRequest requestWithURL:[[NSBundle mainBundle] appStoreReceiptURL]];? ? NSError *error = nil;? ? // 從沙盒中獲取到購買憑據(jù)?? ?? ? NSData * receiptData = [NSURLConnection sendSynchronousRequest:appstoreRequest returningResponse:nil error:&error];? ? // 20 BASE64 常用的編碼方案,通常用于數(shù)據(jù)傳輸,以及加密算法的基礎(chǔ)算法,傳輸過程中能夠保證數(shù)據(jù)傳輸?shù)姆€(wěn)定性 21 BASE64是可以編碼和解碼的 22? ? transactionReceiptString = [receiptData base64EncodedStringWithOptions:0];//[receiptData base64EncodedStringWithOptions:0];? ? //? ? NSLog(@"requestContentstr:%@",[receiptData base64EncodedStringWithOptions:0]);?? ?? ? //? ? NSDictionary *dic = @{@"orderCode":self.dataOrder.orderCode,? ? //? ? ? ? ? ? ? ? ? ? ? ? ? @"receipt":transactionReceiptString,? ? //? ? ? ? ? ? ? ? ? ? ? ? ? @"category":@"1"? ? //? ? ? ? ? ? ? ? ? ? ? ? ? };? ? //? ? NSLog(@"diczhi:%@",dic);? ? //? ? //? ? self.tran = transaction;? ? //? ? [self.bizEBeanBuy requestAppStorePaySuccessCallBack:dic];//蘋果支付成功,傳receipt-data給后臺(tái)驗(yàn)證?? ???? ?? ? [[SKPaymentQueue defaultQueue] finishTransaction:transaction];?? ?}

總結(jié)

以上是生活随笔為你收集整理的java ios内购凭证_iOS内购看我就够了(含代码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。