之前沒有做過IOS 內購服務器驗證這塊,所以找了不少參考資料,網上大多php和java版本,然後自己搞了一個C#版本,希望能給大家一些參考,下面步入正題
在客戶端向蘋果購買成功之後,我們需要進行二次驗證。
IOS在沙箱環境下購買成功之後,向蘋果進行二次驗證,確認用戶是否購買成功。
當應用向Apple服務器請求購買,成功之後,Apple會返回以下四個數據給應用
public bool ValidateApplePay()
{
//客戶端post過來的參數
string appleReceipt = Request.Form["appleReceipt"]; //蘋果內購的驗證收據
string orderId = PayHelper.GetOrderIDByPrefix("AP"); //訂單編號
string amount = Request.Form["amount"]; //金額
string userId = Request.Form["userId"]; //用戶UserID
// 驗證參數
if (appleReceipt.Length < 20)
{
return false;
}
string strJosn = string.Format("{{\"receipt-data\":\"{0}\"}}", appleReceipt);
// 請求驗證
string strResult = CreatePostHttpResponse(strJosn, isSandbox);
JObject obj = JObject.Parse(strResult);//using Newtonsoft.Json.Linq;
// 判斷是否購買成功
if (obj["status"].ToString() == "0")
{
return true;
}
else
{
return false;
}
}
public string CreatePostHttpResponse(string datas, bool isSandbox = false)
{
//正式購買地址 沙盒購買地址
string url_buy = "https://buy.itunes.apple.com/verifyReceipt";
string url_sandbox = "https://sandbox.itunes.apple.com/verifyReceipt";
string url = isSandbox ? url_sandbox : url_buy;
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
byte[] data = Encoding.GetEncoding("UTF-8").GetBytes(datas.ToString());
using (Stream stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
Stream responseStream = response.GetResponseStream(); //獲取響應的字符串流
StreamReader sr = new StreamReader(responseStream); //創建一個stream讀取流
var str = sr.ReadToEnd();
sr.Close();
responseStream.Close();
return str.ToString();
}