如何在Authorize.Net中使用CIM获取客户资料?

时间:2013-09-13 12:57:24

标签: php payment-gateway payment authorize.net authorize.net-cim

我在CIM(客户信息经理)工作,我使用CIM功能创建了客户档案。但我希望使用客户ID而不是客户资料ID来获取客户资料。

 $cim = new AuthnetCIM('***MASKED***', '***MASKED***', AuthnetCIM::USE_DEVELOPMENT_SERVER);
 $cim->setParameter('email', 'fakeemail@example.com');
 $cim->setParameter('description', 'Profile for Joe Smith'); // Optional
 $cim->setParameter('merchantCustomerId', '7789812');

 //create profile function 
 $ss=$cim->createCustomerProfile();

 //and get profile by..
 $profile_id = $cim->getProfileID();

2 个答案:

答案 0 :(得分:3)

你做不到。您只能使用配置文件ID获取配置文件。这意味着您需要将该ID存储在数据库中并将其与客户的记录相关联,因此无论何时您需要获取其个人资料,您都知道他们的个人资料ID是什么。

答案 1 :(得分:0)

实际上,如果你必须这样做,但我仍然建议尽可能存储它,但这种替代方案可能会有所帮助。

Authorize.Net通过复合密钥(商家客户ID,电子邮件和说明)定义唯一的客户资料,因此您必须确保这是唯一的。如果您尝试再次创建相同的复合键,CreateCustomerProfile(..)API方法将强制执行唯一性并返回错误。但是,此响应中的消息将包含冲突的客户配置文件ID,并且由于您的组合密钥是唯一的,并且Authorize.Net强制执行此组合密钥的唯一性,因此这必须是客户的Authorize.Net客户配置文件ID。 / p>

C#中的代码示例

    private long customerProfileId = 0;

    var customerProfile = new AuthorizeNet.CustomerProfileType()
        { 
            merchantCustomerId = "123456789",  
            email = "user@domain.com",
            description = "John Smith",
        };

    var cpResponse = authorize.CreateCustomerProfile(merchantAuthentication, customerProfile, ValidationModeEnum.none);
    if (cpResponse.resultCode == MessageTypeEnum.Ok)
    {
        customerProfileId = cpResponse.customerProfileId;
    }
    else
    {
        var regex = new Regex("^A duplicate record with ID (?<profileId>[0-9]+) already exists.$", RegexOptions.ExplicitCapture);
        Match match = regex.Match(cpResponse.messages[0].text);
        if (match.Success)
            customerProfileId = long.Parse(match.Groups["profileId"].Value);
        else
            //Raise error.
    }