我是Authorize.NET的新手。 authorize.net中是否可以引用事务。例如:用户A第一次来到并输入信用卡详细信息,他付款。现在,当他第二次进行支付时,必须使用先前交易的详细信息(即,他不会再次输入详细信息,默认情况下必须使用第一个支付细节)并且必须进行支付。 Authorize.NET CIM服务中是否有这样的选项。
我正在使用来自https://github.com/AuthorizeNet/sdk-dotnet的Authorize.NET SDK 这为我提供了CIM的功能,但不确定如何使用上述方案。使用PayFlow Pro我们可以成功地完成它(参考交易概念),authorize.NET的CIM是否使用CIM提供此功能。
我能够授权信用卡并根据响应(" AuthorizationCode")我确实捕获了。从那之后,我从捕获响应参数中尝试做另一个事务。但失败并收到错误消息:此事务已提交。
答案 0 :(得分:2)
您要求的是完全 CIM的作用。 CIM允许您创建客户付款配置文件,该配置文件将客户的信用卡详细信息存储在Authorize.Net服务器上,并返回一个ID以引用它。只要该客户希望将来付款,您只需参考该ID即可进行付款。客户无需向您提供任何其他信息。
您收到的错误消息表明您不使用CIM但使用AIM(高级积分方法)。这与CIM不同且无关。要使用CIM,您必须使用CIM API。
答案 1 :(得分:0)
此答案特定于authorize.net .Net SDK,使用C#。
您应在本地存储CIM profileID(客户配置文件的唯一标识符)和CIM paymentprofileID(添加到客户配置文件的每张支付卡的唯一标识符)。因此,您的客户/用户记录应该有一种方法来存储这两个整数。
authorize.net提供的关于如何在.Net SDK中使用CIM的文档充其量是极其糟糕的。我试图得到他们的支持,并且他们不断地说SDK不支持CIM,这是不正确的,因为所有使用它的方法都在那里。我将提供几行代码,这些代码应指向正确的方向来使用这个强大的工具。
一切都假设您正在使用“使用AuthorizeNet”的类文件中编写代码,并且您拥有来自authorize.net的最新DLL。
首先,AuthorizeNet类具有“地址”类型。这将存储CIM配置文件或CIM支付配置文件的地址信息。这是我为构建Address对象而构建的一个简单方法:
private static Address getAddressObject(string fname, string lname, string address, string city, string state, string zip, string phone)
{
var a = new Address();
a.First = fname;
a.Last = lname;
a.Street = address;
a.City = city;
a.State = state;
a.Zip = zip;
a.Phone = phone;
return a;
}
使用该方法构建一个或多个地址对象(运送,计费,信用卡特定等),并在与网关交互时准备好它们。
现在,创建一个CustomerGateway对象
CustomerGateway cg = new CustomerGateway(loginInfo[0], loginInfo[1], ServiceMode.Live);
现在创建一个空的Customer对象
Customer cust;
此时,您有两种选择:
通过使用本地存储的CIMprofileid来查看CIM配置文件是否存在:
cust = cg.GetCustomer(rdr["CIMprofileID"].ToString());
-OR -
创建新的CIMprofile
cust = cg.CreateCustomer(email, description);
一旦设置了cust,就可以从cust.ProfileID
现在,使用cg.AddCreditCard()
创建新的CIM付款资料。这有3个重载,#2添加CVV编号,#3能够删除AVS的Address对象。如果您执行string paymentprofileid = cg.AddCreditCard()
,则paymentprofileid将成为您应为该信用卡存储的号码,以便您以后可以再次收费。虽然您可以查看这些内容,但CIM返回的卡号被格式化为“XXXX1234”,因此以后可能难以匹配。
获得这些值后,您可以使用记录的方法为CIM配置文件卡收费。祝你好运!