【鸿蒙游戏技术分享 第46期】鸿蒙游戏接入IAP服务,端侧验签返回-1

游戏技术分享
发布于 2025-7-4 15:50
浏览
0收藏

关键词

IAP kit,鸿蒙,解码验签

问题描述

游戏集成了鸿蒙应用内支付服务,调用补单接口查询到掉单信息后,在端侧验签不通过,返回-1:

【鸿蒙游戏技术分享 第46期】鸿蒙游戏接入IAP服务,端侧验签返回-1-鸿蒙开发者社区

问题分析

检查appid和clientid的配置都正确。调试看解码之前的订单加密数据也是三段式的。将jws数据获取并打印出来,发现数据内部有“-“字符,解码代码中未过滤替换该字符,不支持该字符的解码,将代码添加后再尝试,返回成功,问题解决。

解码完整的代码如下:

public static decodeJwsObj(data: string): string {

const jws: string[] = data.split('.');

let result: string = '';

if (jws.length < 3) {

return result;

}

try {

const textDecoder = util.TextDecoder.create('utf-8', { ignoreBOM: true });

const base64 = new util.Base64Helper();

let payload = jws[1];

const centerLineRegex: RegExp = new RegExp('-', 'g');

const underLineRegex: RegExp = new RegExp('_', 'g');

payload = payload.replace(centerLineRegex, '+').replace(underLineRegex, '/');

const pad = payload.length % BASE64_PADDING_MOD;

if (pad) {

if (pad === BASE64_PADDING_INVALID) {

throw new Error('InvalidLengthError: Input base64 string is the wrong length to determine padding');

}

payload += new Array(BASE64_PADDING_MOD - pad + 1).join('=');

}

result = textDecoder.decodeToString(base64.decodeSync(payload));

} catch (err) {

Logger.error(TAG, `decodeJwsObj parse err: ${JSON.stringify(err)}`);

}

return result;

}


更多问题可关注:

鸿蒙游戏官方网站:​​https://developer.huawei.com/consumer/cn/games/​

公开课:​​华为开发者学堂​

分类
收藏
回复
举报
回复
    相关推荐