蘋果IAP內付費二次驗證程式碼
1. 驗證邏輯在客戶端實現:
-
// iapData 使用者購成功的transactionReceipt
-
-(BOOL)putStringToItunes:(NSData*)iapData
-
{
-
NSString*encodingStr = [iapData base64EncodedString];
-
-
NSString *URL=@URL_VerifyReceipt;
-
-
// https://sandbox.itunes.apple.com/verifyReceipt
測試地址
-
// https://buy.itunes.apple.com/verifyReceipt
正式釋出驗證地址
-
-
NSMutableURLRequest *request = [[NSMutableURLRequest
alloc] init];// autorelease];
-
[request setURL:[NSURL URLWithString:URL]];
-
[request setHTTPMethod:@"POST"];
-
//設定contentType
-
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
-
//設定Content-Length
-
[request setValue:[NSString stringWithFormat:@"%d", [encodingStr
length]] forHTTPHeaderField:@"Content-Length"];
-
-
NSDictionary* body = [NSDictionary dictionaryWithObjectsAndKeys:encodingStr, @"receipt-data", nil];
-
SBJsonWriter *writer = [SBJsonWriter new];
-
[request setHTTPBody:[[writer
stringWithObject:body] dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]];
-
NSHTTPURLResponse *urlResponse=nil;
-
NSError *errorr=nil;
-
NSData *receivedData = [NSURLConnection sendSynchronousRequest:request
-
returningResponse:&urlResponse
-
error:&errorr];
-
-
//解析
-
NSString *results=[[NSString
alloc]initWithBytes:[receivedData bytes] length:[receivedData
length] encoding:NSUTF8StringEncoding];
-
-
printf(" \n MKStoreManager::putStringToItunes: %s \n", [results
UTF8String]);
-
-
NSDictionary*dic = [results JSONValue];
-
if([[dic
objectForKey:@"status"] intValue]==0) //注意,status=@"0" 是驗證收據成功
-
{
-
return true;
-
}
-
return false;
- }
-
// 交易成功
-
-(void) provideContent: (SKPaymentTransaction *)transaction
-
{
-
if(delegate && [delegate
respondsToSelector:@selector(productPurchasedSuccess:)])
-
{
-
if (!isNetworkOK()) {
-
[delegate productPurchasedFailed:transaction.payment.productIdentifier];
-
return;
-
}
-
if([self putStringToItunes:transaction.transactionReceipt])
-
{
-
printf("putStringToItunes check success!!! \n");
-
[delegate productPurchasedSuccess:transaction.payment.productIdentifier];
-
}else{
-
[delegate productPurchasedFailed:transaction.payment.productIdentifier];
-
-
}
-
}
- }
2. 驗證邏輯放在伺服器端。
實現程式碼如下,
需要上傳客戶端得到的 NSString*encodingStr = [iapData base64EncodedString]; 資料-
<?php
-
/**
-
* @說明: iap 購買伺服器驗證邏輯
-
* @作者: linux_wuliqiang@163.com
-
*
-
* @data: 2013-05-06
-
*
-
* @備註: 客戶端進行 iap 購買後,需要伺服器再次進行驗證。確定玩家是否購買成功
-
*
-
*
-
*/
-
-
class BaseIapCheck
-
{
-
// 是否為沙盒測試環境
-
const IapCheck_IsSandBox = true;
-
-
-
/**
-
* 得到 iap 購買的單據資料,如果成功購買了,返回正常的購買資料,否則返回 null
-
* string $receipt, 客戶端 iap 購買時,返回的單據資料, 此資料是在客戶端經過 NSString*encodingStr = [iapData base64EncodedString]; 處理後的資料
-
*
-
* return ,驗證成功,返回正常的購買資料,驗證失敗,返回 null
-
*
-
* 備註:可以通過 product_id 來判定具體購買的是哪一個收費道具
-
*/
-
public static function GetReceiptData($receipt)
-
{
-
if (self::IapCheck_IsSandBox)
-
{
-
$url = 'https://sandbox.itunes.apple.com/verifyReceipt';
-
}
-
else
-
{
-
$url = 'https://buy.itunes.apple.com/verifyReceipt';
-
}
-
-
$postDataJson = json_encode(array('receipt-data' => $receipt));
-
$opts = array
-
(
-
'http' => array
-
(
-
'method' => 'POST',
-
'header'=> "Content-type:
application/json" . // 必須設定為 application/json 格式
-
"Content-Length: " . strlen($postDataJson) . "\r\n",
-
'content' => $postDataJson
-
)
-
);
-
-
//生成請求的控制程式碼檔案
-
$context = stream_context_create($opts);
-
$html = file_get_contents($url, false, $context);
-
$data = json_decode($html);
-
-
// echo '
'; -
// echo '$html
'; -
// var_dump($html);
-
// echo '
'; -
// echo 'data
'; -
// var_dump($data);
-
// echo '
'; -
-
//判斷返回的資料是否是物件
-
if (!is_object($data))
-
{
-
return null;
-
}
-
-
//判斷是否購買成功
-
if (!isset($data->status) || $data->status != 0)
-
{
-
return null;
-
}
-
-
//返回產品的資訊
-
return array(
-
'quantity' => $data->receipt->quantity,
-
'product_id' => $data->receipt->product_id,
-
'transaction_id' => $data->receipt->transaction_id,
-
'purchase_date' => $data->receipt->purchase_date,
-
'item_id' => $data->receipt->item_id,
-
'bid' => $data->receipt->bid,
-
'bvrs' => $data->receipt->bvrs
-
);
-
}
-
}
-
-
- ?>
相關文章
- IAP 內購二次驗證(出現的問題21002及解決方案)
- 兩年了,蘋果付費榜為何還是個廢榜?蘋果
- 知識付費二次起風?
- 知識付費系統原始碼基於PHP開源的網站內容付費原始碼原始碼PHP網站
- 經蘋果“血洗”後,付費榜已有廠商迅速刷榜並拿下榜首蘋果
- 個人網站 兩行程式碼讓網頁內容付費可見網站行程網頁
- 蘋果關閉了iOS 11.3系統的驗證通道蘋果iOS
- 蘋果企業賬號:蘋果iPhone SE 2已進入最後生產驗證階段蘋果iPhone
- 易優cms二次模版驗證問題答案忘記了, 二次模版驗證問題修改不了該改哪塊程式碼
- 蘋果遠端裝置管理服務DEP含有驗證缺陷蘋果
- 第二次實驗完整程式碼
- 免費SSL證書和付費SSL證書的區別
- 付費SSL證書和免費SSL證書的區別
- PHP語言之華為應用內購買IAP驗籤PHP
- jetbrains 二次驗證?!聖誕送 Ni 啟用碼!AI
- 蘋果:2019年6月Apple Music付費訂閱使用者超過6000 萬蘋果APP
- 在國內使用Google驗證碼reCaptchaGoAPT
- volatile的特性程式碼驗證
- 蘋果春季釋出會:或將釋出一項付費遊戲訂閱服務蘋果遊戲
- 聊聊蘋果證書的那些事蘋果
- 蘋果關閉iOS 13.3系統驗證通道,iPhone不能降級了蘋果iOSiPhone
- Sensor Tower:2019年美國蘋果使用者平均付費達100美元 同比增長27%蘋果
- Java製作驗證碼的完整程式碼Java
- 驗證碼原理及驗證
- 蘋果修復舊款蘋果裝置兩個0day漏洞,可導致敏感內容劫持、任意程式碼執行攻擊蘋果
- CRMEB知識付費程式系統原始碼 全開源原始碼
- 驗證碼---js重新整理驗證碼JS
- 模擬使用者登入,內含驗證碼驗證和request等操作
- 蘋果證書為什麼會掉?蘋果
- JavaScript 表單驗證程式碼例項JavaScript
- 蘋果id密碼忘了怎麼辦?蘋果Apple ID密碼找回、重置方法蘋果密碼APP
- JavaScript驗證碼生成和驗證效果JavaScript
- 玩家留存和付費的秘密:遊戲體驗遊戲
- hbuilderX打包蘋果證書的申請方法UI蘋果
- Semrush:2020年蘋果在付費搜尋廣告上花費6480萬美元蘋果
- 驗證碼機制之驗證碼重複使用
- 登入驗證碼生成kaptcha(輸入驗證碼)APT
- 銅陵 知識付費原始碼_三分鐘完成專屬知識付費原始碼_口碑原始碼
- 小程式 - 驗證碼倒數計時元件元件