C# WebAPI完成iOS支付验证

后端使用C# WebApi框架,用户支付完成后请求API地址对支付结果进行后端检验并完成相关数据的修改。

API 方法

// API Post 请求
public string Post(IOSplay iosplay)
{// 连接数据库SqlConnection sqlConnection = new SqlConnection(@"");try{// 入参校验if (iosplay.transactionReceipt != "" && iosplay.productid != "" && iosplay.userid != ""){// IOS支付检验参数string strJosn = string.Format("{{\"receipt-data\":\"{0}\",\"password\":\"\"}}", iosplay.transactionReceipt);// 请求iOS检验地址string fsjisa = CreatePostHttpResponse(strJosn);JObject obj = JObject.Parse(fsjisa);// 判断是否购买成功if (obj["status"].ToString() == "0"){// 支付成功 进行数据库操作sqlConnection.Open();string sqlxz = "insert into iosplay()  values()";DataSet dataSetq = new DataSet();SqlDataAdapter sqlDataAdapterq = new SqlDataAdapter(sqlxz, sqlConnection);sqlDataAdapterq.Fill(dataSetq);sqlConnection.Close();return "success";        }else{// 支付验证失败,数据库最好也进行一下记录sqlConnection.Open();string sqlxz2 = "insert into iosplay()  values()";DataSet dataSetq2 = new DataSet();SqlDataAdapter sqlDataAdapterq2 = new SqlDataAdapter(sqlxz2, sqlConnection);sqlDataAdapterq2.Fill(dataSetq2);sqlConnection.Close();return "IOS订单验证失败";}}else{// 入参错误sqlConnection.Open();string sqlxz3 = "insert into iosplay(sdduihuan)  values(@duihshif)";DataSet dataSetq3 = new DataSet();SqlDataAdapter sqlDataAdapterq3 = new SqlDataAdapter(sqlxz3, sqlConnection);sqlDataAdapterq3.SelectCommand.Parameters.AddWithValue("@duihshif", "请求参数错误");sqlDataAdapterq3.Fill(dataSetq3);sqlConnection.Close();return "请求参数错误";}}catch (Exception ex){// 处理异常sqlConnection.Open();string sqlxz4 = "insert into iosplay(sdduihuan)  values(@duihshif)";DataSet dataSetq4 = new DataSet();SqlDataAdapter sqlDataAdapterq4 = new SqlDataAdapter(sqlxz4, sqlConnection);sqlDataAdapterq4.SelectCommand.Parameters.AddWithValue("@duihshif", ex.ToString());sqlDataAdapterq4.Fill(dataSetq4);sqlConnection.Close();return "error"+ ex.ToString();}finally{sqlConnection.Close();}
}

CreatePostHttpResponse(请求IOS验证地址)

public string CreatePostHttpResponse(string datas, bool isSandbox = false)
{string url_buy = "https://buy.itunes.apple.com/verifyReceipt"; // 正式购买地址string url_sandbox = "https://sandbox.itunes.apple.com/verifyReceipt"; //  沙盒购买地址string url = isSandbox ? 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();
}

苹果会返回的数据

{"receipt":{"original_purchase_date_pst":"2015-06-22 20:56:34 America/Los_Angeles", //购买时间,太平洋标准时间"purchase_date_ms":"1435031794826", //购买时间毫秒"unique_identifier":"5bcc5503dbcc886d10d09bef079dc9ab08ac11bb",//唯一标识符"original_transaction_id":"1000000160390314", //原始交易ID"bvrs":"1.0",//iPhone程序的版本号"transaction_id":"1000000160390314", //交易的标识"quantity":"1", //购买商品的数量"unique_vendor_identifier":"AEEC55C0-FA41-426A-B9FC-324128342652", //开发商交易ID"item_id":"1008526677",//App Store用来标识程序的字符串"product_id":"cosmosbox.strikehero.gems60",//商品的标识 "purchase_date":"2015-06-23 03:56:34 Etc/GMT",//购买时间"original_purchase_date":"2015-06-23 03:56:34 Etc/GMT", //原始购买时间"purchase_date_pst":"2015-06-22 20:56:34 America/Los_Angeles",//太平洋标准时间"bid":"com.cosmosbox.StrikeHero",//iPhone程序的bundle标识"original_purchase_date_ms":"1435031794826"//毫秒},"status":0 //状态码,0为成功
}

苹果会反馈的状态码;
21000App Store无法读取你提供的JSON数据
21002 收据数据不符合格式
21003 收据无法被验证
21004 你提供的共享密钥和账户的共享密钥不一致
21005 收据服务器当前不可用
21006 收据是有效的,但订阅服务已经过期。当收到这个信息时,解码后的收据信息也包含在返回内容中
21007 收据信息是测试用(sandbox),但却被发送到产品环境中验证
21008 收据信息是产品环境中使用,但却被发送到测试环境中验证

C# WebAPI完成iOS支付验证相关推荐

  1. ios 支付验证 php,PHP验证IOS原生支付是否成功(代码全篇)

    前言 IOS原生支付后,需要调用服务端接口进行验证,检测是否真正的支付成功! class ApplePay { /** 环境配置(建议提成配置) * @var bool */ private $san ...

  2. ios 支付验证 php,PHP服务端验证APPLE支付的收据

    使用服务器来交付内容,我们还需要做些额外的工作来验证从Store Kit发送的收据信息. 重要信息:来自Store的收据信息的格式是专用的. 你的程序不应直接解析这类数据.可使用如下的机制来取出其中的 ...

  3. ##iOS中的微信支付 支付验证签名失败

    iOS中的微信支付 支付验证签名失败 今天要在项目中添加微信支付,iOS端的所有东西都已经按照文档搞好了,可就是跳转到微信的时候显示"支付验证签名失败",可是安卓端的都没有问题,就 ...

  4. ios不行安卓可以 微信签名_微信支付-支付验证签名失败(iOS)

    在项目中添加微信支付,iOS端的所有东西都已经按照文档搞好了,可就是跳转到微信的时候显示"支付验证签名失败",可是安卓端的都没有问题,就很郁闷了. 后来在对文档的时候发现... 6 ...

  5. php 苹果支付验证失败的原因,iOS 微信支付报错 支付验证签名失败

    可能的原因有两个: 一.传给微信sdk的参数中时间戳的格式错误. iOS中时间戳的格式要求是32位的int类型 image.png 一般服务器返回的是字符串需要强制转换成32位int类型的值 二.服务 ...

  6. iOS支付(含服务器验证)

    直接上代码..... .h文件: #import <StoreKit/StoreKit.h>@interface SDKApplePay : NSObject <SKProducts ...

  7. IOS支付,java后端代码

    IOS支付,java后端代码 提示: 近期公司业务中APP新增了苹果内购支付,首次对接IOS支付,在此做记录.简单研究后发现,IOS支付和国内的微信支付宝支付流程有点不一样,IOS支付成功后也是依赖I ...

  8. Unity 之 Mac App Store 内购过程解析(购买非消耗道具 | 恢复购买 | 支付验证)

    Unity 之 Mac App Store 内购过程解析(恢复购买) 准备工作 一,具体实现 1.1 场景搭建 1.2 代码实现 1.3 打包设置 二,打包测试 2.1 实现步骤说明 2.2 Mac签 ...

  9. 微信小程序 iOS支付

    微信小程序运营支付规范 微信官方针对有虚拟支付功能的小程序下发了整改通知.截至5月8号,平台将对账号屏蔽iOS系统的支付接口调用.我去查了<<微信小程序运营规则>>,如上图.发 ...

最新文章

  1. myeclipse中配置weblogic的开发环境
  2. Valgrind使用【转】
  3. 有道python网课怎么样-如何用python“优雅的”调用有道翻译?
  4. web前端开发--列表
  5. kettle中job给转换配置相对路径
  6. 神经网络 | 单层感知器从0到1(附Python源代码)
  7. docker安装mysql及相关配置、运行细节和常见报错解决方案
  8. 通过豆瓣电影的多方法解析,带你学会爬虫的所有解析方法
  9. Silverlight中使用MIRIA进行触屏编程
  10. kail利用msf工具对MS12-020漏洞进行渗透测试
  11. 前端学习(2593):清除vuex的数据和sessionstrage数据
  12. centos7源码安装mysql报错_CentOS7 下源码安装MySQL数据库 8.0.11
  13. 十行Python以内代码能有什么高端操作?
  14. 无需担心架构演变 入云的Teradata无处不在
  15. 基于SSM的Java Web应用开发原理初探
  16. sql数值计算函数ceil(x)、sign(X)、sqrt(X)、truncate(X,D)、floor(x)、pi()、mod(x,y)
  17. matlab自动识别粗大误差,剔除粗大误差
  18. rx590 黑苹果 无货_RX 590显卡在Mojave黑苹果系统中识别为RX 480问题的解决一例。...
  19. Ubuntu下声卡驱动解决方法alsa
  20. 短视频剪辑怎么自学?短视频剪辑的教程分享

热门文章

  1. Spring Boot教程系列(ImportNew )
  2. 基石药业与辉瑞达成战略合作;搜狗就私有化达成最终协议 | 美通企业日报
  3. Android圆形布局
  4. Storm概念、原理详解及其应用(一)BaseStorm
  5. c语言编写对答机器人_来,你也可以用 C 语言写一个聊天机器人
  6. 魔王语言C语言 使用头文件封装 链表链栈顺序队列的基本操作
  7. numpy 数据类型转换
  8. 怎么建立局域网_小米频频发布新机 老手机应用文件怎么转移才够快?
  9. c语言函数声明中,static inline和extern inline的区别
  10. 笔记软件推荐:为知笔记