IOS购买订阅通知信息解析说明Java

复制代码
1、IOS 接受通知信息,及对应参数信息 
JSONObject iosNotification(@RequestBody JSONObject request) 

2、获取加密需要解密的字符串

复制代码
String signedPayLoad= request.getString("signedPayload");

3、对JWT密文进行解析

复制代码
JSONObject jsonObject = ApplePayUtil.verifyAndGet(signedPayLoad);

4、对最近一次交易的详细信息进行解析

复制代码
ApplePayUtil.verifyAndGet(signedTransactionInfo);

5、对关于未来续订的信息进行解析

复制代码
ApplePayUtil.verifyAndGet(signedRenewalInfo);

6、解析密文方法:

复制代码
public static JSONObject verifyAndGet(String jws) throws CertificateException {
    DecodedJWT decodedJWT = JWT.decode(jws);
    // 拿到 header 中 x5c 数组中第一个
    String header = new String(java.util.Base64.getDecoder().decode(decodedJWT.getHeader()));
    String x5c = JSONObject.parseObject(header).getJSONArray("x5c").getString(0);
    // 获取公钥
    PublicKey publicKey = getPublicKeyByX5c(x5c);
    // 验证 token
    Algorithm algorithm = Algorithm.ECDSA256((ECPublicKey) publicKey, null);
    try {
        algorithm.verify(decodedJWT);
    } catch (SignatureVerificationException e) {
        throw new RuntimeException("签名验证失败");
    }
    // 解析数据
    return JSONObject.parseObject(new String(java.util.Base64.getDecoder().decode(decodedJWT.getPayload())));
}
相关推荐
Acrelhuang1 天前
工商业用电成本高?安科瑞液冷储能一体机一站式解供能难题-安科瑞黄安南
大数据·开发语言·人工智能·物联网·安全
hello 早上好1 天前
03_JVM(Java Virtual Machine)的生命周期
java·开发语言·jvm
沐雪架构师1 天前
LangChain 1.0 Agent开发实战指南
开发语言·javascript·langchain
tod1131 天前
力扣高频 SQL 50 题阶段总结(四)
开发语言·数据库·sql·算法·leetcode
2501_940007891 天前
Flutter for OpenHarmony三国杀攻略App实战 - 战绩记录功能实现
开发语言·javascript·flutter
naruto_lnq1 天前
C++中的桥接模式
开发语言·c++·算法
无限进步_1 天前
面试题 02.02. 返回倒数第 k 个节点 - 题解与详细分析
c语言·开发语言·数据结构·git·链表·github·visual studio
夕除1 天前
js--7
java
布谷歌1 天前
面试题整理
java·开发语言
爬山算法1 天前
Hibernate(74)如何在CQRS架构中使用Hibernate?
java·架构·hibernate