网站集成True Money支付:获取amount变量及非法字符串偏移问题
解决True Money支付集成中的'Illegal string offset'错误与变量获取问题
Alright, let's break down your problem and fix that annoying 'Illegal string offset' error, plus get you properly accessing the amount variable from the API response.
错误原因分析
这个错误出现的核心原因是:你把字符串当成数组来访问了。从你描述的返回结果来看,$wallet->Topup()方法返回的是一段JSON格式的字符串(比如{ "amount": "", "serviceFee": "", ... }),而不是已经解码好的PHP数组。当你试图用数组下标语法去访问这段字符串时,PHP就会抛出'Illegal string offset'错误。
分步解决方案
我们来调整代码,正确处理API返回并获取目标变量:
安全获取访问令牌并校验
先确保你获取的令牌是有效的,避免后续调用因为令牌问题返回异常:$tokenResponse = json_decode($wallet->GetToken(), true); if (!isset($tokenResponse['data']['accessToken'])) { echo "错误:无法获取有效的访问令牌"; // 这里可以添加日志记录或终止脚本等错误处理逻辑 exit; } $token = $tokenResponse['data']['accessToken'];解码Topup返回的JSON字符串
捕获Topup的返回结果,验证并解码为PHP数组,再安全提取amount变量:// 获取Topup接口的原始返回 $topupRawResponse = $wallet->Topup($codeTrue, $token); // 将JSON字符串解码为PHP关联数组 $topupData = json_decode($topupRawResponse, true); // 检查解码是否成功 if (json_last_error() !== JSON_ERROR_NONE) { echo "解码Topup响应失败:" . json_last_error_msg(); exit; } // 安全获取amount变量(使用null合并运算符避免未定义索引错误) $amount = $topupData['amount'] ?? '未返回金额数据'; echo "金额:" . $amount; // 现在可以使用$amount继续执行你的后续脚本逻辑额外优化建议
- 查看
class.truewallet.php源码:确认Topup()方法是否支持直接返回解码后的数组(部分类库会提供参数开关控制返回格式)。 - 处理空值情况:测试环境中返回的
amount为空字符串是正常的,可参考True Money官方API文档确认正式环境下该字段的返回时机与规则。 - 增加API异常处理:当API返回错误信息(非有效JSON)时,比如令牌过期、支付码无效等,添加判断逻辑避免脚本崩溃。
- 查看
内容的提问来源于stack exchange,提问作者Souss
相关产品推荐
相关产品推荐

