前言:先说IAP的事,原本我们的支付功能需要S2S验证收据的真实性。但是以前的收据[appStoreReceiptURL]在>StoreKit2中无法获取。
查阅了现在收据原来是在JWS中,可是发现这个JWS我们后台验证还没开始实现(#_#)。
没办法,一起找啊找,各种关键词: StoreKit2 verify AppleDeveloper Forums...丢人就不念了。
直到遇见了这篇文章 转载一下,希望也可以解决你现在遇到的问题。
注:这篇文章是验证服务端S2S的JWS,并不是验证SDK传过来的JWS(有好的方式请留言)
正文开始
App Store Server API – 是一种新的 REST API,可让您获取有关所有客户应用内购买的信息。与旧的 verifyReceipt 端点的主要区别在于,您不再需要向服务器发送大型 base64 收据。`
检索信息是使用原始事务 ID 完成的,请求和响应都使用 JWT 和从 App Store Connect 生成的 API 密钥进行签名。
生成应用内购买 API 密钥
为应用内购买生成密钥与生成订阅密钥相同——该选项卡已被简单地重命名:【PS: 如果看不到这个选项,说明你的权限不够高】
要为应用内购买生成 API 密钥,请访问:
- 用户和访问
- 钥匙
- 在应用程序内购买
下载密钥并将其保存到安全的地方。请注意,您只能下载一次密钥。
发行人编号
要创建请求,您还需要颁发者 ID,可以在Keys > App Store Connect API选项卡中找到它。如果页面上缺少此字段,您可能需要创建您的第一个 App Store Connect API 密钥,即使您不会使用它。您也可以尝试从所有者帐户签名。
创建 JWT
JSON Web Token (JWT) 使用开放标准RFC 7519,该标准定义了一种安全传输信息的方式。
生成令牌使用 3 个步骤完成:
1. 创建 JWT 标头
1. 创建 JWT 负载
1. 签署 JWT
复制代码
Header 包含三个字段:
{
"alg": "ES256",
"kid": "2X9R4HXF34",
"typ": "JWT"
}
复制代码
其中alg
和typ
– 静态值,以及kid
– 是您的密钥 ID。
JWT 负载如下所示:
{
"iss": "57246542-96fe-1a63e053-0824d011072a",
"iat": 1623085200,
"exp": 1623086400,
"aud": "appstoreconnect-v1",
"nonce": "nonce6-12b482e82" 0242ac130003" ,
“中标”: “com.