Xero API传递'unitdp'参数生成发票的正确性咨询
Xero API创建发票时unitdp参数传参问题分析
你当前把
unitdp=4作为URL查询参数传递的方式不正确。Xero API的unitdp参数仅针对GET请求(比如查询发票列表、获取单张发票详情)生效,作用是控制接口返回数据的小数位数;而创建发票的POST请求不会读取这个URL参数,所以你的设置不会生效。要实现发票上的数值保留4位小数,正确的做法是在构造POST请求的
LineItems数据时,直接对数值做4位小数的格式化处理:// 示例:将原始数值格式化为4位小数 $rawAmount = 54.54545454; $formattedAmount = number_format($rawAmount, 4, '.', ''); // 把$formattedAmount赋值给LineItems里的UnitAmount等字段调整后的请求代码(移除无效的unitdp参数):
$curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'https://api.xero.com/api.xro/2.0/Invoices', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS =>'{ "Invoices":[ { "Type":"ACCREC", "Contact":{ "ContactID":"'.$session->CONTACT_ID.'" }, "LineItems":'.$lineItems.', "Date":"'.date("Y/m/d").'", "DueDate":"'.date("Y/m/d").'", "Status":"AUTHORISED", "Reference":"Stripe Payout" } ] }', CURLOPT_HTTPHEADER => array( 'Accept: application/json', 'Content-Type: application/json', 'Authorization: Bearer '.$session->XERO_ACCESS_TOKEN, ), ));
内容的提问来源于stack exchange,提问作者Romesh Fernando
相关产品推荐
相关产品推荐

