zoukankan      html  css  js  c++  java
  • IOS 内付 asp.net mvc 服务器端验证

    上代码:

    public class AppStorePayApp
        {
            public int VerifyReceipt(string receipt, out string product_id, out string transaction_id)
            {
                product_id = "";
                transaction_id = "";
                try
                {
                    string sandbox_url = "https://sandbox.itunes.apple.com/verifyReceipt";
                    string product_url = "https://buy.itunes.apple.com/verifyReceipt";

    string ReturnVal = Post(product_url, receipt); JObject retJOBJ = ReturnVal.ToJObject(); if (retJOBJ["status"] == null) { return 0; } if (Convert.ToInt32(retJOBJ["status"]) == 21007)//测试环境 { ReturnVal = Post(sandbox_url, receipt); retJOBJ = ReturnVal.ToJObject(); if (retJOBJ["status"] == null || Convert.ToInt32(retJOBJ["status"]) != 0) { return 0; } } if (Convert.ToInt32(retJOBJ["status"]) == 0) { product_id = retJOBJ["receipt"]["in_app"][0]["product_id"].ToString(); transaction_id = retJOBJ["receipt"]["in_app"][0]["transaction_id"].ToString();return 1; } return 0; } catch (Exception ex) { } return 0; } public string Post(string verify_url, string receipt) { WebRequest request = WebRequest.CreateHttp(verify_url); request.Method = "POST"; request.ContentType = "application/json"; if (!string.IsNullOrEmpty(receipt)) { using (var streamWriter = new StreamWriter(request.GetRequestStream())) { streamWriter.Write(receipt); streamWriter.Flush(); streamWriter.Close(); } } System.Net.WebResponse response = request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8")); string ReturnVal = reader.ReadToEnd(); reader.Close(); response.Close(); return ReturnVal; } }

    验证思路:先进行正式环境的验证,得到status=21007说明receipt得到的沙盒测试环境的值,需要使用测试地址进行验证。

    参数receipt,ios客户端传递过来的参数:

    ios相关

    1、 从Transaction 的TransactionReceipt属性中得到接收的数据,并以base64编码;

    2、创建JSON对象,字典格式,单键值对,键名为“receiptdata”,值为上一次编码的数据,效果:

    {"receipt-data":"base64编码之后的数据"}

    3、将这个json对象以字符串形式发送到服务器

    结果判断status=0代表验证成功可以进行业务处理,主要该验证可以重复进行,所需要服务器端根据字段:transaction_id进行唯一性处理,避免业务处理出现错误。

    product_id字段可以作为价格的判断,需要与客户端开发所提交的加个保持一致。

  • 相关阅读:
    科大奥瑞大物实验-A类不确定度计算器 代码
    在手机和电脑间双向加密传输文件 —— Windows 安装 Kde Connect
    Leetcode 寻找两个有序数组的中位数
    树莓派3B安装 Arch Linux ARM
    从零开始编译安装 Extcalc
    Oracle, PostgreSQl, MySQL针对INSERT时可能唯一键重复的SQL
    如何从Oracle, MySql, PostgreSQL的PreparedStatement获得所执行的sql语句?
    PostgreSQL报错:当前事务被终止,命令被忽略,直到事务块结束
    PostgreSQL对GROUP BY子句使用常量的特殊限制
    一种用JDBC实现批量查询的巧妙方法
  • 原文地址:https://www.cnblogs.com/kongkonglonglong/p/7478913.html
Copyright © 2011-2022 走看看