使用WHMCS API与curl添加订单时自定义字段未插入问题
WHMCS AddOrder API自定义字段无法写入的解决办法
你的代码中customfields参数的格式错误是导致字段值无法写入系统的核心问题,同时你也遗漏了ID为184的自定义字段值。
问题分析
WHMCS的AddOrder API对customfields参数的要求是:直接传入base64编码后的序列化数组,而不是将编码后的值再包裹进一个PHP数组中。你当前的写法array(base64_encode(...))会导致API无法正确解析字段数据。
修正后的代码
<?php // 初始化cURL会话 $ch = curl_init(); // 设置API参数 $postfields = array( 'action' => 'AddOrder', 'username' => 'username', 'password' => 'password', 'accesskey' => '12345678', 'clientid' => '456', 'pid' => '37', // 修正格式:直接传入base64编码的序列化数组,包含两个自定义字段 'customfields' => base64_encode(serialize(array( "183" => "Google", "184" => "你的第二个自定义字段值" ))), 'paymentmethod' => 'banktransfer', 'responsetype' => 'json', ); // 设置cURL选项 curl_setopt($ch, CURLOPT_URL, 'https://example.com/includes/api.php'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postfields)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 执行请求并获取响应 $response = curl_exec($ch); // 检查cURL错误 if (curl_errno($ch)) { echo 'cURL错误: ' . curl_error($ch); } // 关闭cURL会话 curl_close($ch); // 输出响应 echo $response; ?>
额外验证要点
- 确认ID183、184的自定义字段是与产品ID37关联的字段,如果是全局订单自定义字段,需核对WHMCS版本是否支持通过AddOrder API直接写入
- 检查API账号的权限,确保拥有
AddOrder接口的调用权限,以及自定义字段的读写权限 - 可以单独打印
base64_encode(serialize(...))的结果,在WHMCS后台的API测试工具中验证格式是否正确
内容的提问来源于stack exchange,提问作者Shamar Gray
相关产品推荐
相关产品推荐

