.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;}}}
.NET C# IOS内购支付功能相关推荐
- 【iOS内购支付】Uniapp拉起苹果内购支付注意事项、实现步骤以及踩过的坑(手把手教程)
前言 Hello!又是很长时间没有写博客了,因为最近又开始从事新项目,也是第一次接触关于uniapp开发原生IOS应用的项目,在这里做一些关于我在项目中使用苹果内购支付所实现的方式以及要注意的事项,希 ...
- iOS——内购支付详解后台操作(一)
一.思维导图 二.重点总结: 1.获取内购列表(从App内读取或从自己服务器读取) 2.App Store请求可用的内购列表 3.向用户展示内购列表 4.用户选择了内购列表,再发个购买请求,收到购买完 ...
- uniapp ios内购支付问题(返回订单信息失败)
先上代码 export default {components: {pHeader},data() {return {iap: null, // 支付通道ids: ['qiming100', 'mei ...
- ios内购php验证码,PHP (Laravel) 实现 iOS 内购服务端验证
/** * @Author woann * @param Request $request * @return \Illuminate\Http\JsonResponse * @des ios内购支付 ...
- ios内购返回html,iOS内购掉单问题处理方法
iOS内购提供了两种模式,一种是单机(本地验证)模式,另一种是服务器端验证模式. 单机验证模式:适用于单机应用,安全性低,数据易被篡改. 服务器验证模式:应用服务器提交支付票据到苹果服务器验证,安全性 ...
- iOS内购-防越狱破解刷单
---------------------------2018.10.16更新--------------------------- 最近我们公司丢单率上涨,尤其是10月份比9月份来说丢单率翻了3倍, ...
- php++内购续期订阅,iOS内购:自动续期订阅总结
前言:内购类型有四种:消耗型商品,非消耗型商品,非续期订阅,自动续期订阅. 顾名思义,从中最有难度的就是自动续期订阅的实现,开通自动续期订阅后,订阅会员的处理将会遇到如下问题:自动订阅的到期继续自动订 ...
- iOS 内购项目的App Store推广
iOS 11以后的用户可以在App Store内的下载页面内直接购买应用的内购商品,这项功能苹果称作做Promoting In-App Purchases,如果你的App需要在App Store推广自 ...
- iOS 内购的最新讲解
来源:简书 - IIronMan 链接:http://www.jianshu.com/p/4f8a854ff427(点击尾部阅读原文前往) 一.总说内购的内容 1.协议.税务和银行业务 信息填写 2. ...
最新文章
- [JavaScript] JavaScript数组挖掘,不只是讲数组哟(2)
- Python培训基础教程都教哪些
- AlphaGo Zero的伟大与局限——ResNet作者、旷视研究院院长孙剑深度评述
- AttributeError: module ‘cv2.cv2‘ has no attribute ‘xfeatures2d‘解决方法
- spark 随机森林算法案例实战
- 嗅探(被动嗅探)与ARP欺骗(主动嗅探)详解
- Spring Beans 初始化流程分析
- 哇!Flash影片剪辑导出静止的问题被解决了!
- 代码 or 指令,浅析ARM架构下的函数的调用过程
- java 情况浏览器缓存_JavaWeb禁止浏览器缓存当前Web页面的方法
- css matrix矩阵,矩阵 | matrix() (Transforms) - CSS 中文开发手册 - Break易站
- mysql sjis 校对乱码_MySQL乱码问题深层分析
- 计算机开放电子书 2017 归档
- 【彩虹代刷v5.8】去除后门增加多套模板修复多处BUG[全开源免授权]
- c primer plus 第6版 中文版pdf_内功实力再精进 试驾上汽大通V80 PLUS城市版
- A64 base instruction -- orr
- Cocos 2dx - lua Action动作方法
- 布同:统计英文单词的个数
- 一个善意的谎言拯救一个团队 (又叫沙漠中的指南针)
- 慕课网-安卓攻城狮视频学习及练习(一)
热门文章
- AI降噪是什么意思?AI降噪在音视频通讯场景的应用
- python3.6安装tkinter_在Ubuntu上的python3.6中安装tkinter
- 中正平和的机器人学笔记——1. 机械臂正运动学(附MATLAB代码)
- 【R】曾惊艳全世界的“中国乐高”!清华建筑师都忍不住夸,全榫卯造“600年福殿”!
- [BZOJ1117]救火站gas
- 苹果闪照如何第二次查看_苹果手机面容提示移高一点移低一点怎么解决?-匠心e修...
- eNSP中开启防火墙web管理
- html打包apk指定参数,uni-app 打包 H5 单页面应用 渠道参数的传递和获取 如: index.html?channelid=icefrog...
- 如何设计实现H5营销页面搭建系统
- 随笔 - 《阿里巴巴产品经理面试之必问列表》- 20201210