| 导读部分 
 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;
        }
 
 
 
 
 
 |