我在使用Novak Solutions Infusionsoft SDK获取用户信用卡信息时遇到了问题。两个系统都说我可以使用"Find by Field“查询,但是我似乎用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).除了Infusionsoft_CreditCard()对象之外,DataService似乎可以与所有对象一起工作。
发布于 2016-08-12 01:09:19
正如您在Infusionsoft API documentation中看到的,CreditCard.CardNumber字段是不可读的,只允许添加访问权限。
为了避免抛出错误,最简单的修复方法是传递第六个参数:$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
发布于 2016-11-23 22:18:14
尝试先创建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字段。
https://stackoverflow.com/questions/38877210
复制相似问题