苹果应用内购 ios 开发者根据用户提供的邮件中的订单号查看该订单是否支付成功
苹果应用内购 ios 开发者根据用户提供的邮件中的订单号查看该订单是否支付成功
这是苹果wwdc2021 推出的新功能
参考官网链接
App Store Server API | Apple Developer Documentation
https://developer.apple.com/documentation/appstoreserverapi
先要通过 JWT签名
https://developer.apple.com/documentation/appstoreserverapi/generating_tokens_for_api_requests
作者:Yanlongli <ahlyl94@gmail.com>
来源:博客园 苹果应用内购 ios 开发者根据用户提供的邮件中的订单号查看该订单是否支付成功 - IM小白 - 博客园 (cnblogs.com)
参考以下PHP伪代码
$privateKey = <<<key
-----BEGIN PRIVATE KEY-----
xxxx
-----END PRIVATE KEY-----
key;
$payload = [
'iss' => 'xxxxxx',
"iat" => time() - 10,
"exp" => time() + 3590,
"aud" => "appstoreconnect-v1",
"nonce" => "随机字符串",
"bid" => "xxx.xxx.xxx.xxx",
];
$auth_token = JWT::encode($payload, $privateKey, 'ES256', '私钥id');
iss 通过 https://appstoreconnect.apple.com/access/api 获得,操作路径是 用户和访问、密钥、App Store Connect API、Issuer ID
bid 是应用的 bundleid
iat 当前时间戳,到秒的,-10 是测试发现,接口直接请求时有几率失败,应该时本地时间和苹果服务器时间有误差导致失败,减去10秒不影响请求,能忽略时间差。
exp 过期时间戳,在这个时间之后,该签名会失效,苹果文档给的是60分钟,应该可以更久,看你需求
nonce 随机字符串 6edffe66-b482-11eb-8529-0242ac130003 这是苹果给的格式,我也这么生成的,没测试是否任意随机字符串都可以
私钥id 通过在上面相同网址中,密钥页面,创建一个密钥,或者用已存在的密钥,列表会显示密钥id,注意该私钥仅允许下载一次,所以你要保存好,忘了的话就要创建一个新的密钥。
//
// 签名后通过get请求
https://api.storekit.itunes.apple.com/inApps/v1/lookup/{tradeNo}
headers 添加上认证方式
Authorization: Bearer {auth_token}
{tradeNo} 替换成用户邮件收到的订单号
{auth_token} 替换成上面伪代码的签名
请求成功会返回
{
"status": 0,
"signedTransactions": [
"header.payload.sign"
]
}
signedTransactions 的格式是 头.载体.签名
如果有需要自行处理签名验证,这里不验证了
将 signedTransactions 按 . 点分割,获取载体内容 payload,再将这个payload字符串base64解码,即可得到该订单的内容,参考如下
{
"transactionId": "xxx", // 本次交易号
"originalTransactionId": "xxx", // 第一次交易号
"webOrderLineItemId": "xxx",
"bundleId": "com.xx.xx", // 应用的 bundleid
"productId": "com.xx.xx.xxx", // 套餐商品的唯一标识key
"subscriptionGroupIdentifier": "xx", // 订阅组id
"purchaseDate": 1631718985000, // 支付时间
"originalPurchaseDate": 1599242074000, // 首次支付时间
"expiresDate": 1634310985000, // 过期时间,订阅有效
"quantity": 1, // 数量
"type": "Auto-Renewable Subscription", //类型 非订阅的是 Non-Renewing Subscription
"inAppOwnershipType": "PURCHASED", //
"signedDate": 1634625372402 // 请求响应的签名时间
}
其他api
https://api.storekit-sandbox.itunes.apple.com/inApps/v1/history/{originalTransactionId}
https://api.storekit.itunes.apple.com/inApps/v1/subscriptions/{originalTransactionId}
苹果应用内购 ios 开发者根据用户提供的邮件中的订单号查看该订单是否支付成功的更多相关文章
- JAVA项目之苹果IAP内购JAVA服务器验证流程详解
1.前言 本博客是经历过多个项目检验的, 绝对真实, 适应于对苹果iap内购稍微有些了解的JAVA开发人员, 认真看, 定能完美解决苹果内购问题. 苹果IAP内购支付实际上是"将客户端支 ...
- iOS: 实现苹果的内购
一.介绍: 在个人开发的app上架到AppStore后,苹果官方允许我们将自己的app在appstore上进行付费使用,也就是所谓的内购.其中,支付方式规定的必须是苹果的支付方式:应用内支付. 二.流 ...
- 苹果APP内购客户付款成功,没收到相应虚拟产品的解决办法
一.引导用户走申请苹果的退款 1.告知用户新版本可以使用支付宝.微信支付,更划算 2.苹果可申请90天以内的退款,一般情况申请后48小时内就有反馈. 参考链接 https://jingyan.baid ...
- iOS:苹果内购实践
iOS 苹果的内购 一.介绍 苹果规定,凡是虚拟的物品(例如:QQ音乐的乐币)进行交易时,都必须走苹果的内购通道,苹果要收取大约30%的抽成,所以不允许接入第三方的支付方式(微信.支付宝等),当然开发 ...
- iOS开发苹果内购的介绍与实现
1.iOS开发苹果内购的介绍 1.1 介绍 苹果规定,凡是虚拟的物品(例如:QQ音乐的乐币)进行交易时,都必须走苹果的内购通道,苹果要收取大约30%的抽成,所以不允许接入第三方的支付方式(微信.支付宝 ...
- iOS应用内支付(内购)的个人开发过程及坑!
本文会给大家详细介绍iOS内购,这是本人16年5月底的开发过程,希望对看完此篇文章的人有所帮助. 本文基于XcodeVersion 7.3 (7D175)版本,手机是iPhone 6,9.3系统. 部 ...
- iOS开发支付篇-内购(IAP)
一,前言 经典文章参考: . http://yimouleng.com/2015/12/17/ios-AppStore/ 内购流程 . http://www.jianshu.com/p/b199a46 ...
- iOS 内购讲解
一.总说内购的内容 1.协议.税务和银行业务 信息填写 2.内购商品的添加 3.添加沙盒测试账号 4.内购代码的具体实现 5.内购的注意事项 二.协议.税务和银行业务 信息填写 2.1.协议.税务和银 ...
- iOS开发支付篇——内购(IAP)详解
1 <em>内购所需要的资料整理总结,史上最完整的,哈哈哈哈哈哈</em> 思维导图 重点总结: 1 2 3 4 5 6 7 8 9 10 11 12 13 1.获取内购列表( ...
随机推荐
- 分布式ID生成器及redis,etcd分布式锁
分布式id生成器 有时我们需要能够生成类似MySQL自增ID这样不断增大,同时又不会重复的id.以支持业务中的高并发场景.比较典型的,电商促销时,短时间内会有大量的订单涌入到系统,比如每秒10w+.明 ...
- Python之win32模块
如果想在Windows操作系统上使用Python去做一些自动化工作,pywin32模块常常会被用到,它方便了我们调用Windows API. 安装及使用 通过命令pip install pywin32 ...
- JS_DOM操作之常用事件
1 - onload 事件:加载完成后立即执行 <!DOCTYPE html> <html lang="en"> <head> <meta ...
- WinForm控件常用设置(转)
本来想自己整理一份,但找到了一份挺全的,就直接用到直接找吧 A0 ---- 通用A1 ---- Form 类A2 ---- Control 类A3 ---- MessageBox 类A4 ---- B ...
- IDEA创建Maven项目做Java Web时无WEB-INF/classes的问题
昨天开始学习Java Web中的Servlet,学到用IntelliJ IDEA创建Java Web项目时,跟着课程上老师的步骤一步步做,却发现运行时Servlet找不到.坑爹的是,练习建项目时,一模 ...
- 口护万亿市场杀出的实力派 Oclean欧可林
撰文 |懂懂 编辑 | 秦言 来源:懂懂笔记 在"青年必去的电影节"上,发现了一个跟他们打成一片的智能护齿"新星". 25日,备受关注的第15届FIRST青年电 ...
- 30分钟学会Docker里面开启k8s(Kubernetes)登录仪表盘(图文讲解)
前言 我们之前搭建了第一个docker项目: windows环境30分钟从0开始快速搭建第一个docker项目(带数据库交互):https://www.cnblogs.com/xiongze520/p ...
- MobaXterm - 渗透之旅的终端神器
一.背景 1.SSH概念 如果想要连接Linux服务器来进行文件之间的传送,那就需要一个Secure Shell软件(简称SSH的)来完成.从概念上来讲,SSH其实是一个网络协议,允许通过网络连接到L ...
- Windows下安装程序时提示未安装Microsoft Net FrameWork 2.0
问题描述 安装程序时碰到如下: 现在基本都是用win7.win10系统,缺少环境大多数都是因为系统没有启用. 解决方法 控制面板 - 程序 - 启用或关闭Windows功能 - 把第一项'NET Fr ...
- pip国内源设置
在目录 C:\Users\Administrator下新建pip目录 C:\Users\Administrator\pip 添加 pip.ini 文件 pip.ini内容设置为 [global] in ...