Error E00003 The element 'subscription' in namespace 'AnetApi/sml/v1/schema/AnetApiSchema.xsd' has invalid child element 'cusotmer' in namespace 'AnetApi/xml/v1/schema/AnetApiSchema.xsd'. List of possible elements expected: 'shipTo', profile' in namespace 'AnetApi/xml/v1/schema/AnetApiSchema.xsd'.
Getting this error when trying to add an ARB subscription. We're not using profiles, but according to the API docs, "customer" should be a valid sub element of "subscription".
https://developer.authorize.net/api/reference/#recurring-billing-create-a-subscription
Full code:
<?php
...
public function create_subscription($transaction) {
global $custom_options;
if(isset($transaction) and $transaction instanceof Transaction) {
$usr = $transaction->user();
$prd = $transaction->product();
$sub = $transaction->subscription();
}
else {
throw new CustomGatewayException( 'Payment was unsuccessful, please check your payment details and try again.' );
}
$invoice = $this->create_new_order_invoice($sub);
// Default to 9999 for infinite occurrences
$total_occurrences = $sub->limit_cycles ? $sub->limit_cycles_num : 9999;
$args = array( "refId" => $invoice,
"subscription" => array(
"name" => $prd->post_title,
"paymentSchedule" => array(
"interval" => $this->arb_subscription_interval($sub),
"startDate" => Utils::get_date_from_ts((time() + (($sub->trial)?Utils::days($sub->trial_days):0)), 'Y-m-d'),
"totalOccurrences" => $total_occurrences,
),
"amount" => Utils::format_float($sub->total),
"payment" => array(
"creditCard" => array(
"cardNumber" => sanitize_text_field($_POST['custom_cc_num']),
"expirationDate" => sanitize_text_field($_POST['custom_cc_exp_month']) . '-' . sanitize_text_field($_POST['custom_cc_exp_year']),
"cardCode" => sanitize_text_field($_POST['custom_cvv_code'])
)
),
"order" => array(
"invoiceNumber" => $invoice,
"description" => $prd->post_title
),
"billTo" => array(
"firstName" => $usr->first_name,
"lastName" => $usr->last_name
),
"customer" => array(
"email" => $usr->user_email
)
)
);
if($custom_options->show_address_fields && $custom_options->require_address_fields) {
$args['subscription']['billTo'] =
array_merge($args['subscription']['billTo'],
array("address" => str_replace('&', '&', get_user_meta($usr->ID, 'custom-address-one', true)),
"city" => get_user_meta($usr->ID, 'custom-address-city', true),
"state" => get_user_meta($usr->ID, 'custom-address-state', true),
"zip" => get_user_meta($usr->ID, 'custom-address-zip', true),
"country" => get_user_meta($usr->ID, 'custom-address-country', true)));
}
$res = $this->send_arb_request('ARBCreateSubscriptionRequest', $args);
...
protected function send_arb_request($method, $args, $http_method = 'post') {
$args = array_merge(
array(
"merchantAuthentication" => array(
"name" => $this->settings->login_name,
"transactionKey" => $this->settings->transaction_key
)
),
$args
);
$content = $this->arb_array_to_xml($method, $args);
$remote_array = array('method' => strtoupper($http_method),
'timeout' => 30,
'redirection' => 5,
'httpversion' => '1.0',
'blocking' => true,
'headers' => array('content-type' => 'application/xml'),
'body' => $content,
'cookies' => array());
$response = wp_remote_post('https://api2.authorize.net/xml/v1/request.api', $remote_array);
...Is the (https://api2.authorize.net/xml/v1/request.api) endpoint the problem?
Thanks for any help!
Solved! Go to Solution.
08-14-2019 01:03 PM
So you are creating XML with that. In your code below, I think it is the customer and billTo properties being out of order.
$args = array( "refId" => $invoice,
"subscription" => array(
"name" => $prd->post_title,
"paymentSchedule" => array(
"interval" => $this->arb_subscription_interval($sub),
"startDate" => Utils::get_date_from_ts((time() + (($sub->trial)?Utils::days($sub->trial_days):0)), 'Y-m-d'),
"totalOccurrences" => $total_occurrences,
),
"amount" => Utils::format_float($sub->total),
"payment" => array(
"creditCard" => array(
"cardNumber" => sanitize_text_field($_POST['custom_cc_num']),
"expirationDate" => sanitize_text_field($_POST['custom_cc_exp_month']) . '-' . sanitize_text_field($_POST['custom_cc_exp_year']),
"cardCode" => sanitize_text_field($_POST['custom_cvv_code'])
)
),
"order" => array(
"invoiceNumber" => $invoice,
"description" => $prd->post_title
),
"billTo" => array(
"firstName" => $usr->first_name,
"lastName" => $usr->last_name
),
"customer" => array(
"email" => $usr->user_email
)
)
);
you are getting this error:
error E00003 The element 'subscription' in namespace 'AnetApi/sml/v1/schema/AnetApiSchema.xsd' has invalid child element 'customer' in namespace 'AnetApi/xml/v1/schema/AnetApiSchema.xsd'. List of possible elements expected: 'shipTo', profile' in namespace 'AnetApi/xml/v1/schema/AnetApiSchema.xsd'.
Because the next child element following billTo is shipTo, but your request gives customer. Put customer after order and billTo after customer and it should work.
09-03-2019 03:56 PM
@Renaissance any ideas? I've tried different endpoints, but I can't seem to get around the Email required error. I disabled email as required in the Form Fields, but the processor must be requiring the email. So we have to provide the email.
08-27-2019 10:31 AM
The customer object is a direct property of the TransactionRequestType. Try that and it should work.
08-29-2019 03:44 PM
08-29-2019 04:13 PM
08-30-2019 04:34 AM
The error message has "cusotmer" where your code says "customer"?
customer is a child of subscription.
08-30-2019 06:01 PM - edited 08-30-2019 06:02 PM
08-31-2019 04:42 AM
Sometimes simple spelling mistakes can generate this kind of errors. Recently this literally happened with me and It took more than 2 hours to solve that problem.
09-01-2019 03:34 AM
I had to type the error manually as it was given to me in a screenshot. I made a typo there. The code is correctly using "customer" and the error message is correctly reflecting "customer" as well. Just a typo in the OP is all. Screenshot: http://cspf.co/fb4c81da8add
09-03-2019 08:00 AM
09-03-2019 02:04 PM