Webservices (soap,rest,...) - Error en consulta WS de Afip

 
Vista:
sin imagen de perfil
Val: 3
Ha aumentado su posición en 13 puestos en Webservices (soap,rest,...) (en relación al último mes)
Gráfica de Webservices (soap,rest,...)

Error en consulta WS de Afip

Publicado por CARLOS (3 intervenciones) el 26/01/2020 22:38:53
Buenas tardes,
El problema que no puedo solucionar, es un error que recibo al intentar enviar un dato específico => "Comprobantes Asociados", junto al Pedido de Autorización de una NOTA DE CREDITO ELECTRONICA (Codigo 203), al WS de Afip de Facturas Electrónicas V1 de Argentina.
El código venía funcionando bien hasta la modificación que tuve que hacer por la incorporación de las FACTURAS DE CREDITO, las cuales genero perfectamente. El problema por ahora es solo con las NCE (cód. 203).

Lo que me devuelve wsfev1 al enviar el pedido de autorización, cuando adjunto "Comprobantes Asociados", en lugar del CAE correspondiente, es un Código de Error 10062.
El detalle de la respuesta es:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
stdClass Object
(
    [FECAESolicitarResult] => stdClass Object
        (
            [FeCabResp] => stdClass Object
                (
                    [Cuit] => 20120794362
                    [PtoVta] => 6
                    [CbteTipo] => 203
                    [FchProceso] => 20200125204639
                    [CantReg] => 1
                    [Resultado] => R
                    [Reproceso] => N
                )
 
            [FeDetResp] => stdClass Object
                (
                    [FECAEDetResponse] => stdClass Object
                        (
                            [Concepto] => 2
                            [DocTipo] => 80
                            [DocNro] => 30500124152
                            [CbteDesde] => 1
                            [CbteHasta] => 1
                            [CbteFch] => 20200125
                            [Resultado] => R
                            [Observaciones] => stdClass Object
                                (
                                    [Obs] => stdClass Object
                                        (
                                            Code] => 10062
                                            [Msg] => Si envia CbtesAsoc, CbteAsoc es obligatorio.
                                        )
 
                                )
 
                            [CAE] =>
                            [CAEFchVto] =>
                        )
 
                )
 
        )
 
)

Les paso el código con la función getCAE que utilizo y que funciona bien con todo lo demás, menos con NCE (203):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
public function getCAE($dataFac,$pvta,$tcom) {   //  GENERA UNA SOLICITUD DE CAE
 
    $data = $dataFac[0];
 
// echo "*** AfipWS ***<br/>\n";
// echo "data[los_asoc]:<br/>\n";
// echo print_r ($data["los_asoc"]);
// echo "<br/>\n*************<br/>\n";
// echo "data[los_ivas]:<br/>\n";
// echo print_r ($data["los_ivas"]);
// echo "<br/>\n*************<br/>\n";
// echo "<br/>\n";
 
    //// Armar un Array() para el 'FeDetReq'
    //// según las variables entrantes
 
    $detalle = array();
    if($tcom == 201 || $tcom == 202 || $tcom == 206 || $tcom == 207){
        //// Si es Factura de Crédito agrega los Datos Opcionales
        $detalle = array(	'Concepto' => $data["concepto"],
                            'DocTipo'  => $data["tipo_doc"],
                            'DocNro' => $data["nro_doc"],
                            'CbteDesde' => $data["cbt_desde"],
                            'CbteHasta' => $data["cbt_hasta"],
                            'CbteFch' => $data["fecha_cbte"],
                            'ImpTotal' => $data["imp_total"],
                            'ImpTotConc' => $data["imp_tot_conc"],
                            'ImpNeto' => $data["imp_neto"],
                            'ImpTrib' => $data["imp_trib"],
                            'ImpOpEx' => $data["imp_op_ex"],
                            'ImpIVA' => $data["impto_liq"],
                            'FchServDesde' => $data["fecha_serv_desde"],
                            'FchServHasta' => $data["fecha_serv_hasta"],
                            'FchVtoPago' => $data["fecha_vto_pago"],
                            'MonId' => $data["cod_mon"],
                            'MonCotiz' => $data["tipo_cambio"],
                            'Iva' => array('AlicIva' => $data["los_ivas"]),
                            'Opcionales' => array('Opcional' => $data["los_opci"])
                        );
    }else if($tcom == 203 || $tcom == 208){
        //// Si es Nota de Crédito Electrónica agrega los Comprobantes Asociados
        $detalle = array(	'Concepto' => $data["concepto"],
                            'DocTipo'  => $data["tipo_doc"],
                            'DocNro' => $data["nro_doc"],
                            'CbteDesde' => $data["cbt_desde"],
                            'CbteHasta' => $data["cbt_hasta"],
                            'CbteFch' => $data["fecha_cbte"],
                            'ImpTotal' => $data["imp_total"],
                            'ImpTotConc' => $data["imp_tot_conc"],
                            'ImpNeto' => $data["imp_neto"],
                            'ImpTrib' => $data["imp_trib"],
                            'ImpOpEx' => $data["imp_op_ex"],
                            'ImpIVA' => $data["impto_liq"],
                            'FchServDesde' => $data["fecha_serv_desde"],
                            'FchServHasta' => $data["fecha_serv_hasta"],
                            'MonId' => $data["cod_mon"],
                            'MonCotiz' => $data["tipo_cambio"],
                            'CbtesAsoc' => array('CbteAsoc>' => array(	'Tipo' => "201",                  // <= AQUI ESTOY ENVIANDO
                                                                'PtoVta' => "6",                  // <= LOS DATOS QUE NO RECONOCE
                                                                'Nro'	=> "1",
                                                                'Cuit' => "20120794362",
                                                                'CbteFch'	=> "20200102"
                                                                 )
                                                ),
                            'Iva' => array('AlicIva' => $data["los_ivas"])
 
                            // 'CbtesAsoc' => array('CbteAsoc>' => $data["los_asoc"]),
                        );
    }else{
        $detalle = array(	'Concepto' => $data["concepto"],
                            'DocTipo'  => $data["tipo_doc"],
                            'DocNro' => $data["nro_doc"],
                            'CbteDesde' => $data["cbt_desde"],
                            'CbteHasta' => $data["cbt_hasta"],
                            'CbteFch' => $data["fecha_cbte"],
                            'ImpTotal' => $data["imp_total"],
                            'ImpTotConc' => $data["imp_tot_conc"],
                            'ImpNeto' => $data["imp_neto"],
                            'ImpTrib' => $data["imp_trib"],
                            'ImpOpEx' => $data["imp_op_ex"],
                            'ImpIVA' => $data["impto_liq"],
                            'FchServDesde' => $data["fecha_serv_desde"],
                            'FchServHasta' => $data["fecha_serv_hasta"],
                            'FchVtoPago' => $data["fecha_vto_pago"],
                            'MonId' => $data["cod_mon"],
                            'MonCotiz' => $data["tipo_cambio"],
                            'Iva' => array('AlicIva' => $data["los_ivas"])
                        );
    }
 
// echo "*** AfipWS ***<br/>\n";
// echo "detalle:<br/>\n";
// echo print_r($detalle)."*<br/>\n";
// echo "*************<br/>\n";
// echo "<br/>\n";
 
    $results = $this->cliente->FECAESolicitar(
        array(
            'Auth' => array(
                'Token' => $this->token,
                'Sign'  => $this->sign,
                'Cuit'  => $this->cert_cuit
            ),
            'FeCAEReq' => array(
                'FeCabReq' => array(
                    'CantReg' => 1,
                    'PtoVta' => $pvta,
                    'CbteTipo' => $tcom
                ),
                'FeDetReq' => array(
                    'FECAEDetRequest' => $detalle
                )
            )
        )
    );
 
    // Save Response
    $nro = Util::completaCerosIzq($pvta,4)."-".Util::completaCerosIzq($tcom,3)."-".Util::completaCerosIzq($data["cbt_desde"],8);
    file_put_contents($this->path_file_txt."cae_".$nro.".txt", print_r($results, true));
 
    // $xmlTxt = new SimpleXMLElement($results);
    /*
    $xmlTxt = new SimpleXMLElement('<root/>');
    array_walk_recursive($results, array ($xmlTxt, 'addChild'));
    $xml = new SimpleXMLElement('<root/>');
    array_walk_recursive($results, function($value, $key)use($xml){
        $xml->addChild($key, $value);
    });
    $xml->asXml($this->path_file_txt."cae_".$nro.".xml");
    */
    return $results;
}

En CbtesAsoc -> CbteAsoc, incluyo una array que como verán está forzado con valores constantes, para asegurarme que estaba enviando lo que el ws esperaba. Pero aún así, me sigue devolviendo el error 10062 => "Si envia CbtesAsoc, CbteAsoc es obligatorio."

Por las dudas, adjunto la estructura del registro SOAP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ar="http://ar.gov.afip.dif.FEV1/">
	<soapenv:Header/>
	<soapenv:Body>
		<ar:FECAESolicitar>
			<ar:Auth>
				<ar:Token>string</ar:Token>
				<ar:Sign>string</ar:Sign>
				<ar:Cuit>long</ar:Cuit>
			</ar:Auth>
			<ar:FeCAEReq>
				<ar:FeCabReq>
					<ar:CantReg>int</ar:CantReg>
					<ar:PtoVta>int</ar:PtoVta>
					<ar:CbteTipo>int</ar:CbteTipo>
				</ar:FeCabReq>
				<ar:FeDetReq>
					<ar:FECAEDetRequest>
						<ar:Concepto>int</ar:Concepto>
						<ar:DocTipo>int</ar:DocTipo>
						<ar:DocNro>long</ar:DocNro>
						<ar:CbteDesde>long</ar:CbteDesde>
						<ar:CbteHasta>long</ar:CbteHasta>
						<ar:CbteFch>string</ar:CbteFch>
						<ar:ImpTotal>double</ar:ImpTotal>
						<ar:ImpTotConc>double</ar:ImpTotConc>
						<ar:ImpNeto>double</ar:ImpNeto>
						<ar:ImpOpEx>double</ar:ImpOpEx>
						<ar:ImpTrib>double</ar:ImpTrib>
						<ar:ImpIVA>double</ar:ImpIVA>
						<ar:FchServDesde>string</ar:FchServDesde>
						<ar:FchServHasta>string</ar:FchServHasta>
						<ar:FchVtoPago>string</ar:FchVtoPago>
						<ar:MonId>string</ar:MonId>
						<ar:MonCotiz>double</ar:MonCotiz>
						<ar:CbtesAsoc>
							<ar:CbteAsoc>
								<ar:Tipo>short</ar:Tipo>
								<ar:PtoVta>int</ar:PtoVta>
								<ar:Nro>Long</ar:Nro>
								<ar:Cuit>String</ar:Cuit>
								<ar:CbteFch>String</ar:CbteFch>
							</ar:CbteAsoc>
						</ar:CbtesAsoc>
						<ar:Tributos>
							<ar:Tributo>
								<ar:Id>short</ar:Id>
								<ar:Desc>string</ar:Desc>
								<ar:BaseImp>double</ar:BaseImp>
								<ar:Alic>double</ar:Alic>
								<ar:Importe>double</ar:Importe>
							</ar:Tributo>
						</ar:Tributos>
						<ar:Iva>
							<ar:AlicIva>
								<ar:Id>short</ar:Id>
								<ar:BaseImp>double</ar:BaseImp>
								<ar:Importe>double</ar:Importe>
							</ar:AlicIva>
						</ar:Iva>
						<ar:Opcionales>
							<ar:Opcional>
								<ar:Id>string</ar:Id>
								<ar:Valor>string</ar:Valor>
							</ar:Opcional>
						</ar:Opcionales>
					</ar:FECAEDetRequest>
				</ar:FeDetReq>
			</ar:FeCAEReq>
		</ar:FECAESolicitar>
	</soapenv:Body>
</soapenv:Envelope>

Desde ya, agradezco cualquier colaboración para encontrar la solución de este problema.

SALUDOS!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder