导读部分
1.目录贴 C#.NET服务端接口和Android、IOS之间的那些事
需求
APP内部有了购买相关功能 必须加入苹果内购,要不然审核不通过。然,IOS使用内购来购买;Android使用支付宝或者微信来购买。
内容
都知道苹果内购的分成很高,做内购也是为了审核通过。这里 尽量简单化。APP提供一个固定的商品列表,服务器接口这边只需要提供一个【验单】的接口即可,代码如下:[C#] 纯文本查看 复制代码 #region 苹果内购 - 验单
var ret = new JsonMsgRet<int>();
//购买人ID
int userId = InputHelper.GetInputInt(context.Request.Params["userId"]);
//自己生成的订单号
string sysId = InputHelper.GetInputString(context.Request.Params["sysId"]);
//IOS内购生成的订单号
string transactionId = InputHelper.GetInputString(context.Request.Params["transactionId"]);
//IOS生成的票据
string receipt_data = InputHelper.GetInputString(context.Request.Params["receipt_data"]);
//这个是IOS审核人员 审核时的验单地址
string urlText = "https://sandbox.itunes.apple.com/verifyReceipt";
//这个是APP上线后 正式的验单地址
string url = "https://buy.itunes.apple.com/verifyReceipt";
//将其验单方法提取出来 如果返回的是 21007 表示 是IOS审核人员在测试
int status = IOSHttp(receipt_data, url, ret, transactionId, userId, sysId);
if (status == 21007)
{
//跳转到测试地址来验单
IOSHttp(receipt_data, urlText, ret, transactionId, userId, sysId);
}
context.Response.Write(ret.ToJson());
#endregion
private static int IOSHttp(string receipt_data, string urlText, JsonMsgRet<int> ret, string transactionId, int userId, string payId)
{
dynamic posData = new ExpandoObject();
posData.receipt_data = receipt_data;
//posData.password = "";
string receipt = JsonMsgRet<int>.TopJsonParser(posData);
string jsonReceipt = receipt.Replace("receipt_data", "receipt-data");
ret.Status = MsgStatus.OK;
HttpItem item = new HttpItem
{
Method = "POST",
Postdata = jsonReceipt,
ResultType = ResultType.String,
URL = urlText
};
HttpResult data = new HttpHelper().GetHtml(item);
var iPhonePay = JsonHelper.jsonDes<IPhonePay>(data.Html);
if (iPhonePay.status == 0)
{
ret.Content = "购买失败";
//自己的APP包名
if (iPhonePay.receipt.bundle_id == "iphone" || iPhonePay.receipt.bid == "iphone")
{
//通讯成功
if (iPhonePay.receipt.in_app != null && iPhonePay.receipt.in_app.Any())
{
var isNext = iPhonePay.receipt.in_app.Find(o => o.transaction_id == transactionId);
if (isNext != null)
{
//相关逻辑处理
//...........
}
else
{
ret.Content = "购买订单已关闭";
ret.ReturnValue = -1;
}
}
else
{
if (iPhonePay.receipt.transaction_id == transactionId)
{
//相关逻辑处理
//...........
}
else
{
ret.Content = "购买订单已关闭";
ret.ReturnValue = -1;
}
}
}
}
else
{
ret.Content = "官方返回的失败";
ret.ReturnValue = iPhonePay.status;
}
return iPhonePay.status;
}
|