XMLHttpRequest 无法加载 https://sandbox.itunes.apple.com/verifyReceipt。 Access-Control-Allow-Origin 不允许来
Posted
技术标签:
【中文标题】XMLHttpRequest 无法加载 https://sandbox.itunes.apple.com/verifyReceipt。 Access-Control-Allow-Origin 不允许来源【英文标题】:XMLHttpRequest cannot load https://sandbox.itunes.apple.com/verifyReceipt. Origin is not allowed by Access-Control-Allow-Origin 【发布时间】:2012-11-02 23:33:22 【问题描述】:Apple 似乎不喜欢我的 ajax 请求。我正在尝试在应用内购买后在 PhoneGap 应用中验证收据。
// prepare JSON object for Apple
/* Retrieve the receipt data from the transaction’s transactionReceipt property (on ios) or from the receipt file inside the application bundle (on OS X) and encode it using base64 encoding.
Create a JSON object with a single key named receipt-data and the string you created in step 1. Your JSON code should look like this:
"receipt-data" : "(receipt bytes here)"
*/
var data = JSON.stringify(
'receipt-data' : btoa(transactionReceipt)
);
if(DEBUG) console.log('Data: ' + data);
var url = 'https://' + (DEBUG ? 'sandbox' : 'buy') + '.itunes.apple.com/verifyReceipt';
if(DEBUG) console.log('URL: ' + url);
// send the POST request
/* Post the JSON object to the App Store using an HTTP POST request. The URL for the store is https://buy.itunes.apple.com/verifyReceipt. */
$.ajax(url,
type: 'POST',
data: data,
dataType: 'json',
success: function(data)
console.log('Request returned successfully.');
// parse the response
/*
The response received from the App Store is a JSON object with two keys, status and receipt. It should look something like this:
"status" : 0,
"receipt" : (receipt here)
If the value of the status key is 0, this is a valid receipt. If the value is anything other than 0, this receipt is invalid.
*/
if(data.status === 0)
console.log("Receipt is valid.");
,
error : function(jqXHR, textStatus, errorThrown)
console.error('Request failed with response code ' + errorThrown);
);
我正在使用 jQuery 并且有:
$(document).bind("mobileinit", function ()
// xss
$.support.cors = true;
$.mobile.allowCrossDomainPages = true;
有没有人尝试通过 ajax 验证收据并遇到此问题?
谢谢。
【问题讨论】:
【参考方案1】:Apache Cordova 中的域白名单是一种安全模型, 控制对外部域的访问,例如http://google.com。这 默认安全策略是阻止所有网络访问
http://docs.phonegap.com/guide_whitelist_index.md.html
【讨论】:
感谢您的回复!我已使用*
将所有外部域列入白名单。我需要为苹果启用它的特殊方法吗?我所有的其他链接都有效(谷歌分析等)。
AFAIK 它应该可以正常工作。我想知道它是否与http vs https有关。我还没有尝试用 https 做任何事情。
这个错误不是表示权限被苹果屏蔽了吗?我的意思是,这必须有效,因为每个应用程序都使用它进行 IAP 验证,但他们应该提供 Access-Control
标头。也许我需要在我的开发机器上做一些事情?以上是关于XMLHttpRequest 无法加载 https://sandbox.itunes.apple.com/verifyReceipt。 Access-Control-Allow-Origin 不允许来的主要内容,如果未能解决你的问题,请参考以下文章
XMLHttpRequest 无法为 instagram 加载
XMLHttpRequest 无法加载 https://sandbox.itunes.apple.com/verifyReceipt。 Access-Control-Allow-Origin 不允许来
Safari 10.1:由于访问控制检查,无法加载带有查询参数的 XMLHttpRequest
使用 Angular Material MD Stepper 时,由于访问控制检查,XMLHttpRequest 无法加载 XXXX