todopago / php-sdk
TodoPago SDK
此包的规范存储库似乎已丢失,因此该包已被冻结。
Requires
- php: >=5.3
Requires (Dev)
- php-mock/php-mock-phpunit: ^1.1
- phpunit/phpunit: ^5.7
README
安装
建议通过Composer进行安装。
composer require todopago/php-sdk
安装后,必须在项目中包含vendor/autoload.php文件。
也可以从master分支的Download ZIP按钮下载SDK的最新版本。下载并解压后,必须将位于/vendor目录中的autoload.php文件作为库包含到项目中。
注意:取消注释php.ini中的extension=php_soap.dll, extension=php_openssl.dll和extension=php_curl.dll,因为连接网关时使用了PHP API的SoapClient类。
1. 支持的php版本
SDK实现版本已测试适用于PHP 5.3及以上版本。
2. 概述
此版本仅支持阿根廷国家货币(CURRENCYCODE = 32)的支付。
环境
SDK-PHP允许与Todo Pago的开发者和生产环境一起工作。
环境应根据以下说明进行实例化。
$mode = "test";//identificador de entorno obligatorio, la otra opción es "prod" $http_header = array('Authorization'=>'TODOPAGO 912EC803B2CE40E4A541068D495AB570');//authorization key del ambiente requerido $connector = new TodoPago\Sdk($http_header, $mode);
可以在TodoPago的网站上查找测试数据。
使用
初始化相应连接器的类(TodoPago\Sdk)。
- 创建一个包含由Todo Pago提供的http headers(API Keys)的数组
$http_header = array('Authorization'=>'TODOPAGO 912EC803B2CE49E4A541068D495AB570');
- 创建一个TodoPago\Sdk类的实例
$connector = new TodoPago\Sdk($http_header, $mode); // $mode: "test" para developers, "prod" para producción
分组操作
通过单一简单的粘合,销售商可以访问按钮支付提供的所有支付方式,无需与每种支付方式签订任何额外合同。TodoPago的“聚合”功能负责管理与所有支付方式的必要协议,以便在按钮中提供它们。
要访问此服务,销售商可以在TodoPago的专属网站上或通过其商业代表进行注册。在这些过程中将生成用于此服务的用户名和密码。
一旦注册,将自动创建一个虚拟账户,用于存入通过本支付方式进行的收款。
序列图
授权请求
在这种情况下,需要调用sendAuthorizeRequest()。
$values = $connector->sendAuthorizeRequest($optionsSAR_comercio, $optionsSAR_operacion);
商家自有数据 $optionsSAR_comercio必须是一个具有以下结构的数组
字段 | 必需 | 描述 | 数据类型 | 可能的值 / 示例 |
---|---|---|---|---|
安全性 | 是 | API密钥(没有PRISMA或TODOPAGO)且无空格。 | 字母数字,最多32个字符 | 912EC803B2CE49E4A541068D495AB570 |
商家 | 是 | 由TodoPago提供的商家编号(商家ID) | 数字 | 12345678 |
URL_OK | 否 | 当购买成功时,买家将被引导到的URL | 字母数字,最多256个字符 | http://susitio.com/payment/Ok |
URL_Error | 否 | 当购买不成功时,买家将被引导到的URL | 字母数字,最多256个字符 | http://susitio.com/payment/Error |
商家自有数据 - 示例
$optionsSAR_comercio = array ( 'Security'=> '1234567890ABCDEF1234567890ABCDEF', 'EncodingMethod'=>'XML', 'Merchant'=>305, 'URL_OK'=>'localhost:8888/sdk-php/ejemplo/exito.php?Order=27398173292187', 'URL_ERROR'=>'localhost:8888/sdk-php/ejemplo/error.php?Order=27398173292187' );
**注意**:在示例中,通过url发送参数(在我们的示例中:?Order=27398173292187),以便由商店通过 get 接收,并在下一步中恢复该值。
操作自有数据 $optionsSAR_operacion必须是一个具有以下结构的数组
字段 | 必需 | 描述 | 数据类型 | 可能的值 / 示例 |
---|---|---|---|---|
MERCHANT | 是 | 由TodoPago提供的商家编号(商家ID) | 数字 | 12345 |
OPERATIONID | 是 | 交易识别符,用于商家。对于每个操作都必须不同。 | 1到40个字符的字母数字 | 10000012 |
CURRENCYCODE | 是 | 操作的货币类型。仅适用于阿根廷比索(32) | 两位数字 | 32 |
AMOUNT | 是 | 交易的金额。 | 最多两位小数的9位数字。使用点作为小数分隔符。不允许逗号,既不作为千位分隔符也不作为小数分隔符。 | $125,38 -> 125.38 |
EMAILCLIENTE | 是 | 商家必须向TodoPago发送客户的电子邮件地址。此地址将用于向客户发送购买确认邮件 | 最多80个字符的字母数字 | cliente@mail.com |
商家自有数据 - 示例
$optionsSAR_operacion = array ( 'MERCHANT'=> 13054, //dato fijo (número identificador del comercio) 'OPERATIONID'=>'27398173292187', //número único que identifica la operación, generado por el comercio. 'CURRENCYCODE'=> 32, //por el momento es el único tipo de moneda aceptada 'AMOUNT'=>54.00, 'EMAILCLIENTE'=>'email_cliente@dominio.com', );
**注意**:还必须发送有关 欺诈预防 的相关数据。
响应
字段 | 必需 | 描述 | 数据类型 | 可能的值 / 示例 |
**StatusCode** | 是 | 服务状态代码或返回值 | 5位数字 |
|
**StatusMessage** | 是 | 返回代码或服务状态的描述 | 最多256个字符 | 示例:授权请求已注册 |
**URL_Request** | 是 | 支付表单的URL | URL | https://forms.todopago.com.ar/formulario/commands?command=formulario&m=t7d3938c9-f7b1-4ee9-e76b-9cc84f73fe81 |
**RequestKey** | 否 | 在操作SendAuthorizeRequest的响应中获得的私有要求标识符。永远不应暴露给Web浏览器。它仅在电子商务和TodoPago之间使用 | 最多48个字符的字母数字 | 8496472a-8c87-e35b-dcf2-94d5e31eb12f |
**PublicRequestKey** | 否 | 在操作SendAuthorizeRequest的响应中获得的要求的公共标识符 | 最多48个字符的字母数字 | t7d3938c9-f7b1-4ee9-e76b-9cc84f73fe81 |
响应示例
array (size=5) 'StatusCode' => int -1 'StatusMessage' => string 'Solicitud de Autorizacion Registrada' (length=36) 'URL_Request' => string 'https://developers.todopago.com.ar/formulario/commands?command=formulario&m=t7d3938c9-f7b1-4ee9-e76b-9cc84f73fe81' (length=102) 'RequestKey' => string '8496472a-8c87-e35b-dcf2-94d5e31eb12f' (length=36) 'PublicRequestKey' => string 't7d3938c9-f7b1-4ee9-e76b-9cc84f73fe81' (length=37)
La url_request 是支付表单托管的位置,以及用户完成支付后需要重定向的位置。根据支付的成功或失败,表单将重定向到 $optionsSAR_comercio 中设置的 2 个 URL 之一(URL_OK,在成功的情况下或 URL_ERROR,在表单由于某些原因拒绝支付的情况下)。
例如,如果传递错误的 MerchantID,将获得以下响应
array (size=2) 'StatusCode' => int 702 'StatusMessage' => string 'ERROR: Cuenta de vendedor invalida' (length=27)
欺诈控制额外数据
欺诈控制额外数据对于与 TodoPago 的操作是 必需的。
通用参数
参数 | 必需 | 描述 | 描述 | 可能值 |
---|---|---|---|---|
CSBTCITY | 是 | 发票城市 | 50个字符的字母数字。 | 示例:Villa General Belgrano |
CSBTCOUNTRY | 是 | 发票国家 | 2个字符的字母数字。 | ISO代码 |
CSBTCUSTOMERID | 是 | 发出发票的用户的标识符。不能包含电子邮件地址 | 50个字符的字母数字。 | 示例:A.Carlos 453458 |
CSBTIPADDRESS | 是 | 买家的电脑IP | 15个字符的字母数字。 | 示例:10.1.27.63 |
CSBTEMAIL | 是 | 发出发票的用户的电子邮件 | 100个字符的字母数字。 | 示例:todopago@hotmail.com |
CSBTFIRSTNAME | 是 | 发出发票的用户的姓名 | 60个字符的字母数字。 | 示例:Juan |
CSBTLASTNAME | 是 | 发出发票的用户的姓氏 | 60个字符的字母数字。 | 示例:Perez |
CSBTPHONENUMBER | 是 | 发出发票的用户的电话。不要使用连字符、点或空格。包括国家代码 | 15个字符的字母数字。 | 示例:541160913988 |
CSBTPOSTALCODE | 是 | 发票地址的邮政编码 | 10个字符的字母数字。 | 示例:C1010AAP 或 1010 |
CSBTSTATE | 是 | 发票地址的省份 | 2个字符的字母数字。 | 查看省份 示例:如果对应于 CABA,则发送 C |
CSBTSTREET1 | 是 | 发票地址(街道编号 内部编号 外部编号) | 60个字符的字母数字。 | 示例:Cerrito 740 楼层 8 |
CSBTSTREET2 | 否 | 城镇 | 60个字符的字母数字。 | 示例:CABA |
CSPTCURRENCY | 是 | 货币 | 5个字符的字母数字。 | 示例:ARS |
CSPTGRANDTOTALAMOUNT | 是 | "999999.CC" 必须有小数,使用点作为小数分隔符。不允许使用逗号,既不作为千位分隔符也不作为小数分隔符。 | 15位数字 | 示例:$125,38 -> 125.38 $12 -> 12.00 |
CSMDD6 | 否 | 销售渠道 | 255个字符的字母数字。 | 可能值:Web,Mobile,Telefonica |
CSMDD7 | 否 | 客户在商家网站上注册的天数。 | 255个字符的字母数字。 | 示例:178 |
CSMDD8 | 否 | 指示用户是否在商家页面以访客身份购买。如果为 "S",则 CSMDD9 字段不应发送。 | 布尔值 | 可能值(S/N) |
CSMDD9 | 否 | 在商家门户中注册的用户的密码值。包括哈希值 | 255个字符的字母数字。 | 示例:"4ac1503de8c50a81213f2d5bac49628b" |
CSMDD10 | 否 | 在商家门户网站中注册的同一名用户进行的交易数量(交易数) | 255个字符的字母数字。 | 示例:5 |
CSMDD11 | 否 | 客户手机 | 255个字符的字母数字。 | 示例:"1155001122" |
垂直 "Retail" 参数
参数 | 必需 | 描述 | 描述 | 可能值 |
---|---|---|---|---|
CSSTCITY | 是 | 订单发货城市 | 50个字符的字母数字。 | 示例:"Capital Federal" |
CSSTCOUNTRY | 是 | 订单发货国家 | 2个字符的字母数字 | ISO代码 |
CSSTEMAIL | 是 | 买家电子邮件地址 | 100个字符的字母数字 | 示例:"mail@empresa.com" |
CSSTFIRSTNAME | 是 | 收货人姓名 | 60个字符的字母数字 | 示例:"Juan" |
CSSTLASTNAME | 是 | 收货人姓氏 | 60个字符的字母数字 | 示例:"Pérez" |
CSSTPHONENUMBER | 是 | 收件人电话号码 | 15个字符的字母数字 | 示例:"45004500" |
CSSTPOSTALCODE | 是 | 发货地址的邮政编码 | 10个字符的字母数字 | 示例:"C1006DRW", "C1006" "1006" |
CSSTSTATE | 是 | 发货省份 | 2个字符的字母数字 | 字符。 查看省份 |
CSSTSTREET1 | 是 | 发货地址 | 60个字符的字母数字 | 示例:"Cerrito 740" |
CSSTSTREET2 | 否 | 发货地址的附加信息 | 60个字符的字母数字 | 示例:"Piso 7" |
CSMDD12 | 否 | 商家有几天时间进行发货 | 255个字符的字母数字 | 示例:10 |
CSMDD13 | 否 | 配送方式 | 255个字符的字母数字 | 可能值:storepickup, deliverypropio, deliverycarrier 说明:deliverypropio:使用自有的物流运营商进行发货。deliverycarrier:使用第三方物流运营商进行发货(例如,Andreani)。 |
CSMDD14 | 否 | 布尔值,用于标识客户是否需要发票或否 S / N | 布尔值 | S/N |
CSMDD15 | 否 | CustomerLoyalityNumber - 客户忠诚度编号 | 255个字符的字母数字 | 示例:"789875" |
CSMDD16 | 否 | Promotional / CouponCode - 折扣券编号 | 255个字符的字母数字 | 示例:"PROMO30" |
每个产品要发送的数据,值应使用 "#" 分隔
参数 | 必需 | 描述 | 描述 | 可能值 |
---|---|---|---|---|
CSITPRODUCTCODE | 条件 | 产品类别 | 255个字符的字母数字 | 默认值:default |
CSITPRODUCTDESCRIPTION | 条件 | 产品描述 | 255个字符的字母数字 | NOTEBOOK L845 SP4304LA DF TOSHIBA 4GB RAM 233 MHZ |
CSITPRODUCTNAME | 条件 | 产品名称 | 255个字符的字母数字 | NOTEBOOK L845 SP4304LA DF TOSHIBA |
CSITPRODUCTSKU | 条件 | 产品标识码 | 255个字符的字母数字 | 示例:LEVJNSL36GN |
CSITTOTALAMOUNT | 条件 | CSITTOTALAMOUNT = CSITUNITPRICE * CSITQUANTITY "999999.CC" 必须提供小数,使用点作为小数分隔符。不允许使用逗号,既不能作为千位分隔符,也不能作为小数分隔符。 | 数字 | 示例:$125,38 -> 125.38 $12 -> 12.00 |
CSITQUANTITY | 条件 | 产品数量 | 数字 | 示例:1 |
CSITUNITPRICE | 条件 | "999999.CC" 必须提供小数,使用点作为小数分隔符。不允许使用逗号,既不能作为千位分隔符,也不能作为小数分隔符。 | 数字 | 示例:$125,38 -> 125.38 $12 -> 12.00 |
$optionsSAR_operacion = array( ........................................................................... 'CSBTCITY'=>'Villa General Belgrano', //Ciudad de facturación, REQUERIDO. 'CSBTCOUNTRY'=>'AR', //País de facturación. REQUERIDO. Código ISO. 'CSBTCUSTOMERID'=>'453458', //Identificador del usuario al que se le emite la factura. REQUERIDO. No puede contener un correo electrónico. 'CSBTIPADDRESS'=>'192.0.0.4', //IP de la PC del comprador. REQUERIDO. 'CSBTEMAIL'=>'decidir@hotmail.com', //Mail del usuario al que se le emite la factura. REQUERIDO. 'CSBTFIRSTNAME'=>'Juan' ,//Nombre del usuario al que se le emite la factura. REQUERIDO. 'CSBTLASTNAME'=>'Perez', //Apellido del usuario al que se le emite la factura. REQUERIDO. 'CSBTPHONENUMBER'=>'541160913988', //Teléfono del usuario al que se le emite la factura. No utilizar guiones, puntos o espacios. Incluir código de país. REQUERIDO. 'CSBTPOSTALCODE'=>' C1010AAP', //Código Postal de la dirección de facturación. REQUERIDO. 'CSBTSTATE'=>'B', //Provincia de la dirección de facturación. REQUERIDO. Ver tabla anexa de provincias. 'CSBTSTREET1'=>'Cerrito 740', //Domicilio de facturación (calle y nro). REQUERIDO. 'CSBTSTREET2'=>'Piso 8', //Complemento del domicilio. (piso, departamento). OPCIONAL. 'CSPTCURRENCY'=>'ARS', //Moneda. REQUERIDO. 'CSPTGRANDTOTALAMOUNT'=>'125.38', //Con decimales opcional usando el punto como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales. REQUERIDO. (Ejemplos:$125,38-> 125.38 $12-> 12 o 12.00) 'CSMDD7'=>'', // Fecha registro comprador(num Dias). OPCIONAL. 'CSMDD8'=>'Y', //Usuario Guest? (Y/N). En caso de ser Y, el campo CSMDD9 no deberá enviarse. OPCIONAL. 'CSMDD9'=>'', //Customer password Hash: criptograma asociado al password del comprador final. OPCIONAL. 'CSMDD10'=>'', //Histórica de compras del comprador (Num transacciones). OPCIONAL. 'CSMDD11'=>'', //Customer Cell Phone. OPCIONAL. 'CSSTCITY'=>'rosario', //Ciudad de envío de la orden. REQUERIDO. 'CSSTCOUNTRY'=>'', //País de envío de la orden. REQUERIDO. 'CSSTEMAIL'=>'jose@gmail.com', //Mail del destinatario, REQUERIDO. 'CSSTFIRSTNAME'=>'Jose', //Nombre del destinatario. REQUERIDO. 'CSSTLASTNAME'=>'Perez', //Apellido del destinatario. REQUERIDO. 'CSSTPHONENUMBER'=>'541155893737', //Número de teléfono del destinatario. REQUERIDO. 'CSSTPOSTALCODE'=>'1414', //Código postal del domicilio de envío. REQUERIDO. 'CSSTSTATE'=>'D', //Provincia de envío. REQUERIDO. Son de 1 caracter 'CSSTSTREET1'=>'San Martín 123', //Domicilio de envío. REQUERIDO. 'CSMDD12'=>'',//Shipping DeadLine (Num Dias). NO REQUERIDO. 'CSMDD13'=>'',//Método de Despacho. NO REQUERIDO. 'CSMDD14'=>'',//Customer requires Tax Bill ? (Y/N). NO REQUERIDO. 'CSMDD15'=>'',//Customer Loyality Number. NO REQUERIDO. 'CSMDD16'=>'',//Promotional / Coupon Code. NO REQUERIDO. //Retail: datos a enviar por cada producto, los valores deben estar separados con #: 'CSITPRODUCTCODE'=>'electronic_good', //Código de producto. REQUERIDO. Valores posibles(adult_content;coupon;default;electronic_good;electronic_software;gift_certificate;handling_only;service;shipping_and_handling;shipping_only;subscription) 'CSITPRODUCTDESCRIPTION'=>'NOTEBOOK L845 SP4304LA DF TOSHIBA', //Descripción del producto. REQUERIDO. 'CSITPRODUCTNAME'=>'NOTEBOOK L845 SP4304LA DF TOSHIBA', //Nombre del producto. REQUERIDO. 'CSITPRODUCTSKU'=>'LEVJNSL36GN', //Código identificador del producto. REQUERIDO. 'CSITTOTALAMOUNT'=>'1254.40', //CSITTOTALAMOUNT=CSITUNITPRICE*CSITQUANTITY "999999[.CC]" Con decimales opcional usando el punto como separador de decimales. No se permiten comas, ni como separador de miles ni como separador de decimales. REQUERIDO. 'CSITQUANTITY'=>'1', //Cantidad del producto. REQUERIDO. 'CSITUNITPRICE'=>'1254.40', //Formato Idem CSITTOTALAMOUNT. REQUERIDO. ...........................................................
附加选项
在 $optionsSAR_operacion 参数中可以发送附加选项,以启用特定交易的特性。以下将描述这些选项
分期付款范围
可以在表单中设置显示的分期付款范围,通过发送以下附加参数
字段 | 必需 | 描述 | 数据类型 | 可能的值 / 示例 |
---|---|---|---|---|
MININSTALLMENTS | 否 | 表单中显示的最小分期数 | 数字 | 3 |
MAXINSTALLMENTS | 否 | 表单中显示的最大分期数 | 数字 | 9 |
示例
$optionsSAR_operacion = array ( ................................... 'MININSTALLMENTS'=>3, 'MAXINSTALLMENTS'=>6, ...................................
支付方式筛选
通过这个功能,可以在支付表单中过滤启用的支付方式。需要在调用SendAuthorizeRequest服务时传递一个额外的参数,包含要启用的支付方式的id,这些id可以通过支付方式发现方法查询。
字段 | 必需 | 描述 | 数据类型 | 可能的值 / 示例 |
---|---|---|---|---|
AVAILABLEPAYMENTMETHODSIDS | 否 | 启用支付方式的id列表,用#分隔 | 字母数字 | 1#42#500 |
示例
$optionsSAR_operacion = array ( ................................... 'AVAILABLEPAYMENTMETHODSIDS'=>"1#42#500", ...................................
交易有效期
可以设置客户在表单中完成支付的最大时间,默认值为30分钟。可能的范围是5分钟到6小时。值应表示为毫秒
字段 | 必需 | 描述 | 数据类型 | 可能的值 / 示例 |
---|---|---|---|---|
TIMEOUT | 否 | 交易有效期(毫秒) | 数字 | 1800000 |
示例
$optionsSAR_operacion = array ( ................................... 'TIMEOUT'=> 10*60*1000, // 10 minutos ...................................
交易确认
在这种情况下,需要调用getAuthorizeAnswer()
,并传递以下描述的数组作为参数。
字段 | 必需 | 描述 | 数据类型 | 可能的值 / 示例 |
---|---|---|---|---|
安全性 | 否 | 在TodoPago门户生成的安全令牌 | 字母数字,最多32个字符 | 1234567890ABCDEF1234567890ABCDEF |
商家 | 是 | 由TodoPago提供的商家编号(商家ID) | 8位字母数字 | 12345678 |
RequestKey | 是 | 在SendAuthorizeRequest操作的响应中获得的私有要求标识符。永远不会暴露给Web浏览器。仅在电子商务和TodoPago之间使用。 | 最多48个字符的字母数字 | 8496472a-8c87-e35b-dcf2-94d5e31eb12f |
AnswerKey | 是 | 响应的公共标识符。根据使用的表单接收,在电子商务的重定向URL中,或作为混合表单回调的返回属性。 | 最多48个字符的字母数字 | 8496472a-8c87-e35b-dcf2-94d5e31eb12f |
示例
$optionsQuery = array ( 'Security' => '1234567890ABCDEF1234567890ABCDEF', // Token de seguridad, provisto por TODO PAGO. 'Merchant' => '12345678', 'RequestKey' => '0123-1234-2345-3456-4567-5678-6789', 'AnswerKey' => '1111-2222-3333-4444-5555-6666-7777' // *Importante );
必须保存和恢复RequestKey
和AnswerKey
字段的值。
RequestKey
始终不同,并且当买家被重定向到支付表单时,必须以某种方式持久化。
重要 AnswerKey
字段在执行到服务中指定的一些地址(URL)的重定向时添加,这发生在交易已解决且需要返回站点以完成支付交易时。同时添加了Order字段,它将包含在OPERATIONID
字段中的内容。例如:http://susitio.com/paydtodopago/ok?Order=27398173292187&Answer=1111-2222-3333-4444-5555-6666-7777
字段 | 必需 | 描述 | 数据类型 | 可能的值 / 示例 |
**StatusCode** | 是 | 服务状态代码或返回值 | 5位数字 | -1 -> OK 0到99999或空值→错误 |
**StatusMessage** | 是 | 返回代码或服务状态的描述 | 最多256个字符 | 例如:"APROBADA" |
**AuthorizationKey** | 否 | 响应的私有标识符 | 字母数字,最多256个字符 | 例如:"9c2f0109-e585-0776-d3d0-f934ed50ccd4" |
**EncodingMethod** | 否 | 指定用于支付交易数据的编码类型 | 最多16位字母数字 | XML |
**Payload** | 否 | 根据EncodingMethod字段中指定的格式编码的文档,包含执行的交易数据 | 最多2048位字母数字 | - |
用于返回交易响应数据的字段或元素Payload。在下面的表中显示了在元素Answer中发送的值。(另一个名为Request的字段包含在GetAuthorizeAnswer请求中发送的信息)
字段 | 必需 | 描述 | 数据类型 | 可能的值 / 示例 |
**DATETIME** | 是 | 交易日期和时间 | 日期和时间。aaaammddTHHMMSSZ 小时以24小时制表示。 | 例如:"2017-07-28T15:54:14Z" |
**RESULTCODE** | 是 | 服务状态代码或返回值 | 5位数字 | -1 -> OK 0到99999或空值→错误 |
**RESULTMESSAGE** | 是 | 返回代码或服务状态的描述 | 最多256个字符 | 例如:"APROBADA" |
**CURRENCYNAME** | 否 | 货币名称 | 字母数字 | 例如:"Peso Argentino" |
**PAYMENTMETHODNAME** | 是 | 用于操作的支付方式 | 字母数字 | 例如:"VISA" |
**TICKETNUMBER** | 否 | 票据或凭证编号 | 四位数的数字 | 示例:7057 |
**CARDNUMBERVISIBLE** | 否 | 卡号,根据国家、地区或全球规范进行掩码 | 示例:"450799XXXXXX0010" | |
**AUTHORIZATIONCODE** | 否 | 授权码 | 最多8位的字母数字 | 示例:"014158" |
**INSTALLMENTPAYMENTS** | 否 | 选择的交易分期付款数量 | 数字 | 示例:03 |
**AMOUNTBUYER** | 是 | 买家最终支付的总金额(包括财务成本) | 十进制 | 示例:129.68 |
**CFT** | 是 | 应用的促销活动的CFT。 | 十进制 | 示例:0.00 |
**TEA** | 是 | 应用的促销活动的TEA。 | 十进制 | 示例:22.00 |
.
**示例响应**
array( 'StatusCode' => -1, 'StatusMessage' => 'APROBADA', 'AuthorizationKey' => '1294-329E-F2FD-1AD8-3614-1218-2693-1378', 'EncodingMethod' => 'XML', 'Payload' => array ( 'Answer' => array ( 'DATETIME' => '2014/08/11 15:24:38', 'RESULTCODE' => '-1', 'RESULTMESSAGE' => 'APROBADA', 'CURRENCYNAME' => 'Pesos', 'PAYMENTMETHODNAME' => 'VISA', 'TICKETNUMBER' => '12', 'CARDNUMBERVISIBLE' => '450799******4905', 'AUTHORIZATIONCODE' => 'TEST38', 'INSTALLMENTPAYMENTS' => '5', 'CFT' => '0.00', 'TEA' => '22.00' ), 'Request' => array ( 'MERCHANT' => '12345678', 'OPERATIONID' => 'ABCDEF-1234-12221-FDE1-00000012', 'AMOUNT' => '1.00', 'CURRENCYCODE' => '032', 'AMOUNTBUYER' => '1.10', // Monto final pagado por el usuario );
此方法返回交易数据的摘要。
如果传递了错误的AnswerKey或RequestKey,将看到以下拒绝
array (size=2) 'StatusCode' => int 404 'StatusMessage' => string 'ERROR: Transaccion Inexistente' (length=30)
示例
在https://github.com/TodoPago/SDK-PHP/tree/master/resources/ejemplo_simple.php中有一个示例,展示了SDK的主要方法的结果。
我们还提供了一个更完整的示例,该示例模拟了电子商务中的订单https://github.com/TodoPago/SDK-PHP/tree/master/resources/ejemplo_completo/index.php
特点
操作状态
SDK提供了一个方法,用于在线查询交易状态,以下数据
字段 | 必需 | 描述 | 数据类型 | 可能的值 / 示例 |
---|---|---|---|---|
MERCHANT | 是 | TodoPago提供的商家代码或账户 | 8位字母数字 | 12345678 |
OPERATIONID | 是 | 交易识别符,用于商家。对于每个操作都必须不同。 | 1到40个字符的字母数字。 | 141120084707 |
该方法的使用方式如下
$client = new TodoPago\Sdk($http_header, $mode); $client->getStatus(array('MERCHANT'=>'305', 'OPERATIONID'=>'01'));// Merchant es el id site y $operation_id es el id operación que se envió en el array a través del método sendAuthorizeRequest()
以下方法将返回TodoPago中交易当前状态。
字段 | 必需 | 描述 | 数据类型 | 可能的值 / 示例 |
---|---|---|---|---|
RESULTCODE | 是 | 交易状态的唯一标识符 | 数字 | 示例:-1 |
RESULTMESSAGE | 是 | 描述交易状态 | 字母数字 | 例如:"APROBADA" |
DATETIME | 否 | 2015-05-13T14:11:38.287+00:00 | ||
OPERATIONID | 是 | 交易识别符,用于商家。对于每个操作都必须不同。 | 1到40个字符的字母数字。 | 141120084707 |
CURRENCYCODE | 是 | 交易中使用的货币代码。目前只有32(比索) | 数字 | 32 |
AMOUNT | 是 | 交易的原始比索金额。 | 最多两位小数的9位数字。使用点作为小数分隔符。不允许逗号,既不作为千位分隔符也不作为小数分隔符。 | $125,38 -> 125.38 $12 -> 12.00 |
AMOUNTBUYER | 是 | 交易的最终比索金额。 | 最多两位小数的9位数字。使用点作为小数分隔符。不允许逗号,既不作为千位分隔符也不作为小数分隔符。 | $125,38 -> 125.38 $12 -> 12.00 |
TYPE | 是 | 操作类型,对于GetStatus始终是*compra_online* | 字母数字 | compra_online |
INSTALLMENTPAYMENTS | 否 | 支付方式生成的授权码 | 最多两位数字的十进制。 | 01, 02, 06, 12等。 |
CUSTOMEREMAIL | 是 | 发出发票的用户的电子邮件 | 100个字符的字母数字。 | 示例:cosme@fulanito.com |
IDENTIFICATIONTYPE | 否 | 文件类型 | DNI CI LE LC |
|
IDENTIFICATION | 否 | 文件号 | 数字 | 示例:1987234 |
CARDNUMBER | 否 | 卡号,根据国家规范进行掩码 | 20个字符的字母数字 | 示例:"450799XXXXXX0010" |
TITULAR | 否 | 卡主姓名 | 字母数字 | 示例:"Juan Pérez" |
NROTICKET | 否 | 票据或凭证编号 | 四位数的数字 | 示例:7509 |
示例响应
array (size=1) 'Operations' => array (size=19) 'RESULTCODE' => string '999' (length=3) 'RESULTMESSAGE' => string 'RECHAZADA' (length=9) 'DATETIME' => string '2015-05-13T14:11:38.287+00:00' (length=29) 'OPERATIONID' => string '01' (length=2) 'CURRENCYCODE' => string '32' (length=2) 'AMOUNT' => int 54 'AMOUNTBUYER' => string '67.30' (length=5) 'TYPE' => string 'compra_online' (length=13) 'INSTALLMENTPAYMENTS' => string '4' (length=1) 'CUSTOMEREMAIL' => string 'cosme@fulanito.com' (length=18) 'IDENTIFICATIONTYPE' => string 'DNI' (length=3) 'IDENTIFICATION' => string '1212121212' (length=10) 'CARDNUMBER' => string '12121212XXXXXX1212' (length=18) 'CARDHOLDERNAME' => string 'Cosme Fulanito' (length=14) 'TICKETNUMBER' => int 0 'AUTHORIZATIONCODE' => null 'BARCODE' => null 'COUPONEXPDATE' => null 'COUPONSECEXPDATE' => null 'COUPONSUBSCRIBER' => null
此外,还可以通过www.todopago.com.ar门户了解交易状态。从门户可以看到“已批准”和“拒绝”的状态。如果买家选择的支付方式是“易支付”或“快速支付”,则可以将其视为“待处理”状态,直到支付。
按时间范围查询操作
在这种情况下,需要调用getByRangeDateTime(),并将返回给定日期范围内的所有操作
字段 | 必需 | 描述 | 数据类型 | 可能的值 / 示例 |
---|---|---|---|---|
MERCHANT | 是 | 商家编号 | 数字 | 12305 |
STARTDATE | 是 | 起始日期和时间 | 日期 | date("Y-m-d", time()-60*60*24*30) |
结束日期 | 是 | 结束日期和时间 | 日期 | date("Y-m-d", time()) |
页码 | 是 | 希望访问的页面编号* | 整数 | 2 |
* 此方法返回5笔交易的页面,通过字段 页码 可以指定希望访问的页面。
$client = new TodoPago\Sdk($http_header, $mode); //Fecha en formato "Y-m-d" $date1 = date("Y-m-d", time()-60*60*24*30); $date2 = date("Y-m-d", time()); $client->getByRangeDateTime(array('MERCHANT'=>'12305', "STARTDATE" => $date1, "ENDDATE" => $date2, "PAGENUMBER" => 1));
响应将与 GetStatus 相似,但最多包含5笔操作。
支付方式发现
SDK 提供了一个方法来获取 TodoPago 中所有启用的支付方式。
$client = new TodoPago\Sdk($http_header, $mode); $rta = $client->discoverPaymentMethods();
退款
SDK 提供了执行通过 TodoPago 完成的交易的退款方法。
需要以以下方式调用 voidRequest
方法
字段 | 必需 | 描述 | 数据类型 | 可能的值 / 示例 |
---|---|---|---|---|
安全性 | 是 | 由 TodoPago 分配的商家 API 密钥 | 字母数字 | 837BE68A892F06C17B944F344AEE8F5F |
商家 | 是 | 由 TodoPago 分配的商家编号 | 数字 | 12345 |
RequestKey | No* | 作为 SendAutorizeRequest 服务响应返回的 RequestKey | 字母数字 | 6d2589f2-37e6-1334-7565-3dc19404480c |
AuthorizationKey | No* | 作为 GetAuthorizeAnswer 服务响应返回的 AuthorizationKey | 字母数字 | 4a2569a2-38e6-4589-1564-4480c3dc1940 |
*只需要这两个字段中的一个即可
示例
$options = array( "Security" => "837BE68A892F06C17B944F344AEE8F5F", // API Key del comercio asignada por TodoPago "Merchant" => "12345", // Merchant o Nro de comercio asignado por TodoPago "RequestKey" => "6d2589f2-37e6-1334-7565-3dc19404480c" // RequestKey devuelto como respuesta del servicio SendAutorizeRequest ); $resp = $todopago->voidRequest($options);
也可以以这种方式调用 voidRequest
方法
$options = array( "Security" => "837BE68A892F06C17B944F344AEE8F5F", // API Key del comercio asignada por TodoPago "Merchant" => "35", // Merchant o Nro de comercio asignado por TodoPago "AuthorizationKey" => "6d2589f2-37e6-1334-7565-3dc19404480c" // AuthorizationKey devuelto como respuesta del servicio GetAuthorizeAnswer ); $resp = $todopago->voidRequest($options);
服务响应
字段 | 必需 | 描述 | 数据类型 | 可能的值 / 示例 |
---|---|---|---|---|
StatusCode | 是 | 结果原因的识别号码 | 数字 | 2011 |
StatusMessage | 是 | 退款结果 | 字母数字 | 操作执行正确 |
如果操作执行正确,将使用代码 2011 和指示操作成功的消息进行通知。
array( "StatusCode" => 2011, "StatusMessage" => "Operación realizada correctamente", );
部分退款
SDK 提供了执行通过 TodoPago 完成的交易的部分退款方法。
注意:对于包含财务成本的促销活动,应基于交易的原值发送要退回的金额,而不是最终收取的金额。TodoPago 将负责退回部分退款对应的财务成本百分比。
需要以以下方式调用 returnRequest
方法
字段 | 必需 | 描述 | 数据类型 | 可能的值 / 示例 |
---|---|---|---|---|
安全性 | 是 | 由 TodoPago 分配的商家 API 密钥 | 字母数字 | 837BE68A892F06C17B944F344AEE8F5F |
商家 | 是 | 由 TodoPago 分配的商家编号 | 数字 | 12345 |
RequestKey | No* | 作为 SendAutorizeRequest 服务响应返回的 RequestKey | 字母数字 | 6d2589f2-37e6-1334-7565-3dc19404480c |
AuthorizationKey | No* | 作为 GetAuthorizeAnswer 服务响应返回的 AuthorizationKey | 字母数字 | 4a2569a2-38e6-4589-1564-4480c3dc1940 |
AMOUNT | 否 | 要退回的金额,如果未发送,则表示全额退款 | 使用 . 作为小数分隔符的字符串,始终包括 2 位小数 | 23.50 |
*只需要这两个字段中的一个即可
示例
$options = array( "Security" => "837BE68A892F06C17B944F344AEE8F5F", // API Key del comercio asignada por TodoPago "Merchant" => "35", // Merchant o Nro de comercio asignado por TodoPago "RequestKey" => "6d2589f2-37e6-1334-7565-3dc19404480c" // RequestKey devuelto como respuesta del servicio SendAutorizeRequest "AMOUNT" => "23.50" // Opcional. Monto a devolver, si no se envía, se trata de una devolución total ); $resp = $todopago->returnRequest($options);
也可以以这种方式调用 returnRequest
方法
$options = array( "Security" => "837BE68A892F06C17B944F344AEE8F5F", // API Key del comercio asignada por TodoPago "Merchant" => "35", // Merchant o Nro de comercio asignado por TodoPago "AuthorizationKey" => "6d2589f2-37e6-1334-7565-3dc19404480c" // AuthorizationKey devuelto como respuesta del servicio GetAuthorizeAnswer "AMOUNT" => "23.50" // Opcional. Monto a devolver, si no se envía, se trata de una devolución total ); $resp = $todopago->returnRequest($options);
服务响应
字段 | 必需 | 描述 | 数据类型 | 可能的值 / 示例 |
---|---|---|---|---|
StatusCode | 是 | 结果原因的识别号码 | 数字 | 2011 |
StatusMessage | 是 | 退款结果 | 字母数字 | 操作执行正确 |
如果操作执行正确,将使用代码 2011 和指示操作成功的消息进行通知。
array( "StatusCode" => 2011, "StatusMessage" => "Operación realizada correctamente", );
#### 混合表单
基本概念
混合表单是替代当前通过 TodoPago 外部表单进行网络重定向的支付方式的一种选择。
通过它,商家可以调整表单的外观和感觉以符合自己的设计。
库
表单需要在页面上包含 TodoPago 的一个 JavaScript 库。
端点取决于环境
- 开发:https://developers.todopago.com.ar/resources/v2/TPBSAForm.min.js
- 生产:https://forms.todopago.com.ar/resources/v2/TPBSAForm.min.js
SDK 还提供了一个方法来获取 JavaScript 库的端点
$sdk = new \TodoPago\Sdk($http_header, $mode); $js = $sdk->getEndpointForm();
实现中的限制和自由度
- 决不能下载提供的 JavaScript,也不能对其进行更改。始终需要从 TodoPago 的服务器获取。
- 表单中的所有字段都不能使用 name 属性。
- 必须提供一个用于处理 Billetera Todo Pago 付款的按钮。
- 所有类型元素都由 Todo Pago API 完成。
- 字段有一个默认的 id。如果需要使用其他 id,则在初始化 Todo Pago 脚本时必须指定这些 id。
- 可以应用所有必要的视觉细节,Todo Pago API 不会修改 class 和 style 属性。
- 可以使用 API 设置表单的 placeholder 属性,为此,在初始化表单时“window.TPFORMAPI.hybridForm.setItem”中指定这些 placeholder。如果没有指定 placeholder,则使用 API 的默认值。
表单的 HTML
实现的表单至少应包含以下字段。
<body> <select id="formaDePagoCbx"></select> <select id="bancoCbx"></select> <select id="promosCbx"></select> <!-- Para los casos en el que el comercio opera con PEI --> <label id="labelPeiCheckboxId"></label> <input id="peiCbx"/> <!-- --> <label id="labelPromotionTextId"></label> <input id="numeroTarjetaTxt"/> <input id="mesTxt"/> <input id="anioTxt"/> <input id="codigoSeguridadTxt"/> <label id="labelCodSegTextId"></label> <input id="apynTxt"/> <select id="tipoDocCbx"></select> <input id="nroDocTxt"/> <input id="emailTxt"/><br/> <!-- Para los casos en el que el comercio opera con PEI --> <label id="labelPeiTokenTextId"></label> <input id="peiTokenTxt"/> <!-- --> <button id="MY_btnPagarConBilletera"/> <button id="MY_btnConfirmarPago"/> </body>
初始化和所需参数
使用 window.TPFORMAPI.hybridForm.initForm 初始化表单。它允许设置所需元素和 id。
要初始化一个付款项,必须调用 window.TPFORMAPI.hybridForm.setItem。它必须提供 publicKey 参数,它对应于 PublicRequestKey(由 SAR 提供)。建议添加用户、电子邮件、文档类型和号码参数。
JavaScript
window.TPFORMAPI.hybridForm.initForm({ callbackValidationErrorFunction: 'validationCollector', callbackCustomSuccessFunction: 'customPaymentSuccessResponse', callbackCustomErrorFunction: 'customPaymentErrorResponse', callbackBilleteraFunction: 'billeteraPaymentResponse', botonPagarId: 'MY_btnConfirmarPago', modalCssClass: 'modal-class', modalContentCssClass: 'modal-content', beforeRequest: 'initLoading', afterRequest: 'stopLoading' }); window.TPFORMAPI.hybridForm.setItem({ publicKey: 'taf08222e-7b32-63d4-d0a6-5cabedrb5782', //obligatorio defaultNombreApellido: 'Usuario', defaultNumeroDoc: 20234211, defaultMail: 'todopago@mail.com', defaultTipoDoc: 'DNI' }); //callbacks de respuesta del pago function validationCollector(parametros) { } function billeteraPaymentResponse(response) { } function customPaymentSuccessResponse(response) { } function customPaymentErrorResponse(response) { } function initLoading() { } function stopLoading() { }
回调函数
表单定义了根据付款状态和信息调用的 JavaScript 回调。
- billeteraPaymentResponse:如果使用 Billetera 进行付款,则返回 response。
- customPaymentSuccessResponse:如果付款正确完成,则返回 response。
- customPaymentErrorResponse:如果在付款过程中发生错误,则返回包含相应代码和消息的 response。
实现示例: 混合表单
获取凭证
SDK 允许通过输入用户名和密码获取 Todo Pago 账户的“Authentification”、“MerchandId”和“Security”凭证。
此功能对于获取实现中的配置参数非常有用。
- 创建 User 类的实例
$http_header = array(); $connector = new Sdk($http_header, "test");//instanciar SDK $datosUsuario = array( "user" => "usuario@todopago.com.ar", "password" => "contraseña" ); $credenciales = new TodoPago\Data\User($datosUsuario);
也可以用以下方式传递用户数据
$credenciales = new TodoPago\Data\User("usuario@todopago.com.ar", "contraseña");
$credenciales = new TodoPago\Data\User(); $credenciales->setUser("usuario@todopago.com.ar"); $credenciales->setPassword("contraseña");
- 获取服务响应
$rta = $connector->getCredentials($credenciales); $rta->getMerchant(); $rta->getApikey();
注意:Security 是从 apiKey 中获取的,删除了 TODOPAGO。
参考表
省份
以下代码用于欺诈控制和计算收入税的扣除。
省份 | 代码 |
---|---|
CABA | C |
布宜诺斯艾利斯 | B |
卡塔马卡 | K |
查科 | H |
查科 | U |
科尔多瓦 | X |
科连特斯 | W |
恩特雷里奥斯 | E |
福莫萨 | P |
胡胡伊 | Y |
拉潘帕 | L |
拉里奥哈 | F |
门多萨 | M |
米西奥内斯 | N |
内乌肯 | Q |
里奥内格罗 | R |
萨尔特 | A |
圣胡安 | J |
圣路易斯 | D |
圣克鲁斯 | Z |
圣菲 | S |
圣塔菲 | G |
火地岛 | V |
图库曼 | T |
操作错误表
消息 ID | 消息 |
---|---|
-1 | 您的购买成功。 |
1081 | 您的余额不足以完成交易。 |
1100 | 输入的金额小于最低允许值。 |
1101 | 输入的金额超过了最高允许值。 |
1102 | 输入的卡号与指定的银行不符。请检查。 |
1104 | 输入的价格超过了最高允许值。 |
1105 | 输入的价格低于最低允许值。 |
2010 | 目前无法完成操作。请稍后再试。返回摘要。 |
2031 | 目前无法进行验证,请稍后再试。 |
2050 | 很抱歉,支付按钮已不可用。请联系您的卖家。 |
2051 | 操作无法处理。请联系您的卖家。 |
2052 | 操作无法处理。请联系您的卖家。 |
2053 | 操作无法处理。请稍后再试。如果问题持续,请联系您的卖家。 |
2054 | 很抱歉,您想购买的产品目前缺货。请联系您的卖家。 |
2056 | 操作无法处理。请稍后再试。 |
2057 | 操作无法处理。请稍后再试。 |
2059 | 操作无法处理。请稍后再试。 |
90000 | 资金的目标账户无效。请检查“我的个人资料”中输入的信息。 |
90001 | 输入的账户不属于注册的CUIT/CUIL。 |
90002 | 我们无法验证您的CUIT/CUIL。有关更多信息,请在此联系我们。 |
99005 | 您的购买无法完成。请重新开始。 |
99900 | 支付已成功完成 |
99901 | 我们未找到与您的钱包绑定的卡。您可以从www.todopago.com.ar添加支付方式。 |
99902 | 未找到选定的支付方式。 |
99903 | 很抱歉,处理操作时发生错误。请稍后再试。 |
99904 | 您的购买无法完成。请联系您的卖家。 |
99953 | 您的购买无法完成。请重新开始或使用其他支付方式。 |
99960 | 此次购买需要VISA授权。请联系您的卡背面上的电话号码。 |
99961 | 此次购买需要AMEX授权。请联系您的卡背面上的电话号码。 |
99970 | 很抱歉,我们无法处理此次操作。请稍后再试。 |
99971 | 很抱歉,我们无法处理此次操作。请稍后再试。 |
99978 | 很抱歉,我们无法处理此次操作。请稍后再试。 |
99979 | 很抱歉,支付无法处理。 |
99980 | 您已在此网站以相同金额支付过。如果您想再次支付,请等待5分钟。 |
99982 | 您的购买无法处理。请使用其他支付方式重新开始。 |
99983 | 很抱歉,支付方式不允许输入这么多分期付款。请稍后再试。 |
99984 | 很抱歉,选定的支付方式不支持分期付款。 |
99985 | 很抱歉,支付无法处理。 |
99986 | 很抱歉,目前无法进行操作。请稍后再试。 |
99987 | 很抱歉,目前无法进行操作。请稍后再试。 |
99988 | 很抱歉,目前支付方式不可用。请稍后再试。 |
99989 | 输入的卡未启用。请联系发卡机构以核实问题。 |
99990 | 输入的卡已过期。请选择其他卡或更新数据。 |
99991 | 提供的信息不正确。请重新输入。 |
99992 | 有效期不正确。请选择其他支付方式或更新数据。 |
99993 | 输入的卡无效。请选择其他卡以进行支付。 |
99994 | 您的卡余额不足以完成此次购买。请使用其他支付方式重新开始。 |
99995 | 输入的卡无效。请选择其他卡进行支付。 |
99996 | 操作被支付方式拒绝,因为输入的金额无效。 |
99997 | 很抱歉,目前无法进行操作。请稍后再试。 |
99998 | 很抱歉,操作被拒绝。请联系发卡机构以核实问题或选择其他支付方式。 |
99999 | 很抱歉,操作无法完成。请联系发卡机构以核实问题或选择其他支付方式。 |
集成错误表
**消息ID** | **描述** |
99977 | 交易被TP验证器拒绝 |
98001 | 错误:CSBTCITY字段是必需的 |
98002 | 错误:CSBTCOUNTRY字段是必需的 |
98003 | 错误:CSBTCUSTOMERID字段是必需的 |
98004 | 错误:CSBTIPADDRESS字段是必需的 |
98005 | 错误:CSBTEMAIL字段是必需的 |
98006 | 错误:CSBTFIRSTNAME字段是必需的 |
98007 | 错误:CSBTLASTNAME字段是必需的 |
98008 | 错误:CSBTPHONENUMBER字段是必需的 |
98009 | 错误:CSBTPOSTALCODE字段是必需的 |
98010 | 错误:CSBTSTATE字段是必需的 |
98011 | 错误:CSBTSTREET1字段是必需的 |
98012 | 错误:CSBTSTREET2字段是必需的 |
98013 | 错误:CSPTCURRENCY字段是必需的 |
98014 | 错误:CSPTGRANDTOTALAMOUNT字段是必需的 |
98015 | 错误:CSMDD7字段是必需的 |
98016 | 错误:CSMDD8字段是必需的 |
98017 | 错误:CSMDD9字段是必需的 |
98018 | 错误:CSMDD10字段是必需的 |
98019 | 错误:CSMDD11字段是必需的 |
98020 | 错误:CSSTCITY字段是必需的 |
98021 | 错误:CSSTCOUNTRY字段是必需的 |
98022 | 错误:CSSTEMAIL字段是必需的 |
98023 | 错误:CSSTFIRSTNAME字段是必需的 |
98024 | 错误:CSSTLASTNAME字段是必需的 |
98025 | 错误:CSSTPHONENUMBER字段是必需的 |
98026 | 错误:CSSTPOSTALCODE字段是必需的 |
98027 | 错误:CSSTSTATE字段是必需的 |
98028 | 错误:CSSTSTREET1字段是必需的 |
98029 | 错误:CSMDD12字段是必需的 |
98030 | 错误:CSMDD13字段是必需的 |
98031 | 错误:CSMDD14字段是必需的 |
98032 | 错误:CSMDD15字段是必需的 |
98033 | 错误:CSMDD16字段是必需的 |
98034 | 错误:CSITPRODUCTCODE字段是必需的 |
98035 | 错误:CSITPRODUCTDESCRIPTION字段是必需的 |
98036 | 错误:CSITPRODUCTNAME字段是必需的 |
98037 | 错误:CSITPRODUCTSKU字段是必需的 |
98038 | 错误:CSITTOTALAMOUNT字段是必需的 |
98039 | 错误:CSITQUANTITY字段是必需的 |
98040 | 错误:CSITUNITPRICE字段是必需的 |
98101 | 错误:CSBTCITY字段的格式不正确 |
98102 | 错误:CSBTCOUNTRY字段的格式不正确 |
98103 | 错误:CSBTCUSTOMERID字段的格式不正确 |
98104 | 错误:CSBTIPADDRESS字段的格式不正确 |
98105 | 错误:CSBTEMAIL字段的格式不正确 |
98106 | 错误:CSBTFIRSTNAME字段的格式不正确 |
98107 | 错误:CSBTLASTNAME字段的格式不正确 |
98108 | 错误:CSBTPHONENUMBER字段的格式不正确 |
98109 | 错误:CSBTPOSTALCODE字段的格式不正确 |
98110 | 错误:CSBTSTATE字段的格式不正确 |
98111 | 错误:CSBTSTREET1字段的格式不正确 |
98112 | 错误:CSBTSTREET2字段的格式不正确 |
98113 | 错误:CSPTCURRENCY字段的格式不正确 |
98114 | 错误:CSPTGRANDTOTALAMOUNT字段的格式不正确 |
98115 | 错误:CSMDD7字段的格式不正确 |
98116 | 错误:CSMDD8字段的格式不正确 |
98117 | 错误:CSMDD9字段的格式不正确 |
98118 | 错误:CSMDD10字段的格式不正确 |
98119 | 错误:CSMDD11字段的格式不正确 |
98120 | 错误:CSSTCITY字段的格式不正确 |
98121 | 错误:CSSTCOUNTRY字段的格式不正确 |
98122 | 错误:CSSTEMAIL字段的格式不正确 |
98123 | 错误:CSSTFIRSTNAME字段的格式不正确 |
98124 | 错误:CSSTLASTNAME字段的格式不正确 |
98125 | 错误:CSSTPHONENUMBER字段的格式不正确 |
98126 | 错误:CSSTPOSTALCODE字段的格式不正确 |
98127 | 错误:CSSTSTATE字段的格式不正确 |
98128 | 错误:CSSTSTREET1字段的格式不正确 |
98129 | 错误:CSMDD12字段的格式不正确 |
98130 | 错误:CSMDD13字段的格式不正确 |
98131 | 错误:CSMDD14字段的格式不正确 |
98132 | 错误:CSMDD15字段的格式不正确 |
98133 | 错误:CSMDD16字段的格式不正确 |
98134 | 错误:CSITPRODUCTCODE字段的格式不正确 |
98135 | 错误:CSITPRODUCTDESCRIPTION 字段格式不正确 |
98136 | 错误:CSITPRODUCTNAME 字段格式不正确 |
98137 | 错误:CSITPRODUCTSKU 字段格式不正确 |
98138 | 错误:CSITTOTALAMOUNT 字段格式不正确 |
98139 | 错误:CSITQUANTITY 字段格式不正确 |
98140 | 错误:CSITUNITPRICE 字段格式不正确 |
98201 | 错误:产品信息存在错误 |
98202 | 错误:产品 CSITPRODUCTDESCRIPTION 信息存在错误 |
98203 | 错误:产品 CSITPRODUCTNAME 信息存在错误 |
98204 | 错误:产品 CSITPRODUCTSKU 信息存在错误 |
98205 | 错误:产品 CSITTOTALAMOUNT 信息存在错误 |
98206 | 错误:产品 CSITQUANTITY 信息存在错误 |
98207 | 错误:产品 CSITUNITPRICE 信息存在错误 |