我很困惑。使用a PHP wrapper使用Cardano API(v1)。
createNewTransaction($source, $destination, $spendingPassword)
函数需要数组形式的参数:
// source of funds (array)
$source = array(
'accountIndex' => $wallet_idx,
'walletId' => $wallet_id
);
// destination for funds (array)
$destination = array(
'address' => $banker,
'amount' => $lovelace
);
// spending pass
$spendingPassword = get_user_meta('1', 'spending_pass', true);
// transaction
$client->createNewTransaction($source, $destination, $spendingPassword);
因此,然后我从API返回了此错误:
Array([状态] =>错误[诊断] => Array( [validationError] => $中的错误:解析构造函数付款时 Cardano.Wallet.API.V1.Types.Payment类型的预期对象,但得到了 数组。 )[message] => JSONValidationFailed)
然后,我想到了如何将数组变成对象的想法,这将解决我的问题。所以我这样做:
$o_source = (object) $source;
$o_destination = (object) $destination;
,然后将其发送回API,以查看交易是否能够通过,但出现另一个错误:
致命错误:未捕获的TypeError:参数1传递给 Cardano :: createNewTransaction()必须为数组类型object 给...
所以,现在我很困惑,我以为我最初是向它发送一个数组,但是后来它说它想要一个对象。我不明白!
请帮助!
答案 0 :(得分:1)
The code from the linked library类似于:
public function createNewTransaction(
array $source,
array $destination,
string $spendingPassword
): array {
$groupPolicy = 'OptimizeForSecurity';
return self::jsonDecode($this->post(
'/api/v1/transactions' .
'?source=' . $source .
'?destination=' . $destination .
'?groupingPolicy=' . $groupPolicy .
'?spendingPassword=' . $spendingPassword
), true);
}
如果运行此代码,则$source
和$destination
将从数组强制转换为字符串“ Array”。 API正是在抱怨这个问题,它可能期望字符串“ Array”以外的其他内容作为source
参数的值。
我建议您寻找另一个库,或者自己实现API调用,因为该库没有机会在当前状态下正常工作。