0

我在使用 Novak Solutions Infusionsoft SDK 获取用户信用卡信息时遇到问题。两个系统都说我可以使用“按字段查找”查询,但我似乎收到了 CC 对象的错误。

所以它看起来像这样:

Infusionsoft_DataService::findByField(new Infusionsoft_CreditCard(), 'ContactId', 9 (the id), null, 0, false, null);

回复:

Fatal error: Uncaught [NoFieldAccess]Access denied to field CreditCard.CardNumber Attempted: 3 time(s).

DataService似乎适用于除一个之外的所有对象Infusionsoft_CreditCard()

4

2 回答 2

0

尝试Infusionsoft_CreditCard先创建对象,然后在将其传递给查询之前删除受限制的字段!

$CC = new Infusionsoft_CreditCard();
$CC->removeRestrictedFields();

// Now continue with your former query and use the above object.
Infusionsoft_DataService::findByField( $CC, 'ContactId', 9, null, 0, false, null);

// Or use the query method.
Infusionsoft_DataService::query( $CC, array( 'ContactId' => 9 ) );

这应该返回除受限字段之外的所有 CC 字段。

于 2016-11-23T14:18:13.963 回答
0

正如您在Infusionsoft API 文档中看到的那样,CreditCard.CardNumber字段不可读,仅允许添加访问权限。

为了避免错误抛出,最简单的解决方法是传递第 6 个参数:array of $returnFields. 例如:

Infusionsoft_DataService::findByField(new Infusionsoft_CreditCard(), 'ContactId', 9, null, 0, ['Id', 'Last4', 'ContactId'], null);

对于另一个解决方案,请查看 Infusionsoft_DataService.load()方法实现,特别是第 101 到 105 行。

if(!$returnFields){ $object->removeRestrictedFields(); $returnFields = $object->getFields(); $object->addRestrictedFields(); }

这些行要么需要替换同一文件中的第 40 到 42 行(更改findByField()方法实现,我只是在这里提到,最好在此之后进一步重构代码,将这些行抽象为多种用途)。

或者在您的代码中使用它们(需要更新)以获得$requiredFields没有读取限制的字段,以便进一步将它们传递给Infusionsoft_DataService.findByField()如上所示的方法。

另一个有用的参考是Infusionsoft_CreditCard.removeRestrictedFields() 方法实现

于 2016-08-11T17:09:18.787 回答