下面是用於驗證收到的樣本PHP代碼:在應用程序內購買,後端PHP和iTunes的響應問題
public static function getReceiptData($receipt, $isSandbox = false) {
if ($isSandbox)
$endpoint = 'https://sandbox.itunes.apple.com/verifyReceipt';
else
$endpoint = 'https://buy.itunes.apple.com/verifyReceipt';
$postData = "{\"receipt-data\":\"". base64_encode($receipt) ."\"}";
$ch = curl_init($endpoint);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
$response = curl_exec($ch);
$errno = curl_errno($ch);
$errmsg = curl_error($ch);
curl_close($ch);
if ($errno != 0) {
throw new sfException('connection_to_itunes_error', $errno);
}
// FIXME
mail('my_mail', 'Invalid Itunes Receipt', var_export($data, true) . "\n" . $postData);
$data = json_decode($response);
if (!is_object($data)) {
throw new sfException('invalid_response_data');
if (!isset($data->status) || $data->status != 0)
throw new sfException('invalid_receipt');
return $data;
}
那麼簡單。
但我總是從iTunes中得到異常: 我嘗試了很多$ postData字符串的組合,但它沒有幫助。
有從iTunes例外: java.lang.ClassCastException: java.lang.String cannot be cast to com.webobjects.foundation.NSDictionary
爲{"receipt-data":"MTAwMDAwMDAwMTU1MjM1Ng=="}
java.lang.NullPointerException
爲"{"receipt-data":"MTAwMDAwMDAwMTU1MjM1Ng=="}"
等等奇怪的錯誤 '<html><head><title>Error</title></head><body>Your request produced an error. <BR>[newNullResponse]</body></html>'
字符串"{\"receipt-data\":\"MTAwMDAwMDAwMTU1MjM1Ng==\"}"
你能提供的recipt驗證工作JSON字符串?
類似的問題:http://stackoverflow.com/questions/4715414 /蘋果應用程序內購買,驗證收據 – 2011-02-28 21:59:12