求教,最近在跟客戶串接api的時候,對方傳來的資料為 0.000, 但php json_encode(0.000) 後的值 會是0,有找到相關的參數
json_encode(0.000, JSON_PRESERVE_ZERO_FRACTION)後的值會是 0.0,
不知有何方法可以讓編碼後的值依然是 0.000, 對方說他那邊不能改要我這邊想辦法。
主要是會依對方那邊傳來的time+request body去做 hash 所以我這邊也沒辦法去將0.000改成 0 再 json_encode 因為hash值會不一樣,交易就會失敗。
補充一下,因為會確認雙方的hash值一致,所以我這邊是無法將 0.000 改為字串去做json_encode 因為最後出來的hash值會與對方不一致。
<?php
$v=0.0000;
echo json_encode($v).'</br>';//0
echo json_encode($v, JSON_PRESERVE_ZERO_FRACTION).'</br>';//0.0
再補充一下程式碼,字串與浮點數json_encode後所取的md5是不一樣的,所以在我這邊轉字串也不可行。
<?php
$aa='0.0000';
$bb=0.0000;
echo md5(json_encode($aa)).'</br>';//aaf4b6b29517563a3c5fc7f90c6a57ee
echo md5(json_encode($bb)).'</br>';//cfcd208495d565ef66e7dff9f98764da
真的為了配合對方的話,我想到的是這樣
<?php
$symbol='###';
$v="{$symbol}0.000{$symbol}";
echo preg_replace("/\"$symbol|$symbol\"/" , '', json_encode($v));
客戶呼叫我們的 API,這個 API 需要客戶傳來:
user=1&num=2.000
這種。json 本身可以自由換行、加空格、object key 沒有順序等
這種API我會請對方直接傳:
這樣可以避免客戶 json 寫法不同的問題
大大的理解是對的,但主要造成問題的點是 json_encode 對於 0.000 會解析成 0 ,若值是 0.001都是沒問題的。
我想請客戶把 預設的 0.000 改成 0.0 或是 0 都是被拒決,感覺很無言。
我覺得最討厭的是對方完全不想改code,造成hash錯誤的欄位還是可刪除的欄位,串接時根本用不到。