根据 Authorize.NET CIM 中的先前事务执行事务
Posted
技术标签:
【中文标题】根据 Authorize.NET CIM 中的先前事务执行事务【英文标题】:Performing Transaction based on previous Transactions in Authorize.NET CIM 【发布时间】:2014-08-14 17:11:27 【问题描述】:我是 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”)。现在,从捕获响应参数中,我尝试进行另一项事务。但失败并收到错误消息:此交易已提交。
【问题讨论】:
【参考方案1】:您所要求的正是 CIM 所做的。 CIM 允许您创建一个客户付款配置文件,该配置文件将客户的信用卡详细信息存储在 Authorize.Net 服务器上,并返回一个 ID 以供您参考。每当该客户希望将来付款时,您只需参考该 ID 即可进行付款。客户无需向您提供任何其他信息。
您收到的错误消息表明您没有使用 CIM 而是使用 AIM(高级集成方法)。这与 CIM 不同且无关。要使用 CIM,您必须使用 CIM API。
【讨论】:
【参考方案2】:此答案特定于 authorize.net .Net SDK,使用 C#。
您应该在本地存储 CIM profileID(客户资料的唯一标识符)和 CIM paymentprofileID(添加到客户资料的每张支付卡的唯一标识符)。所以你的客户/用户记录应该有办法存储这两个整数。
authorize.net 关于如何在其 .Net SDK 中使用 CIM 的文档充其量是糟糕透顶。我试图从他们那里获得支持,他们一直说 SDK 不支持 CIM,这不是真的,因为使用它的所有方法都在那里。我将提供几行代码,为您指明使用这个强大工具的正确方向。
一切都假设您在“使用 AuthorizeNet”的类文件中编写代码,并且您拥有来自 authorize.net 的最新 DLL。
首先,AuthorizeNet 类有一个“地址”类型。这存储了 CIM 配置文件或 CIM 付款配置文件的地址信息。这是我为构建地址对象而构建的一个简单方法:
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 cust;
此时,您有两个选择:
使用本地存储的 CIMprofileid 查看 CIM 配置文件是否存在:
cust = cg.GetCustomer(rdr["CIMprofileID"].ToString());
-或-
创建新的 CIM 配置文件
cust = cg.CreateCustomer(email, description);
一旦你设置了客户,你可以从cust.ProfileID
获取CIM profileID
现在,使用cg.AddCreditCard()
创建新的 CIM 付款配置文件。对此有 3 个重载,#2 添加 CVV 编号,#3 能够放入 AVS 的 Address 对象。如果您选择string paymentprofileid = cg.AddCreditCard()
,paymentprofileid 将成为您应该为该信用卡存储的号码,以便您以后可以再次收费。虽然您可以查找这些,但 CIM 返回的卡号格式为“XXXX1234”,因此以后可能很难匹配。
一旦获得这些值,您就可以使用记录在案的方法对 CIM 档案卡进行收费。祝你好运!
【讨论】:
感谢您的精彩解释 赞!!.. 我明白您要传达的意思。以上是关于根据 Authorize.NET CIM 中的先前事务执行事务的主要内容,如果未能解决你的问题,请参考以下文章
WooCommerce 和 Authorize.Net CIM 之间的连接错误
Authorize.net CIM SOAP API getCustomerPaymentProfile 错误