todopago/php-sdk

此包的最新版本(V1.10.1)没有可用的许可信息。

TodoPago SDK

此包的规范存储库似乎已丢失,因此该包已被冻结。

安装: 187,564

依赖关系: 1

建议者: 0

安全性: 0

星标: 27

观察者: 76

分支: 28

公开问题: 5

语言:HTML

V1.10.1 2017-08-09 19:37 UTC

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的专属网站上或通过其商业代表进行注册。在这些过程中将生成用于此服务的用户名和密码。

一旦注册,将自动创建一个虚拟账户,用于存入通过本支付方式进行的收款。

序列图

imagen de configuracion

授权请求

在这种情况下,需要调用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位数字
  • -1 -> OK
  • 其他 -> 错误
**StatusMessage**返回代码或服务状态的描述最多256个字符示例:授权请求已注册
**URL_Request**支付表单的URLURLhttps://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
);

必须保存和恢复RequestKeyAnswerKey字段的值。

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
          );

此方法返回交易数据的摘要。

如果传递了错误的AnswerKeyRequestKey,将看到以下拒绝

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

特点

操作状态

estado

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笔操作。

支付方式发现

medios de pago

SDK 提供了一个方法来获取 TodoPago 中所有启用的支付方式。

$client = new TodoPago\Sdk($http_header, $mode);
$rta = $client->discoverPaymentMethods();

退款

devolucion parcial

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",
);

部分退款

devolucion parcial

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 库。
端点取决于环境

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。

实现示例混合表单

返回首页

获取凭证

credenciales

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。

返回首页

参考表

省份

以下代码用于欺诈控制和计算收入税的扣除。

省份代码
CABAC
布宜诺斯艾利斯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 信息存在错误

返回首页