我在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();
答案 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.
}