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字段可以作为价格的判断,需要与客户端开发所提交的加个保持一致。
IOS 内付 asp.net mvc 服务器端验证的更多相关文章
- ASP.NET MVC 2 验证
来源:http://www.cnblogs.com/jhxk/articles/2612885.html 只为把自己觉的好的存起来 对用户输入的验证以及强制业务规则/逻辑是大多数web应用的核心需求 ...
- ASP.NET MVC Model验证(二)
ASP.NET MVC Model验证(二) 前言 上篇内容演示了一个简单的Model验证示例,然后在文中提及到Model验证在MVC框架中默认所处的位置在哪?本篇就是来解决这个问题的,并且会描述一下 ...
- [ASP.NET MVC2 系列] ASP.Net MVC教程之《在15分钟内用ASP.Net MVC创建一个电影数据库应用程序》
[ASP.NET MVC2 系列] [ASP.NET MVC2 系列] ASP.Net MVC教程之<在15分钟内用ASP.Net MVC创建一个电影数据库应用程序> ...
- ASP.NET MVC Model验证(五)
ASP.NET MVC Model验证(五) 前言 上篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现, 然而在MVC框架中还给我们提供了其它 ...
- ASP.NET MVC Model验证(四)
ASP.NET MVC Model验证(四) 前言 本篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现,前者是Model验证提供程序,而Mod ...
- ASP.NET MVC Model验证(三)
ASP.NET MVC Model验证(三) 前言 上篇中说到在MVC框架中默认的Model验证是在哪里验证的,还讲到DefaultModelBinder类型的内部执行的示意图,让大家可以看到默认的M ...
- ASP.NET MVC Model验证(一)
ASP.NET MVC Model验证(一) 前言 前面对于Model绑定部分作了大概的介绍,从这章开始就进入Model验证部分了,这个实际上是一个系列的Model的绑定往往都是伴随着验证的.也会在后 ...
- ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)
在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图.但是首先将修改点代码,使得发布日期属性(ReleaseDate)看上去更好.打开Models \ Movie ...
- 【MVC】ASP.NET MVC Forms验证机制
http://www.cnblogs.com/bomo/p/3309766.html 随笔 - 121 文章 - 0 评论 - 92 [MVC]ASP.NET MVC Forms验证机制 ASP. ...
- 通过扩展改善ASP.NET MVC的验证机制[实现篇]
原文:通过扩展改善ASP.NET MVC的验证机制[实现篇] 在<使用篇>中我们谈到扩展的验证编程方式,并且演示了本解决方案的三大特性:消息提供机制的分离.多语言的支持和多验证规则的支持, ...
随机推荐
- AOP中动态代理详解
动态代理概述 什么是代理 代理模式(Proxy pattern): 为另一个对象提供一个替身或占位符以控制对这个对象的访问 什么是动态代理? 动态代理就是,在程序运行期,创建目标对象的代理对象,并对目 ...
- 加入security+jwt安全策略
Pom中引入 <!-- security --> <dependency> <groupId>org.springframework.boot</groupI ...
- 出现io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1的原因及解决办法
错误信息 在使用Netty构建Server服务器的时候,之前用得好好的,最近整理了一下就出现了以下错误: WARN (AbstractChannelHandlerContext.java:294)- ...
- 【FAQ】HarmonyOS SDK 闭源开放能力 — Vision Kit(2)
1.问题描述: 人脸活体检测返回上一页App由沉浸式变为非沉浸式多了上下安全区域. 解决方案: 检测结束后需要自己去设置沉浸式配置. 2.问题描述: Vision Kit文字识别是本地识别,还是上传至 ...
- Qt编写物联网管理平台37-逻辑设计
一.前言 本系统的逻辑设计是个人认为做过的系统中最好的,一个系统支持多个通信端口,每个通信端口都可选不同的通信协议,一个通信端口可以接255个控制器,相当于主设备,一个控制器可以接255个探测器,相当 ...
- B站千万级长连接实时消息系统的架构设计与实践
本文由哔哩哔哩资深开发工程师黄山成分享,原题"千万长连消息系统",本文进行了排版和内容优化等. 1.引言 在当今数字娱乐时代,弹幕已经成为直播平台上不可或缺的互动元素之一. 用户通 ...
- 关于存入sessionStorage中boolean值拿出来为字符串
上面是html部分,然后定义了变量 定义方法 在mounted中获取,然后刷新页面,打印类型为字符串 解决办法
- 一篇解决编译原理大作业,基于Flex、Bison设计编译器(含语法分析树和符号表)
1.工具简单介绍 Flex 和 Bison 是编译器开发中常用的两个工具,分别用于生成词法分析器和语法分析器.它们通常一起使用,共同完成源代码的词法分析和语法分析工作. Flex: Flex通过读取一 ...
- 一点区块链资料-copy
1. 场景描述 (1)今天找资料,无意中看到15年底-16年初弄的关于区块链的资料,当时写了个交流汇报区块链的ppt,感觉挺好的,共享下,希望能帮助朋友们理解区块链. (2)背景:15年底,老板从朋友 ...
- Linux:GPU
什么是GPU? CPU和GPU之所以大不相同,是由于其设计目标的不同,它们分别针对了两种不同的应用场景.CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处 ...