php - Obtener ID de transacción de autorización de authorize.net Autorizar AIM
wordpress csv (1)
La cadena de respuesta devuelta por Authorize.Net se verá más o menos así:
1|1|1|This transaction has been approved.|4DHVNH|Y|2230582188|none|Test transaction for ValidateCustomerPaymentProfile.|0.00|CC|auth_only|none|John|Doe||123 Main St.|Bellevue|WA|98004|USA|800-555-1234|800-555-1234|[email protected]|||||||||0.00|0.00|0.00|FALSE|none|E440D094322A0D406E01EDF9CE871A4F||2|||||||||||XXXX1111|Visa||||||||||||||||
Estos son los resultados separados por un |
cuál es el carácter delimitador que estableces aquí:
"x_delim_char" => "|",
Rompe correctamente la cadena usando explode()
:
$response_array = explode($post_values["x_delim_char"],$post_response);
que nos da esa información en una matriz llamada $response_array
.
En la respuesta de Authorize.Net, la identificación de la transacción es 2230582188
. En nuestra matriz, ese es el séptimo elemento para que podamos obtenerlo usando:
$transaction_id = $response_array[6];
Estoy creando un plugin de informes woocommerce personalizado que mostrará cierta información y la escupirá como .csv. Lo devuelvo como nombre, nombre de la compañía, producto y cantidad. Lo hago de la siguiente manera.
/**
* Check if we need customer phone.
*/
case ''wc_settings_tab_customer_phone'':
array_push( $csv_values, self::customer_meta( get_the_ID(), ''_billing_phone'' ) );
break;
Ahora estoy usando Authorize.net AIM Payment Gateway para el complemento de Woocommerce para que se genere una ID de transacción.
Quiero incluir esto en mi exportación .csv. ¿Cómo voy a hacer esto? Intenté buscar en los archivos del complemento y me di cuenta de que esto es lo que el ID de la transacción era $response_array[6]
pero no puedo encontrar la forma de devolverlo. ¡Si alguien pudiera mostrarme cómo acceder a la API de Authorize.net y obtener la identificación de la transacción que sería increíble! ¡Gracias de antemano!
EDITAR: Esto es lo que tengo hasta ahora. Agregué el código php para conectar pero parece que no puedo extraer la identificación de transacción de la orden. Por cierto, el "x_login" y "x_tran_key" han sido eliminados y reemplazados por "test123".
case ''wc_settings_tab_authorize_id'':
$post_url = "https://secure.authorize.net/gateway/transact.dll";
$post_values = array(
// the API Login ID and Transaction Key must be replaced with valid values
"x_login" => "test123",
"x_tran_key" => "test123",
"x_version" => "3.1",
"x_delim_data" => "TRUE",
"x_delim_char" => "|",
"x_relay_response" => "FALSE",
// Additional fields can be added here as outlined in the AIM integration
// guide at: http://developer.authorize.net
);
// This sample code uses the CURL library for php to establish a connection,
// submit the post, and record the response.
// If you receive an error, you may want to ensure that you have the curl
// library enabled in your php configuration
$request = curl_init($post_url); // initiate curl object
curl_setopt($request, CURLOPT_HEADER, 0); // set to 0 to eliminate header info from response
curl_setopt($request, CURLOPT_RETURNTRANSFER, 1); // Returns response data instead of TRUE(1)
curl_setopt($request, CURLOPT_POSTFIELDS, $post_string); // use HTTP POST to send form data
curl_setopt($request, CURLOPT_SSL_VERIFYPEER, FALSE); // uncomment this line if you get no gateway response.
$post_response = curl_exec($request); // execute curl post and store results in $post_response
// additional options may be required depending upon your server configuration
// you can find documentation on curl options at http://www.php.net/curl_setopt
curl_close ($request); // close curl object
// This line takes the response and breaks it into an array using the specified delimiting character
$response_array = explode($post_values["x_delim_char"],$post_response);
array_push( $csv_values, TransactionID() );
break;
EDIT 2: Implementando el código de John
case ''wc_settings_tab_authorize_id'':
$post_url = "https://secure.authorize.net/gateway/transact.dll";
$post_values = array(
// the API Login ID and Transaction Key must be replaced with valid values
"x_login" => "test123",
"x_tran_key" => "test123",
"x_version" => "3.1",
"x_delim_data" => "TRUE",
"x_delim_char" => "|",
"x_relay_response" => "FALSE",
// Additional fields can be added here as outlined in the AIM integration
// guide at: http://developer.authorize.net
);
// This sample code uses the CURL library for php to establish a connection,
// submit the post, and record the response.
// If you receive an error, you may want to ensure that you have the curl
// library enabled in your php configuration
$request = curl_init($post_url); // initiate curl object
curl_setopt($request, CURLOPT_HEADER, 0); // set to 0 to eliminate header info from response
curl_setopt($request, CURLOPT_RETURNTRANSFER, 1); // Returns response data instead of TRUE(1)
curl_setopt($request, CURLOPT_POSTFIELDS, $post_string); // use HTTP POST to send form data
curl_setopt($request, CURLOPT_SSL_VERIFYPEER, FALSE); // uncomment this line if you get no gateway response.
$post_response = curl_exec($request); // execute curl post and store results in $post_response
// additional options may be required depending upon your server configuration
// you can find documentation on curl options at http://www.php.net/curl_setopt
curl_close ($request); // close curl object
$post_response = ''1|1|1|This transaction has been approved.|4DHVNH|Y|2230582188|none|Test transaction for ValidateCustomerPaymentProfile.|0.00|CC|auth_only|none|John|Doe||123 Main St.|Bellevue|WA|98004|USA|800-555-1234|800-555-1234|[email protected]|||||||||0.00|0.00|0.00|FALSE|none|E440D094322A0D406E01EDF9CE871A4F||2|||||||||||XXXX1111|Visa||||||||||||||||'';
$response_array = explode(''|'',$post_response);
$transaction_id = $response_array[6];
array_push( $csv_values, $transaction_id );
break;
EDIT 3: Bien, esto es lo que tengo actualmente (excluyendo la API y la clave de transacción).
/**
* Check for authorize.net transaction id.
*/
case ''wc_settings_tab_authorize_id'':
$post_url = "https://secure.authorize.net/gateway/transact.dll";
$post_values = array(
// the API Login ID and Transaction Key must be replaced with valid values
"x_login" => "TEST",
"x_tran_key" => "TEST",
"x_version" => "3.1",
"x_delim_data" => "TRUE",
"x_delim_char" => "|",
"x_relay_response" => "FALSE",
// Additional fields can be added here as outlined in the AIM integration
// guide at: http://developer.authorize.net
);
// This sample code uses the CURL library for php to establish a connection,
// submit the post, and record the response.
// If you receive an error, you may want to ensure that you have the curl
// library enabled in your php configuration
$request = curl_init($post_url); // initiate curl object
curl_setopt($request, CURLOPT_HEADER, 0); // set to 0 to eliminate header info from response
curl_setopt($request, CURLOPT_RETURNTRANSFER, 1); // Returns response data instead of TRUE(1)
curl_setopt($request, CURLOPT_POSTFIELDS, http_build_query($post_values)); // use HTTP POST to send form data
curl_setopt($request, CURLOPT_SSL_VERIFYPEER, FALSE); // uncomment this line if you get no gateway response.
$post_response = curl_exec($request); // execute curl post and store results in $post_response
// additional options may be required depending upon your server configuration
// you can find documentation on curl options at http://www.php.net/curl_setopt
curl_close ($request); // close curl object
// This line takes the response and breaks it into an array using the specified delimiting character
$response_array = explode($post_values["x_delim_char"],$post_response);
$transaction_id = $response_array[6];
array_push( $csv_values, $transaction_id );
break;
Todavía no puedo entender por qué esto no funcionará. Cuando intento devolver $transaction_id
, obtengo el valor 0
. Cuando pruebo $post_response
para ver qué devuelve, obtengo esto:
3|2|33|Credit card number is required.||P|0|||0.00|CC|auth_capture||||||||||||||||||||||||||THISISANALPHANUMERICNUMBER||||||||||||||||||||||||||||||
Antes había una cadena alfanumérica pero la reemplacé por razones de seguridad. ¿Crees que esto puede estar sucediendo porque no estoy estableciendo un número de cc o dirección de facturación con él?