PHP實現蘋果 IOS 內購 IAP

2021-09-26 05:28:52 字數 2227 閱讀 7124

反反覆覆經過多次重寫(內部需要),發現蘋果使用php來驗證蘋果內購資料是否正確並不是一件很難的事情。我把我的一些心得寫出來,以供以後有這方面需求的小夥伴參考,以php語言為例,誰讓php是最好的語言呢!

首先要知道蘋果內購分沙箱環境和正式環境,兩者區別就是名字不同,請求是需要攜帶的引數是相同的。最重要的就乙個資料,叫receipt-data本例的內購專案型別是:消耗型。

等級1~等級87(rmb):6 - 12 - 18 - 25 - 30 - 40 - 45 - 50 - 60 - 68 - 73 - 78 - 88 - 93 - 98 - 108 - 113 - 118 - 123 - 128 - 138 - 148 - 153 - 158 - 163 - 168 - 178 - 188 - 193 - 198 - 208 - 218 - 223 - 228 - 233 - 238 - 243 - 248 - 253 - 258 - 263 - 268 - 273 - 278 - 283 - 288 - 298 - 308 - 318 - 328 - 348 - 388 - 418 - 448 - 488 - 518 - 548 - 588 - 618 - 648 - 698 - 798 - 818 - 848 - 898 - 998 - 1048 - 1098 - 1148 - 1198 - 1248 - 1298 - 1398 - 1448 - 1498 - 1598 - 1648 - 1998 - 2298 - 2598 - 2998 - 3298 - 3998 - 4498 - 4998 - 5898 - 6498

二、錯誤碼的說明很簡潔也很好找的,這裡我再次貼出來,如下:

* 21002 receipt-data域的資料有問題  

* 21003 receipt無法通過驗證  

* 21004 提供的shared secret不匹配你賬號中的shared secret  

* 21005 receipt伺服器當前不可用  

* 21006 receipt合法,但是訂閱已過期。伺服器接收到這個狀態碼時,receipt資料仍然會解碼並一起傳送  

* 21007 receipt是sandbox receipt,但卻傳送至生產系統的驗證服務  

* 21008 receipt是生產receipt,但卻傳送至sandbox環境的驗證服務 

三、沙箱環境資料請求正式環境url,返回的資料如下:

沒錯,就乙個錯誤碼,其他什麼都沒有。

四、沙箱環境資料請求沙箱環境url,返回資料如下:

,

"status": 0,

}

注意,沙箱環境中返回的status的值也是:0

五、正式環境資料請求正式環境url,返回資料如下:

,

"status": 0,

}

注意,正式環境和沙箱環境返回的資料有乙個不同,已在返回資料中標明,二者還有的不同就是欄位的排序不一樣。

五、**【使用的tp5.0框架】如下:

<?php

/** * created by phpstorm.

* user: lsk

* date: 2019/08/12

* time: 14:00

*/use think\controller;

use think\log;

class iap extends controller

// 請求驗證【預設向真實環境發請求】

$html = $this->acurl($receiptdata);

$data = json_decode($html, true);//接收蘋果系統返回資料並轉換為陣列,以便後續處理

// 如果是沙盒資料 則驗證沙盒模式

if ($data['status'] == '21007')

if (isset($_get['debug']))

// 判斷是否購買成功  【狀態碼,0為成功(無論是沙箱環境還是正式環境只要資料正確status都會是:0)】

if (intval($data['status']) === 0) else

} else

}//curl【模擬http請求】

public function acurl($receiptdata, $sandbox = 0)

}

以上**為簡單的判斷但也已經完全滿足需求,如有需要可以做其他刪減擴充校驗。

IOS內購(IAP)的那些事

最近看了內購相關的東西,發現坑還真是不少,這裡做個總結。蘋果內購的主要流程 獲取商品資訊 建立交易 把交易新增到佇列 交易成功獲取憑證 拿著憑證做二次驗證 交易成功 通過產品id獲取商品資訊 skproduct import 把商品id資訊放入乙個集合中 nsset sets nsset setwi...

php蘋果內購支付驗證

param string receipt data 付款後憑證 return array 驗證是否成功 21002 receipt data域的資料有問題 21003 receipt無法通過驗證 21004 提供的shared secret不匹配你賬號中的shared secret 21005 re...

PHP後端處理蘋果內購對接

1 前六步有ios端處理,最終獲取購買憑證 2 post請求,傳送購買憑證receipt data到服務端介面 蘋果內購 param receipt data 購買憑證 必傳 param is test 是否沙盒資料 選填,1是 0否,預設否 return json public function ...