跳转到主要内容

Authorize.Net的AIM API的简单界面

项目描述

Authorize.Net通过HTTPS协议之上的协议提供信用卡(以下简称“CC”)处理服务。Authorize.Net的客户是“商家”。商家是接受信用卡作为支付手段的实体。此包提供对Authorize.Net的“高级集成方法”(AIM)的简单接口。

本文件中使用的几个术语

  • authorize:检查CC信息的有效性以及是否有足够的余额

  • capture:批准将资金从信用卡持卡人转移到商家

  • settlement:实际将资金从信用卡持卡人转移到商家

  • credit:从商家向信用卡持卡人退款

  • voiding:取消之前的交易

结算操作按日批量进行。该批次的截止时间在Authorize.Net商家界面的商家设置中指定。

还有许多其他设置可以通过商家界面进行配置,但此模块试图独立于大多数设置工作。当需要特定设置时,它们将用“所需商家界面设置”短语标注。

交易密钥

每个AIM交易都必须附有商家登录和“交易密钥”。此密钥从商家界面获取。导入CcProcessor类后,您必须传递您的登录和交易密钥。

>>> from zc.authorizedotnet.processing import CcProcessor
>>> from zc.creditcard import (AMEX, DISCOVER, MASTERCARD,
...                            VISA, UNKNOWN_CARD_TYPE)
>>> cc = CcProcessor(server=SERVER_NAME, login=LOGIN, key=KEY)

授权

要授权收费,请使用authorize方法。它返回一个Transaction对象。

>>> result = cc.authorize(amount='2.00', card_num='4007000000027',
...                       exp_date='0530')

结果对象包含有关交易详情。

>>> result.response
'approved'
>>> result.response_reason
'This transaction has been approved.'
>>> result.approval_code
'123456'
>>> auth_trans_id = result.trans_id
>>> result.trans_id
'123456789'

当发送card_num时,结果还包含信用卡类型。

>>> result.card_type == VISA
True

如果没有提供信用卡号,card_type为None。

>>> result2 = cc.authorize(amount='2.00', exp_date='0530')
>>> result2.card_type == None
True
>>> result2 = cc.authorize(amount='2.00', card_num='', exp_date='0530')
>>> result2.card_type == None
True

捕获授权交易

现在如果我们想捕获之前授权的交易,我们可以这样做。

>>> result = cc.captureAuthorized(trans_id=result.trans_id)
>>> result.response
'approved'

信用(退款)交易

之前已授权的交易可以进行退款。退款金额不能超过已捕获的金额。至少必须提供信用卡号的最后四位,以及交易ID。

只有在银行已结算交易的情况下,信用才会生效,即如果我们立即尝试退款,它将失败。

>>> result = cc.credit(trans_id=auth_trans_id,
...                    card_num='4007000000027',
...                    exp_date='0530',
...                    amount='1.00',
...                    )
>>> result.response_reason
'The referenced transaction does not meet the criteria for issuing a credit.'
>>> result.response
'error'

取消交易

如果我们需要停止尚未完成的交易(如上述捕获的交易信用),我们可以使用void方法。

>>> result = cc.void(trans_id=auth_trans_id)
>>> result.response
'approved'

交易错误

如果交易中存在错误,交易结果会指出。

>>> result = cc.authorize(amount='2.50', card_num='4007000000027',
...                       exp_date='0599')

结果对象反映了错误。

>>> result.response
'error'
>>> result.response_reason
'The credit card has expired.'

response属性的合法值是‘approved’、‘declined’和‘error’。

地址验证系统(AVS)

AVS用于断言交易提供的计费信息必须(在一定程度上)与持卡人的实际计费数据匹配。网关可以被配置为不允许不满足某些AVS标准的交易。

>>> result = cc.authorize(amount='27.00', card_num='4222222222222',
...                       exp_date='0530', address='000 Bad Street',
...                       zip='90210')
>>> result.response
'declined'
>>> result.response_reason
'The transaction resulted in an AVS mismatch...'

重复窗口

网关提供了一种方法来检测和拒绝一定时间窗口内的重复交易。任何在窗口内重复的具有相同CC信息(卡号和有效期)和金额的交易都将被拒绝。

第一次交易将成功。

>>> result = cc.authorize(amount='3.00', card_num='4007000000027',
...                       exp_date='0530', invoice_num='123')
>>> result.response
'approved'

重复交易将失败,并显示适当的消息。

>>> result2 = cc.authorize(amount='3.00', card_num='4007000000027',
...                       exp_date='0530', invoice_num='123')
>>> result2.response
'error'
>>> result2.response_reason
'A duplicate transaction has been submitted.'

可以通过包括唯一的invoice_num字段来解除类似交易的别名。

>>> result3 = cc.authorize(amount='3.00', card_num='4007000000027',
...                        exp_date='0530', invoice_num='124')
>>> result3.response
'approved'

默认窗口大小为120秒,但可以通过将duplicate_window传递给交易方法来提供任何其他值(包括0)。

>>> cc.captureAuthorized(trans_id=result.trans_id).response
'approved'
>>> cc.captureAuthorized(trans_id=result.trans_id).response_reason
'This transaction has already been captured.'
>>> cc.captureAuthorized(trans_id=result.trans_id, duplicate_window=0
...                     ).response
'approved'

但如果在重复窗口内取消相同的交易,则取消不会报告错误。

>>> cc.void(trans_id=result.trans_id).response
'approved'
>>> cc.void(trans_id=result.trans_id).response
'approved'

行项目

订单的详细列表可以包含在授权数据中,作为序列的序列。

>>> result = cc.authorize(amount='2.98', card_num='4007000000027',
...                       exp_date='0530',
...                       line_items=[
...                       # id  name      description qty  unit price tax
...                       ('1', 'G-1000', 'Gadget',   '1', '1.99',    'Y'),
...                       ('2', 'A-150',  'Accessory','1', '0.99',    'Y'),
...                       ])
>>> result.response
'approved'

结果将有一个card_type属性。

>>> result.card_type == VISA
True

MD5哈希安全功能

Authorize.Net提供通过MD5哈希验证交易响应。使用此功能所需的商家界面设置在“设置和配置文件”下,然后是“MD5哈希”。在提供的字段中输入“盐”值并提交表单。然后您可以将salt参数传递给CcProcessor构造函数以启用响应验证。

警告:此功能正确工作,“amount”字段的格式非常重要。字段必须按货币的“规范”方式格式化。对于美元,这意味着没有前导零和两个(仅两个)小数位。如果请求中的金额格式不正确,哈希将不匹配,交易将引发异常。

如果您想启用哈希检查,请为 CcProcessor 构造函数提供一个 salt 值。如果使用错误的盐值,或者交易中给出的哈希值与真实哈希值不匹配,将引发异常。

>>> cc = CcProcessor(server=SERVER_NAME, login=LOGIN, key=KEY,
...                  salt='wrong')
>>> result = cc.authorize(amount='10.00', card_num='4007000000027',
...                       exp_date='0530')
Traceback (most recent call last):
    ...
ValueError: MD5 hash is not valid (trans_id = ...)

错误检查

在进行授权操作时,如果不传递金额字符串,将引发异常。这是为了避免由于浮点数表示问题而错误地收取金额。

>>> cc.authorize(amount=5.00, number='4007000000027', expiration='0530')
Traceback (most recent call last):
    ...
ValueError: amount must be a string

项目详情


下载文件

下载您平台对应的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

zc.authorizedotnet-1.3.1.tar.gz (9.5 kB 查看哈希)

上传时间 源代码

由以下组织支持