有没有人想出一个优雅的方法来搜索存储在Authorize.net的客户信息管理器(CIM)上的数据?
根据他们的XML指南,似乎根本没有任何搜索功能。这是一个巨大的缺陷。
据我所知,CIM的卖点是商家不需要存储任何客户信息。它们只是为每个对象存储一个唯一的标识符,并根据需要检索数据。从PCI遵从性的角度来看,这可能是很好的,但从灵活性的角度来看,这是可怕的。
像“显示德克萨斯的所有订单”这样的简单搜索突然变得非常复杂。
你们其他人是如何处理这个问题的?
发布于 2010-11-29 02:40:41
简短的答案是,您是正确的:没有API支持搜索CIM记录。由于它的结构方式,没有一种简单的方法可以单独使用CIM来搜索所有记录。
以您所描述的方式搜索它们:
DataTable等等。
是的,那是很繁重的。但从字面上看,这是唯一的继续下去的方法。
前面提到的报告API仅适用于事务,而不适用于客户信息管理器。
请注意,您可以在记录交易时收集您想要的数据类型,并且只要您不将其设置为个人可识别的,您就可以将其存储在本地。
例如,您可以对所有CIM客户配置文件记录运行请求,并将每个客户所在的州存储在本地数据库中。
如果您所存储的都是状态,那么您可以使用这些记录,因为没有任何东西将状态与特定的客户记录联系起来。接下来,您可以编写逻辑,在创建/更新客户配置文件记录的同时更新本地状态记录存储。
我知道这可能不是你想听的,但这就是突破口。
发布于 2011-02-19 01:58:21
这很可能是非常缓慢和低效的。但这里有一种方法。请求一个包含所有客户Id的数组,然后检查每个客户Id对应的字段...在我的例子中,我希望在PHP中有一个通过电子邮件搜索的功能:
$cimData = new AuthorizeNetCIM;
$profileIds = $cimData->getCustomerProfileIds();
$profileIds = $cimData->getCustomerProfileIds();
$array = $profileIds->xpath('ids');
$authnet_cid = null;
/*
this seems ridiculously inefficient...
gotta be a better way to lookup a customer based on email
*/
foreach ( $array[0]->numericString as $ids ) { // put all the id's into an array
$response = $cimData->getCustomerProfile($ids); //search an individual id for a match
//put the kettle on
if ($response->xml->profile->email == $email) {
$authnet_cid = $ids;
$oldCustomerProfile = $response->xml->profile;
}
}//现在茶已经准备好了,奶油,糖,饼干,你可能有你的搜索结果了!
发布于 2010-11-24 05:52:50
CIM的主要目的是通过允许您将客户数据(包括信用卡)存储在客户的服务器上,然后仅使用唯一的ID访问它们,从而使PCI合规性问题脱离您的控制。如果您想要进行报告,您将需要自己跟踪此类信息。由于在存储客户地址等方面不存在PCI合规性问题,因此自己做这件事是现实的。基本上,这是一种在项目设计阶段需要淘汰的东西。
他们确实有一个新的reporting API,可以为你提供这个功能。如果没有,它很有可能在不久的将来提供,因为Authnet目前正在积极地将许多新功能推出到他们的API中。
https://stackoverflow.com/questions/4250360
复制相似问题