
【鸿蒙游戏技术分享 第46期】鸿蒙游戏接入IAP服务,端侧验签返回-1
关键词
IAP kit,鸿蒙,解码验签
问题描述
游戏集成了鸿蒙应用内支付服务,调用补单接口查询到掉单信息后,在端侧验签不通过,返回-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/
公开课:华为开发者学堂
