You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio发送签名时报Value <br无法转JSONObject错误如何解决

问题根源

你直接将byte[]类型的原始签名字节存入JSONObject,而JSON本身不支持原始字节数组类型,Volley序列化JSON时会生成不可预期的乱码内容,导致PHP端接收参数解析异常,输出了带<br>标签的HTML格式报错,Android端收到非JSON结构的返回就触发了类型转换错误。

修复方案

因为二进制内容无法直接在JSON中安全传输,所以需要通过Base64编码将字节转为可传输的字符串,两端分别做编解码处理即可:

1. Android端修改

将生成的signature字节数组转Base64字符串后再存入JSONObject:

// 生成signature字节数组后的代码修改
try {
    object2.put("id", data);
    object2.put("key", key);
    // 新增:字节转Base64字符串,NO_WRAP避免生成多余换行符
    String signatureStr = android.util.Base64.encodeToString(signature, android.util.Base64.NO_WRAP);
    object2.put("signature", signatureStr);
} catch (Exception e) {
    Log.d("ID_DEBUG","Error");
    e.printStackTrace();
}

2. PHP端修改

收到签名参数后先做Base64解码,还原为原始字节再做校验,不需要改动原有校验逻辑:

$key=$_POST['key'];
$signature=$_POST['signature'];
// 新增:Base64解码还原原始签名字节
$signature = base64_decode($signature);

$pubkeyid = openssl_pkey_get_public($key);
// 原有openssl_verify逻辑保持不变
注意事项
  • 确保Android端Base64编码使用NO_WRAP参数,避免自动添加的换行符导致两端内容不一致
  • 如果校验仍然失败,可以分别打印Android端编码后的签名串、PHP端收到的签名串,确认传输过程中内容没有被截断或篡改

内容的提问来源于stack exchange,提问作者Sierra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:24:04