我在使用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()
之外的所有对象。
答案 0 :(得分:0)
正如您在Infusionsoft API documentation中看到的那样,CreditCard.CardNumber
字段不可读,只允许添加访问权。
为避免错误抛出,最简单的解决方法是传递第6个参数:$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()
method implementation
答案 1 :(得分: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字段。