http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 8144|回复: 6

[c#与移动端通讯] C#服务器端IOS内购验单

[复制链接]
发表于 2018-11-27 16:39:24 | 显示全部楼层 |阅读模式
导读部分

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;
        }








1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2018-11-27 16:45:15 | 显示全部楼层
苹果内够是比较头大的事,流氓化了已经了,31%的手续费伤不起
发表于 2018-11-27 17:50:56 | 显示全部楼层
是哒, 苹果的现在很强势呀, 不内购, 不能上线
发表于 2018-11-27 17:51:31 | 显示全部楼层
看起来,我们都是进了苹果内购的坑中了呀, 写的不错, 楼主加油
发表于 2018-11-27 21:21:17 | 显示全部楼层
楼主加油, 强烈支持楼主ing……
发表于 2018-11-27 21:27:34 | 显示全部楼层
内购这块,确实有点烦人。
发表于 2018-11-27 21:42:46 | 显示全部楼层
强烈支持楼主ing……
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-26 00:20

© 2014-2021

快速回复 返回顶部 返回列表