苹果应用内购 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.获取内购列表( ...
随机推荐
- 开源的 Web 框架哪个快?我在 GitHub 找到了答案
在开源这片自由的土地上,孕育了太多开源 Web 框架.我在 GitHub 上搜了一下"web framework"关键字显示有 56000+ 匹配的开源项目,它们百花齐放各有特色, ...
- 剑指offer(一)——二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- adb 常用命令大全(7)- 其他实用功能
屏幕截图 adb exec-out screencap -p > sc.pn 截图保存到电脑执行该命令的目录下 如果指定文件名以 .png 结尾时可以省略 -p 参数 注意 如果 adb 版本较 ...
- Markdown时序图--基础语法
时序图 序列图是一种交互图,它显示了流程以何种顺序相互操作. Mermaid可以渲染序列图,如下定义. sequenceDiagram Alice->>John:Message Hel ...
- HearthbuddyHelper已经开源
https://github.com/V-arc/HearthbuddyHelper 只是为了稳定,没耗时多久写的一个中控,只是在逐渐堆加,并未进行重构. 通过写这个感受到自己对异步和wpf的理解还有 ...
- 【第十一篇】- Git Gitee之Spring Cloud直播商城 b2b2c电子商务技术总结
Git Gitee 大家都知道国内访问 Github 速度比较慢,很影响我们的使用. 如果你希望体验到 Git 飞一般的速度,可以使用国内的 Git 托管服务--Gitee(gitee.com). G ...
- 使用PHP获取图像文件的EXIF信息
在我们拍的照片以及各类图像文件中,其实还保存着一些信息是无法直观看到的,比如手机拍照时会有的位置信息,图片的类型.大小等,这些信息就称为 EXIF 信息.一般 JPG . TIFF 这类的图片文件都会 ...
- 简单学习PHP中的层次性能分析器
在 PHP 中,我们需要进行调试的时候,一般都会使用 memory_get_usage() 看下内存的使用情况.但如果想看当前的脚本 CPU 的占用情况就没有什么现成的函数了.不过,PHP 也为我们提 ...
- 送你一个Python 数据排序的好方法
摘要:学习 Pandas排序方法是开始或练习使用 Python进行基本数据分析的好方法.最常见的数据分析是使用电子表格.SQL或pandas 完成的.使用 Pandas 的一大优点是它可以处理大量数据 ...
- 51nod1667-概率好题【容斥,组合数学】
正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1667 题目大意 两个人. 第一个人有\(k_1\)个集合,第\(i\)个 ...