欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

IOS應(yīng)用內(nèi)支付返回新舊Receipt適配的方法

 更新時(shí)間:2017年12月21日 11:33:24   作者:笑不哭  
本篇文章主要介紹了IOS應(yīng)用內(nèi)支付返回新舊Receipt適配的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

ios7.0后ios支付成功返回的票據(jù)Receipt的獲取方式有了新的方式,

原來的SKPaymentTransaction中的transactionReceipt屬性獲取票據(jù)的方式已經(jīng)過期,雖然還能使用,但是蘋果官方建議使用新的

新版的獲取Receipt的方式是通過新接口如下

NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
NSData *receipt = [NSData dataWithContentsOfURL:receiptURL];

當(dāng)然,低于ios7.0的還是需要使用老版本接口,對兩種版本進(jìn)行適配的代碼如下:

NSData*receipt= nil;
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")){
//ios after 7.0
  NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
  receipt = [NSData dataWithContentsOfURL:receiptURL];
  NSString *receiptURLStr = [receiptURL absoluteString];
  NSRange rangeSandbox = [receiptURLStr rangeOfString:@"sandbox"];
  if (rangeSandbox.location != NSNotFound){
    record[kIAPEnvironment] = [NSNumber numberWithInt:1];
  }
}else{
//ios 3.0~7.0
  receipt = transaction.transactionReceipt;
  NSDictionary *dict = [NSDictionary dictionaryWithContentsOfData:receipt];
  if (dict){
    NSString *env = [dict objectForKey:@"environment"];
    if ([env isEqualToString:@"Sandbox"]) {
      record[kIAPEnvironment] = [NSNumber numberWithInt:1];
    }
 }
}

判斷是否是沙盒支付,新版本可以直接判斷receiptURL中是否存在“sandbox“

老版本receipt可以解析NSData 查看environment是否為Sandbox來判斷

+ (NSDictionary *)dictionaryWithContentsOfData: (NSData *)data{
  CFPropertyListRef plist = CFPropertyListCreateFromXMLData(kCFAllocatorDefault, (__bridge CFDataRef)data,
  kCFPropertyListImmutable, NULL);
  if(plist == nil) return nil;
  if ([(__bridge id)plist isKindOfClass:[NSDictionary class]]){
  return (__bridge NSDictionary *)plist;
  }else{
  CFRelease(plist);
  return nil;
  }
}

客戶端receipt驗(yàn)證方式:

NSError *error;
NSDictionary *requestContents = @{
@"receipt-data": [receipt base64EncodedString]
};
NSData *requestData = [NSJSONSerialization dataWithJSONObject:requestContents
options:0
error:&error];
if (!requestData) {
  return;
}
// Create a POST request with the receipt data.
NSURL *storeURL = [NSURL URLWithString:@"https://sandbox.itunes.apple.com/verifyReceipt"];//根據(jù)是否是沙盒支付驗(yàn)證取正確的地址
NSMutableURLRequest *storeRequest = [NSMutableURLRequest requestWithURL:storeURL];
[storeRequest setHTTPMethod:@"POST"];
[storeRequest setHTTPBody:requestData];
// Make a connection to the iTunes Store on a background queue.
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:storeRequest queue:queue
completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
  if (connectionError) {
  /* ... Handle error ... */
} else {
  NSError *error;
  NSDictionary *jsonResponse = [NSJSONSerialization JSONObjectWithData:data   options:0 error:&error];
  if (!jsonResponse) { /* ... Handle error ...*/ }
  /* ... Send a response back to the device ... */
  }
}];

老版本返回格式:

{
bid = "com.coodezhang.test";
bvrs = "1.0";
"item_id" = 892617314;
"original_purchase_date" = "2017-12-14 07:43:14 Etc/GMT";
"original_purchase_date_ms" = 1626147394550;
"original_purchase_date_pst" = "2017-12-14 12:43:14 America/Los_Angeles";
"original_transaction_id" = 1000001127239959;
"product_id" = "com.coodezhang.test_coins99M_Tier1";
"purchase_date" = "2017-12-14 07:43:14 Etc/GMT";
"purchase_date_ms" = 1626147394550;
"purchase_date_pst" = "2017-12-14 12:43:14 America/Los_Angeles";
quantity = 1;
"transaction_id" = 1000001127239959;
"unique_identifier" = 0000b0124819;
"unique_vendor_identifier" = "ASDGF2DB-DSAD-5A21-9611-642A4B9CASDE7";
};
status = 0;
}

新版本返回格式官方文檔:官方文檔

新版本返回格式:

{
environment = Sandbox;
receipt =   {
"adam_id" = 0;
"app_item_id" = 0;
"application_version" = 1;
"bundle_id" = "com.coodezhang.test";
"download_id" = 0;
"in_app" =     (
{
"is_trial_period" = false;
"original_purchase_date" = "2017-12-14 07:18:56 Etc/GMT";
"original_purchase_date_ms" = 1513235936000;
"original_purchase_date_pst" = "2017-12-13 23:18:56 America/Los_Angeles";
"original_transaction_id" = 1000000359369424;
"product_id" = "com.coodezhang.test_coins99M_Tier1";
"purchase_date" = "2017-12-14 07:18:56 Etc/GMT";
"purchase_date_ms" = 1513235936000;
"purchase_date_pst" = "2017-12-13 23:18:56 America/Los_Angeles";
quantity = 1;
"transaction_id" = 1000000359369424;
}
...... 可能存在多條
);
"original_application_version" = "1.0";
"original_purchase_date" = "2013-08-01 07:00:00 Etc/GMT";
"original_purchase_date_ms" = 1375340400000;
"original_purchase_date_pst" = "2013-08-01 00:00:00 America/Los_Angeles";
"receipt_creation_date" = "2017-12-14 07:18:56 Etc/GMT";
"receipt_creation_date_ms" = 1513235936000;
"receipt_creation_date_pst" = "2017-12-13 23:18:56 America/Los_Angeles";
"receipt_type" = ProductionSandbox;
"request_date" = "2017-12-14 07:19:23 Etc/GMT";
"request_date_ms" = 1513235963829;
"request_date_pst" = "2017-12-13 23:19:23 America/Los_Angeles";
"version_external_identifier" = 0;
};
status = 0;
}

值得注意的是,新版中數(shù)據(jù)結(jié)構(gòu)中的in_app字段,可能包含多個(gè)transaction的receipt。當(dāng)完成transaction后,還沒有成功調(diào)用讀取過receipt的接口,那下一次讀取recept時(shí)會把所有的都讀取出來,從而出現(xiàn)多條數(shù)據(jù)。

一般開發(fā)商app支付都有自己的支付系統(tǒng),可能每次下單之前都會創(chuàng)建自己的訂單號,需要與ios支付后返回的receipt一一對應(yīng),這種情況下如何處理還需要注意。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • iOS中UILabel text兩邊對齊的實(shí)現(xiàn)代碼

    iOS中UILabel text兩邊對齊的實(shí)現(xiàn)代碼

    本文通過一段實(shí)例代碼給大家介紹了ios中uilabel text兩邊對齊的實(shí)現(xiàn)方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下
    2017-01-01
  • iOS 將系統(tǒng)自帶的button改裝成上圖片下文字的樣子

    iOS 將系統(tǒng)自帶的button改裝成上圖片下文字的樣子

    這篇文章主要介紹了 iOS 將系統(tǒng)自帶的button改裝成上圖片下文字的樣子,代碼是通過繼承UIButton,然后再重寫layoutSubviews方法,對自帶的圖片和titleLabel進(jìn)行重新的layout。下面通過本文給大家分享下實(shí)現(xiàn)代碼
    2016-12-12
  • iOS開發(fā)之路--仿網(wǎng)易抽屜效果

    iOS開發(fā)之路--仿網(wǎng)易抽屜效果

    本文是IOS開發(fā)之路系列的第一篇,主要講訴了如何仿網(wǎng)易新聞客戶端實(shí)現(xiàn)抽屜效果,全部源代碼都分享給大家,希望對大家有所幫助
    2014-08-08
  • iOS仿微信搖一搖動畫效果加震動音效實(shí)例

    iOS仿微信搖一搖動畫效果加震動音效實(shí)例

    這篇文章主要介紹了iOS仿微信搖一搖動畫效果加震動音效實(shí)例,詳細(xì)介紹了微信搖一搖功能的實(shí)現(xiàn)原理,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2017-03-03
  • iOS中的地理位置的獲取及plist設(shè)置方法

    iOS中的地理位置的獲取及plist設(shè)置方法

    下面小編就為大家分享一篇iOS中的地理位置的獲取及plist設(shè)置方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • iOS 按鈕上的文字添加下劃線的方法

    iOS 按鈕上的文字添加下劃線的方法

    這篇文章主要介紹了iOS 按鈕上的文字添加下劃線的方法的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • iOS中Swift UISearchController仿微信搜索框

    iOS中Swift UISearchController仿微信搜索框

    這篇文章主要介紹了iOS中Swift UISearchController仿微信搜索框效果,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-05-05
  • iOS應(yīng)用開發(fā)中AFNetworking庫的常用HTTP操作方法小結(jié)

    iOS應(yīng)用開發(fā)中AFNetworking庫的常用HTTP操作方法小結(jié)

    AFNetworking庫是Objective-C語言寫成的用于處理HTTP的第三方庫,在GitHub上開源并且一直在被更新和維護(hù),下面就一起來看一下iOS應(yīng)用開發(fā)中AFNetworking庫的常用HTTP操作方法小結(jié)
    2016-05-05
  • Mac下獲取AppStore安裝包文件路徑

    Mac下獲取AppStore安裝包文件路徑

    本文介紹了Mac下如何找到AppStore下載的安裝包路徑,以及如何提取出來供以后使用的相關(guān)步驟,希望對大家有所幫助。
    2016-09-09
  • iOS中UIScrollView嵌套UITableView的實(shí)踐教程

    iOS中UIScrollView嵌套UITableView的實(shí)踐教程

    在UIScrollView嵌套UITableView的問題相信大家都遇到過,小編最近在工作中就遇到了這個(gè)問題,所以這篇文章主要介紹了iOS中UIScrollView嵌套UITableView的相關(guān)資料,文中介紹的方法是通過自己的實(shí)踐所得來的,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-05-05

最新評論