.NET C# IOS内购支付功能

  /// <summary>
  /// IOS内购支付
  /// </summary>
  public class ApplePay
  {
    /// <summary>
    /// 苹果验证支付
    /// </summary>
    /// <param name="appleReceipt">苹果内购的验证收据</param>
    /// <param name="orderCode">订单号</param>
    /// <returns></returns>
    public string ValidateApplePay(string appleReceipt, string orderCode)
    {
      try
      {
        //客户端post过来的参数
        //string appleReceipt = HttpContext.Current.Request.Form["appleReceipt"]; //苹果内购的验证收据
        //string orderCode = HttpContext.Current.Request.Form["orderCode"];       //订单号

        // 验证参数
        if (appleReceipt.Length < 20)
        {
          return "false";
        }

        string strJosn = string.Format("{{\"receipt-data\":\"{0}\"}}", appleReceipt);
        // 请求验证
        string strResult = CreatePostHttpResponse(strJosn, System.Convert.ToBoolean(ConfigurationManager.AppSettings["PayEnvironment"]));
        JObject obj = JObject.Parse(strResult);//using Newtonsoft.Json.Linq;

        // 判断是否购买成功
        #region 苹果内购服务器验证码
        if (obj["status"].ToString() == "0")
        {
          return "true";
        }
        else if (obj["status"].ToString() == "1")
        {
          return "凭据不在白名单之内";
        }
        else if (obj["status"].ToString() == "2")
        {
          return "伪造充值";
        }
        else if (obj["status"].ToString() == "3")
        {
          return "凭据不存在伪造充值";
        }
        else if (obj["status"].ToString() == "4")
        {
          return "支付时间过期";
        }
        else if (obj["status"].ToString() == "6")
        {
          return "非法凭据";
        }
        else if (obj["status"].ToString() == "21000")
        {
          return "App Store无法读取你提供的JSON数据";
        }
        else if (obj["status"].ToString() == "21002")
        {
          return "收据数据不符合格式";
        }
        else if (obj["status"].ToString() == "21003")
        {
          return "收据无法被验证";
        }
        else if (obj["status"].ToString() == "21004")
        {
          return "你提供的共享密钥和账户的共享密钥不一致";
        }
        else if (obj["status"].ToString() == "21005")
        {
          return "收据服务器当前不可用";
        }
        else if (obj["status"].ToString() == "21006")
        {
          return "收据是有效的,但订阅服务已经过期。当收到这个信息时,解码后的收据信息也包含在返回内容中";
        }
        else if (obj["status"].ToString() == "21007")
        {
          return "收据信息是测试用(sandbox),但却被发送到产品环境中验证";
        }
        else if (obj["status"].ToString() == "21008")
        {
          return "收据信息是产品环境中使用,但却被发送到测试环境中验证";
        }
        else
        {
          return "false";
        }
        #endregion
      }
      catch (System.Exception)
      {
        return null;
      }
    }
    /// <summary>
    /// 请求苹果支付
    /// </summary>
    /// <param name="datas">strJosn 支付单据</param>
    /// <param name="isUrl">是否开启正式模式(默认false)</param>
    /// <returns></returns>
    public string CreatePostHttpResponse(string datas, bool isUrl = false)
    {
      try
      {
        //正式购买地址 沙盒购买地址
        string url_buy = "https://buy.itunes.apple.com/verifyReceipt";
        string url_sandbox = "https://sandbox.itunes.apple.com/verifyReceipt";
        string url = isUrl == false ? url_sandbox : url_buy;

        HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
        request.ProtocolVersion = HttpVersion.Version10;
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        byte[] data = Encoding.GetEncoding("UTF-8").GetBytes(datas.ToString());
        using (Stream stream = request.GetRequestStream())
        {
          stream.Write(data, 0, data.Length);
        }

        HttpWebResponse response = request.GetResponse() as HttpWebResponse;
        Stream responseStream = response.GetResponseStream();   //获取响应的字符串流
        StreamReader sr = new StreamReader(responseStream); //创建一个stream读取流

        var str = sr.ReadToEnd();
        sr.Close();
        responseStream.Close();
        return str.ToString();
      }
      catch (System.Exception)
      {
        return string.Empty;
      }
    }
  }
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值