搜索Authorize.net CIM记录

时间:2010-11-22 21:23:31

标签: e-commerce authorize.net

有没有人想出一种优雅的方法来搜索存储在Authorize.net的客户信息管理器(CIM)上的数据?

根据他们的XML指南,似乎根本没有任何搜索功能。这是一个巨大的短缺。

据我了解,CIM的卖点是商家不需要存储任何客户信息。它们仅为每个标识符存储唯一标识符,并根据需要检索数据。从PCI合规性的角度来看,这可能会很棒,但从灵活性的角度来看,它太可怕了。

像“向我展示来自德克萨斯州的所有订单”之类的简单搜索突然变得非常复杂。

你们其他人如何处理这个问题?

3 个答案:

答案 0 :(得分:2)

简短的回答是,你是对的:搜索CIM记录没有API支持。由于它的结构方式,没有简单的方法可以单独使用CIM来搜索所有记录。

以您描述的方式搜索它们:

  1. 使用getCustomerProfileIdsRequest获取您存储的所有客户资料ID。
  2. 对于该请求返回的每个CustomerProfileIds,请使用getCustomerProfileRequest获取该客户端的特定记录。
  3. 检查当时的每条记录,寻找您想要的标准,将相关记录存储在其他一些结构中;一个类,一个多维数组,一个ADO DataTable,无论如何。
  4. 是的,这太麻烦了。但它确实是唯一的出路。

    前面提到的报告API仅适用于交易,而不适用于客户信息管理器。

    请注意,您可以在记录交易时收集所需的数据类型,只要您不将其识别为个人身份,就可以将其存储在本地。

    例如,您可以对所有CIM客户配置文件记录运行请求,并将每个客户所在的状态存储在本地数据库中。

    如果您存储的只是状态,那么您可以使用这些记录,因为没有任何东西将状态与特定客户记录联系起来。展望未来,您可以在创建/更新客户资料记录的同时编写逻辑来更新本地状态记录存储。

    我意识到这可能不是你想听到的,但它们是休息。

答案 1 :(得分:1)

这可能非常缓慢且效率低下。但这是一种方法。请求所有客户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;
        }
    }

//现在茶已准备好,奶油,糖,饼干,你可能有搜索结果!

答案 2 :(得分:0)

CIM的主要目的是通过允许您将客户数据(包括信用卡)存储在其服务器上,然后仅使用唯一ID访问它们来解决PCI合规性问题。如果您想进行报告,您需要自己跟踪这类信息。由于存储客户地址等没有PCI合规性问题,因此自己这样做是很现实的。基本上,这是在项目设计阶段需要冲刷的东西。

他们有一个新的reporting API可能会为您提供此功能。如果不是,它很可能会在不久的将来提供,因为Authnet目前正在积极地为其API推出许多新功能。