Transactions 基于Authorize.NET CIM中以前的事务执行事务

Transactions 基于Authorize.NET CIM中以前的事务执行事务,transactions,payment-gateway,payment,authorize.net,authorize.net-cim,Transactions,Payment Gateway,Payment,Authorize.net,Authorize.net Cim,我是新来授权.NET的。在authorize.net中是否可以进行引用事务。例如:用户A第一次来输入信用卡详细信息,他进行支付。现在,当他第二次付款时,必须使用上一笔交易的详细信息(即,他不会再次输入详细信息,默认情况下必须使用第一笔付款详细信息),并且必须完成付款。在Authorize.NET CIM服务中是否有任何此类选项可用 我正在使用来自的Authorize.NET SDK 这为我提供了CIM的功能,但不确定如何使用上述场景。使用PayFlow Pro,我们可以成功地做到这一点(参考事务

我是新来授权.NET的。在authorize.net中是否可以进行引用事务。例如:用户A第一次来输入信用卡详细信息,他进行支付。现在,当他第二次付款时,必须使用上一笔交易的详细信息(即,他不会再次输入详细信息,默认情况下必须使用第一笔付款详细信息),并且必须完成付款。在Authorize.NET CIM服务中是否有任何此类选项可用

我正在使用来自的Authorize.NET SDK 这为我提供了CIM的功能,但不确定如何使用上述场景。使用PayFlow Pro,我们可以成功地做到这一点(参考事务概念),authorize.NET的CIM是否使用CIM提供此功能


我能够授权信用卡,并根据我捕获的响应(“授权代码”)。现在,根据捕获响应参数,我尝试执行另一个事务。但失败并收到错误消息:此事务已提交。

您所要求的正是CIM所做的。CIM允许您创建一个客户支付配置文件,该文件将客户的信用卡详细信息存储在Authorize.Net服务器上,并返回一个ID供您参考。每当客户希望在未来付款时,您只需参考该ID即可付款。客户不需要向您提供任何其他信息


您收到的错误消息表明您没有使用CIM,而是使用AIM(高级集成方法)。这与CIM不同,也与CIM无关。要使用CIM,必须使用CIM API。

此答案特定于使用C#的authorize.net.net SDK

您应该在本地存储CIM profileID(客户配置文件的唯一标识符)和CIM paymentprofileID(添加到客户配置文件中的每个支付卡的唯一标识符)。因此,您的客户/用户记录应该能够存储这两个整数

来自authorize.net的关于如何在其.net SDK中使用CIM的文档充其量只能说是糟糕透顶。我试图从他们那里得到支持,他们不断地说SDK不支持CIM,这是不对的,因为所有使用它的方法都在那里。我将提供几行代码,为您使用这个强大的工具指明正确的方向

一切都假设您正在“使用AuthorizeNet”的类文件中编写代码,并且您拥有authorized.net中的最新DLL

首先,AuthorizeNet类有一个“Address”类型。它存储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());
-或-

创建一个新的CIMprofile

cust = cg.CreateCustomer(email, description);
一旦设置了客户,就可以从
cust.profileID

现在,使用
cg.AddCreditCard()
创建一个新的CIM支付配置文件。这有3个重载,#2添加CVV编号,#3能够插入AVS的地址对象。如果您使用
string paymentprofileid=cg.AddCreditCard()
,则paymentprofileid将成为您应该为该信用卡存储的号码,以便您将来可以再次对其收费。虽然您可以查找这些信息,但CIM返回的卡号格式为“XX1234”,因此以后很难匹配


一旦您有了这些值,您就可以使用有文档记录的方法对CIM配置文件卡进行收费。祝你好运

谢谢你精彩的解释,谢谢!!。。我明白你想表达的意思。