使用 C# 验证 iOS 应用程序购买收据

2024-01-12

我正在验证我的iosin app purchase我的服务器上使用的收据C#网络服务

我通过在 Xcode 中执行以下操作获得了字符串形式的收据:

- (void) completeTransaction: (SKPaymentTransaction *)transaction
{
    NSString* receiptString = [[NSString alloc] initWithString:transaction.payment.productIdentifier];

    NSLog(@"%@",receiptString);

    NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];

    NSData *receipt = [NSData dataWithContentsOfURL:receiptURL];

    NSString *jsonObjectString = [receipt base64EncodedStringWithOptions:0];

}

我正在将该字符串(收据)发送到我的C#Web 服务作为参数。 这是我的网络服务方法:

[WebMethod(Description = "Purchase Item Verify")]
public string PurchaseItem(string receiptData)
 {
    string returnmessage = "";

    try
    {
        var json = "{ 'receipt-data': '" + receiptData + "'}";

        ASCIIEncoding ascii = new ASCIIEncoding();
        byte[] postBytes = Encoding.UTF8.GetBytes(json);

        HttpWebRequest request;
        request = WebRequest.Create("https://sandbox.itunes.apple.com/verifyReceipt") as HttpWebRequest;
        request.Method = "POST";
        request.ContentType = "application/json";
        request.ContentLength = postBytes.Length;

        Stream postStream = request.GetRequestStream();
        postStream.Write(postBytes, 0, postBytes.Length);
        postStream.Close();

        var sendresponse = (HttpWebResponse)request.GetResponse();

        string sendresponsetext = "";
        using (var streamReader = new StreamReader(sendresponse.GetResponseStream()))
        {
            sendresponsetext = streamReader.ReadToEnd();
        }
        returnmessage = sendresponsetext;

    }
    catch (Exception ex)
    {
        ex.Message.ToString();
    }
    return returnmessage;
}

它总会回来{"status":21002}。 我已经找了两天了,还是没找到解决办法。有人可以帮助我,我错了什么?

**我正在沙箱上进行测试,这就是我使用沙箱 URL 的原因。我可以在我的应用程序中验证交易收据。


我得到了解决方案

对我有用的最终代码是:

 public string PurchaseItem(string receiptData)
{
    string returnmessage = "";
    try
    {
       // var json = "{ 'receipt-data': '" + receiptData + "'}";

        var json = new JObject(new JProperty("receipt-data", receiptData)).ToString();

        ASCIIEncoding ascii = new ASCIIEncoding();
        byte[] postBytes = Encoding.UTF8.GetBytes(json);

      //  HttpWebRequest request;
        var request = System.Net.HttpWebRequest.Create("https://sandbox.itunes.apple.com/verifyReceipt");
        request.Method = "POST";
        request.ContentType = "application/json";
        request.ContentLength = postBytes.Length;

        //Stream postStream = request.GetRequestStream();
        //postStream.Write(postBytes, 0, postBytes.Length);
        //postStream.Close();

        using (var stream = request.GetRequestStream())
        {
            stream.Write(postBytes, 0, postBytes.Length);
            stream.Flush();
        }

      //  var sendresponse = (HttpWebResponse)request.GetResponse();

        var sendresponse = request.GetResponse();

        string sendresponsetext = "";
        using (var streamReader = new StreamReader(sendresponse.GetResponseStream()))
        {
            sendresponsetext = streamReader.ReadToEnd().Trim();
        }
        returnmessage = sendresponsetext;

    }
    catch (Exception ex)
    {
        ex.Message.ToString();
    }
    return returnmessage;

花了两天半的时间才换了一个方法。感谢上帝。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 C# 验证 iOS 应用程序购买收据 的相关文章

  • 如何在iPhone应用程序中创建折线图? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 Regsvr32 注册 .NET COM DLL?

    我有一个使用 COM DLL 的 VB6 应用程序 该DLL是用C 编写的 在 C 项目属性中 我检查了 Register for COM interop 选项 VB6 应用程序在我的开发机器上运行良好 C 代码完全遵循以下格式 CodeP
  • 在 C++ 中从另一个数组初始化结构内的数组[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions struc
  • boost变体简单调用常用方法

    我有两个指针 只能设置其中之一 所以我正在考虑使用 boost variant 例如 boost variant
  • 从动态服务器中抓取 html 列表数据

    哈喽大家好 抱歉提出转储问题 这是我最后的手段 我发誓我尝试了无数其他 Stackoverflow 问题 不同的框架等 但这些似乎没有帮助 我有以下问题 一个网站显示一个数据列表 前面有大量的 div li span 等标签 它是一个很大的
  • 我们可以在 Objective-C 中创建可空/非空属性吗?

    我们可以在 Objective C 中创建可空 非空属性吗 如果可以 那么如何创建 您可以使用 Nullable and Nonnull预选赛 property copy nullable NSString name property co
  • 在 C# 中给定周数和年份,计算一周的开始和结束日期(基于 ISO 规范)

    我需要生成一份报告 显示一年中的 52 周 或某些年份的 53 周 及其开始日期和结束日期 有一个 ISO 规范可以做到这一点 但看起来非常复杂 我希望有人知道在 C 或 Visual Basic 中执行此操作的方法 实际上适用于 Visu
  • 有没有办法对 RichTextBox 的撤消历史进行分组或暂时禁用它?

    我目前正在研究 WPF 中 RichTextBox 内的表格 在 WPF 中 表格没有行和列 只有行 每行都有一定数量的单元格 当用户按下 添加列 按钮时 我的程序会向每一行添加一个新单元格 使用此方法的问题是 在用户添加一列后 如果他们按
  • 将 GestureRecogniser 附加到多个图像视图

    今天我在将相同的手势识别器附加到多个图像视图时遇到了一些奇怪的事情 它仅附加到最后一个视图 换句话说 它只能附加到一个视图 我必须创建多个手势识别器才能满足我的要求 以下是我所做的 我做的对吗 这是将识别器附加到多个图像视图的唯一方法吗 请
  • Parallel ForEach 的本地初始化如何工作?

    我不确定 Parallel ForEach 中本地 init 函数的使用 如 msdn 文章中所述 http msdn microsoft com en us library dd997393 aspx http msdn microsof
  • 等效

    这是否保证始终为真 std numeric limits
  • 如何从 MongoDB 中的 ChangeStream 过滤对特定字段的更新

    我正在设置一个 ChangeStream 以便在集合中的文档发生更改时通知我 以便我可以将该文档的 LastModified 元素更新插入到事件发生的时间 由于此更新将导致 ChangeStream 上发生新事件 因此我需要过滤掉这些更新以
  • 对嵌套属性使用 XmlAttributeOverrides

    我试图使用 XmlAttributeOverrides 来控制类序列化后哪些类属性出现在 xml 中 它适用于 根 类上的属性 但不适用于嵌套属性 这是一个简单的例子来说明我想要完成的任务 我的类层次结构如下 public class Ma
  • 允许使用 AutoMapper 或类似工具映射动态类型吗?

    我已经开始使用https github com robconery massive https github com robconery massive对于一个项目 我想知道是否有任何映射工具可以支持动态到静态类型的映射 我以前使用过 Au
  • 如何设置扬声器声音增强设置

    如何以编程方式设置 Windows 扬声器设置 增强 选项卡 中可用的声音效果 恐怕这是不可能的 参见 Maurits 对他的评论blog http blogs msdn com b matthew van eerde archive 20
  • C++ 从文件中读取字符串

    我试图将字符串直接存储到一个文件中 以便稍后在 C 中读取 基本上 对于整个范围 我试图将带有字符串变量的对象数组存储在文件中 并且这些字符串变量将通过类似 object 的内容读取 0 字符串 然而 每次我尝试读取字符串变量时 系统都会给
  • Xcode 8.3 / Xcode 9.0 刷新配置文件设备

    我添加了一些新设备 当 Xcode 8 自动管理签名资产时 如何刷新配置文件 我发现了这个问题 刷新 Xcode 7 管理的团队配置文件中的设备 https stackoverflow com questions 32729193 refr
  • Xamarin Forms:System.Reflection.TargetInitationException:调用目标已引发异常

    我正在为这个问题苦苦挣扎 我只是创建了一个简单的跨平台页面 这里是 XAML 代码
  • In 和 Out 属性在 .NET 中如何工作?

    我一直在尝试跨序列化数组AppDomain边界 使用以下代码 public int Read byte buffer int offset int count return base Read buffer offset count 作为猜
  • 将 Web 场迁移到 ASP.NET 运行时版本 4,同时保持会话

    我们已将 Web 应用程序从 net 运行时 2 v 3 5 迁移到 net 运行时 4 v 4 5 我有一个部署问题 我们的 sessionstate 服务器是一个 stateserver 并在单独的服务器上运行框架 2 中的 aspne

随机推荐