jwt - 接收消费请求通知并发送消费信息
问题描述
如果用户开始退款,苹果将向商家服务器发送 Consumption_Request 通知。当我尝试处理消费请求通知并调用发送消费信息接口将用户消费信息发送到苹果服务器时,我得到了两种形式的响应。
情况1 :
当我的参数错误时,响应如下:在此处输入图像描述
案例2:
当我的参数正确时,响应代码为 401,如下所示:在此处输入图像描述
我发现 401 的意思是 Unauthorized 。所以也许我的 JWT 检查失败了。
所以我的问题是你如何生成你的 JWT 令牌?有演示吗?以及如何获取您的密钥文件(.p8 文件。我怀疑我得到了错误的文件)?
解决方案
你如何生成你的 JWT 令牌?
这是 golang 的一个示例
func readPrivateKeyFromFile(keyFile string) (*ecdsa.PrivateKey, error) {
bytes, err := ioutil.ReadFile(keyFile)
if err != nil {
return nil, err
}
block, _ := pem.Decode(bytes)
if block == nil {
return nil, errors.New("appstore private key must be a valid .p8 PEM file")
}
key, err := x509.ParsePKCS8PrivateKey(block.Bytes)
if err != nil {
return nil, err
}
switch pk := key.(type) {
case *ecdsa.PrivateKey:
return pk, nil
default:
return nil, errors.New("appstore private key must be of type ecdsa.PrivateKey")
}
}
func generateToken(privateKey *ecdsa.PrivateKey) (string, error) {
token := jwt.NewWithClaims(jwt.SigningMethodES256, jwt.MapClaims{
"iss": "issuerId,
"isa": time.Now().Unix(),
"exp": expireTIme,
"aud": "appstoreconnect-v1",
"nonce": "uuid",
"bid": "bid",
})
token.Header["kid"] = "keyId"
token.Header["alg"] = "ES256"
token.Header["typ"] = "JWT"
return token.SignedString(privateKey)
}
你如何得到你的密钥文件(.p8 文件。我怀疑我得到了一个错误的文件)?
推荐阅读
- elasticsearch - 如何使用 query_string 同时匹配嵌套和非嵌套字段?
- python - Torchtext 与 Pytorch v1.10?
- ms-access - MS Access mid 和 instr 函数
- c++ - 如何在没有 pow()、函数或递归的情况下在 c/c++ 中使用幂函数
- r - 尝试使用 rvest 提交表单时出现卷曲错误
- assembly - mac OS 中的一步一步的 hello world
- python - Discord cogs 无法加载
- regex - dicebear api 在尝试指定 skinColor 时返回 400 错误代码
- java - 它说 Process Finished 但没有输出
- database - 从角度获取数据库数据