根据 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 中的先前事务执行事务的主要内容,如果未能解决你的问题,请参考以下文章

Authorize.net CIM - 无效/退款交易

WooCommerce 和 Authorize.Net CIM 之间的连接错误

Authorize.net CIM SOAP API getCustomerPaymentProfile 错误

使用 authorize.net cim 定期付款

Authorize.net CIM Active Merchant -- 由于验证值无效,用户验证失败

ActiveMerchant Authorize.net Cim 不会产生拒绝