First of all i am working on this for past 3 days and still don't know what is causing this issue.
Following is the code.
$api_url = 'Soap URl';
$api_user = 'User';
$api_key = 'API key';
$proxy = new SoapClient($api_url);
try {
$sessionId = $proxy->login($api_user, $api_key);
$customers = $proxy->call($sessionId, 'customer.list', array(array('email' => 'testing123456@gmail.com')));
if(count($customers) == 0 ){
$customer_data = array(
'email' => 'testing123456@gmail.com',
'firstname' => 'ritesh',
'lastname' => 'patadiya',
'password' => 'test1234',
'website_id' => 1,
'store_id' => 1,
'group_id' => 1
);
$customer = $proxy->call($sessionId,'customer.create',array($customer_data));
}
else{
$customer = $customers[0];
}
$customer['mode'] = 'customer';
$shoppingCartId = $proxy->call($sessionId, 'cart.create', array('1'));
try{
$resultCustomerSet = $proxy->call($sessionId, 'cart_customer.set', array($shoppingCartId, $customer));
} catch (Exception $ex){
echo "cart customer set = ".$ex->getMessage();
}
$arrAddresses = array(
array(
"mode" => "shipping",
"firstname" => "ritesh",
"lastname" => "patadiya",
"company" => "rb",
"street" => "wall street",
"city" => "rajkot",
"region" => "gujarat",
"postcode" => "4567892",
"country_id" => "id",
"telephone" => "0123456789",
"fax" => "0123456789",
"is_default_shipping" => 0,
"is_default_billing" => 0
),
array(
"mode" => "billing",
"firstname" => "ritesh",
"lastname" => "patadiya",
"company" => "rb",
"street" => "wall street",
"city" => "rajkot",
"region" => "gujarat",
"postcode" => "123456",
"country_id" => "id",
"telephone" => "0123456789",
"fax" => "0123456789",
"is_default_shipping" => 0,
"is_default_billing" => 0
)
);
try{
$resultCustomerAddresses = $proxy->call($sessionId, "cart_customer.addresses", array($shoppingCartId, $arrAddresses));
} catch (Exception $ex) {
echo '<br />cart_customer.addresses'.$ex->getMessage();
}
// Disable shipping method when product is virtual.
// try{
// $resultShippingMethods = $proxy->call($sessionId, "cart_shipping.list", array($shoppingCartId));
// $shippingMethod = $resultShippingMethods[0]["code"];
// $resultShippingMethod = $proxy->call($sessionId, "cart_shipping.method", array($shoppingCartId, $shippingMethod));
// } catch(Exception $ex){
// echo '<br />cart_shipping.method'.$ex->getMessage();
// }
$arrProducts = array(
array(
// "sku" => "FBP001" // This is virtual product, we have modified price to 0.01
"sku" => "DEM001R" // This is virtual product, we have modified price to 0.01
)
);
try{
$resultCartProductAdd = $proxy->call($sessionId, "cart_product.add", array($shoppingCartId, $arrProducts));
}
catch(Exception $ex){
echo '<br />cart_product.add'.$ex->getMessage();
}
try{
$resultPaymentMethods = $proxy->call($sessionId, "cart_payment.list", array($shoppingCartId));
} catch(Exception $ex){
echo '<br />payment method'.$ex->getMessage();
}
$paymentMethod = array(
'po_number' => null,
'method' => $resultPaymentMethods[0]['code'],
'cc_cid' => trim($_POST["cc_cid"]),
'cc_owner' => trim($_POST["cc_owner"]),
'cc_number' => trim($_POST["cc_number"]),
'cc_type' => trim($_POST["cc_type"]), // AE = American Express, VI = Visa, MC = MasterCard, DI = Discover
'cc_exp_year' => trim($_POST["cc_exp_year"]),
'cc_exp_month' => trim($_POST["cc_exp_month"])
);
echo "<br />Method: ".$resultPaymentMethods[0]['code'];
echo "<br />Cvv: ".$_POST["cc_cid"];
echo "<br />Owner name: ".$_POST["cc_owner"];
echo "<br />Card Number: ".$_POST["cc_number"];
echo "<br />Type: ".$_POST["cc_type"];
echo "<br />Ex year: ".$_POST["cc_exp_year"];
echo "<br />Ex Month: ".$_POST["cc_exp_month"];
echo "<br />";
try{
$resultPaymentMethod = $proxy->call($sessionId, "cart_payment.method", array($shoppingCartId, $paymentMethod));
} catch(Exception $ex){
echo '<br />cart_payment.method'.$ex->getMessage();
}
try{
$cart_info = $proxy->call($sessionId, "cart.info", $shoppingCartId);
echo "<pre>"; print_R($cart_info);
} catch (Exception $ex) {
echo "<br /> cart info = ".$ex->getMessage();
}
$result = "";
try{
$resultOrderCreation = $proxy->call($sessionId, "cart.order", array($shoppingCartId));
$result = $proxy->call($sessionId, 'sales_order.addComment', array('orderIncrementId' => $resultOrderCreation, 'status' => 'complete'));
} catch(Exception $ex){
print_r($result);
echo "<br /> order = ".$ex->getMessage();
}
} catch (Exception $ex) {
echo "login = " . $ex->getMessage();
}
?>
we are testing with live authorize.net account (not in test mode). also one more thing manual orders are working fine.
Following is the response of cart.info
Array
(
[store_id] => 1
[created_at] => 2014-04-07 16:57:16
[updated_at] => 2014-04-07 16:57:18
[converted_at] =>
[is_active] => 0
[is_virtual] => 0
[is_multi_shipping] => 0
[items_count] => 1
[items_qty] => 1.0000
[orig_order_id] => 0
[store_to_base_rate] => 1.0000
[store_to_quote_rate] => 1.0000
[base_currency_code] => USD
[store_currency_code] => USD
[quote_currency_code] => USD
[grand_total] => 0.0100
[base_grand_total] => 0.0100
[checkout_method] => customer
[customer_id] => 241
[customer_tax_class_id] => 3
[customer_group_id] => 1
[customer_email] => testing123456@gmail.com
[customer_prefix] =>
[customer_firstname] => ritesh
[customer_middlename] =>
[customer_lastname] => patadiya
[customer_suffix] =>
[customer_dob] =>
[customer_note] =>
[customer_note_notify] => 1
[customer_is_guest] => 0
[remote_ip] =>
[applied_rule_ids] =>
[reserved_order_id] =>
[password_hash] =>
[coupon_code] =>
[global_currency_code] => USD
[base_to_global_rate] => 1.0000
[base_to_quote_rate] => 1.0000
[customer_taxvat] =>
[customer_gender] =>
[subtotal] => 0.0100
[base_subtotal] => 0.0100
[subtotal_with_discount] => 0.0100
[base_subtotal_with_discount] => 0.0100
[is_changed] => 1
[trigger_recollect] => 0
[ext_shipping_info] =>
[gift_message_id] =>
[is_persistent] => 0
[quote_id] => 800
[shipping_address] => Array
(
[address_id] =>
[quote_id] => 800
[created_at] => 2014-04-07 16:57:17
[updated_at] => 2014-04-07 16:57:18
[customer_id] => 241
[save_in_address_book] => 0
[customer_address_id] =>
[address_type] => shipping
[email] =>
[prefix] =>
[firstname] => ritesh
[middlename] =>
[lastname] => patadiya
[suffix] =>
[company] => rb
[street] => wall street
[city] => rajkot
[region] => gujarat
[region_id] =>
[postcode] => 4567892
[country_id] => id
[telephone] => 0123456789
[fax] => 0123456789
[same_as_billing] => 1
[free_shipping] => 0
[collect_shipping_rates] => 1
[shipping_method] =>
[shipping_description] =>
[weight] => 0.0000
[subtotal] => 0.0000
[base_subtotal] => 0.0000
[subtotal_with_discount] => 0.0000
[base_subtotal_with_discount] => 0.0000
[tax_amount] => 0.0000
[base_tax_amount] => 0.0000
[shipping_amount] => 0.0000
[base_shipping_amount] => 0.0000
[shipping_tax_amount] => 0.0000
[base_shipping_tax_amount] => 0.0000
[discount_amount] => 0.0000
[base_discount_amount] => 0.0000
[grand_total] => 0.0000
[base_grand_total] => 0.0000
[customer_notes] =>
[applied_taxes] => a:0:{}
[discount_description] =>
[shipping_discount_amount] =>
[base_shipping_discount_amount] =>
[subtotal_incl_tax] => 0.0000
[base_subtotal_total_incl_tax] =>
[hidden_tax_amount] =>
[base_hidden_tax_amount] =>
[shipping_hidden_tax_amount] =>
[base_shipping_hidden_tax_amnt] =>
[shipping_incl_tax] => 0.0000
[base_shipping_incl_tax] => 0.0000
[vat_id] =>
[vat_is_valid] =>
[vat_request_id] =>
[vat_request_date] =>
[vat_request_success] =>
[gift_message_id] =>
)
[billing_address] => Array
(
[address_id] =>
[quote_id] => 800
[created_at] => 2014-04-07 16:57:17
[updated_at] => 2014-04-07 16:57:18
[customer_id] => 241
[save_in_address_book] => 0
[customer_address_id] =>
[address_type] => billing
[email] => testing123456@gmail.com
[prefix] =>
[firstname] => ritesh
[middlename] =>
[lastname] => patadiya
[suffix] =>
[company] => rb
[street] => wall street
[city] => rajkot
[region] => gujarat
[region_id] =>
[postcode] => 123456
[country_id] => id
[telephone] => 0123456789
[fax] => 0123456789
[same_as_billing] => 0
[free_shipping] => 0
[collect_shipping_rates] => 0
[shipping_method] =>
[shipping_description] =>
[weight] => 0.0000
[subtotal] => 0.0100
[base_subtotal] => 0.0100
[subtotal_with_discount] => 0.0000
[base_subtotal_with_discount] => 0.0000
[tax_amount] => 0.0000
[base_tax_amount] => 0.0000
[shipping_amount] => 0.0000
[base_shipping_amount] => 0.0000
[shipping_tax_amount] => 0.0000
[base_shipping_tax_amount] => 0.0000
[discount_amount] => 0.0000
[base_discount_amount] => 0.0000
[grand_total] => 0.0100
[base_grand_total] => 0.0100
[customer_notes] =>
[applied_taxes] => a:0:{}
[discount_description] =>
[shipping_discount_amount] => 0.0000
[base_shipping_discount_amount] => 0.0000
[subtotal_incl_tax] => 0.0100
[base_subtotal_total_incl_tax] =>
[hidden_tax_amount] => 0.0000
[base_hidden_tax_amount] => 0.0000
[shipping_hidden_tax_amount] => 0.0000
[base_shipping_hidden_tax_amnt] =>
[shipping_incl_tax] => 0.0000
[base_shipping_incl_tax] => 0.0000
[vat_id] =>
[vat_is_valid] =>
[vat_request_id] =>
[vat_request_date] =>
[vat_request_success] =>
[gift_message_id] =>
)
[items] => Array
(
[0] => Array
(
[item_id] => 1307
[quote_id] => 800
[created_at] => 2014-04-07 16:57:17
[updated_at] => 2014-04-07 16:57:17
[product_id] => 99
[store_id] => 1
[parent_item_id] =>
[is_virtual] => 1
[sku] => DEM001R
[name] => Demo Monthly Subscription (Do Not Purchase)
[description] =>
[applied_rule_ids] =>
[additional_data] =>
[free_shipping] => 0
[is_qty_decimal] => 0
[no_discount] => 0
[weight] =>
[qty] => 1
[price] => 0.0100
[base_price] => 0.0100
[custom_price] =>
[discount_percent] => 0.0000
[discount_amount] => 0.0000
[base_discount_amount] => 0.0000
[tax_percent] => 0.0000
[tax_amount] => 0.0000
[base_tax_amount] => 0.0000
[row_total] => 0.0100
[base_row_total] => 0.0100
[row_total_with_discount] => 0.0000
[row_weight] => 0.0000
[product_type] => subscription_virtual
[base_tax_before_discount] =>
[tax_before_discount] =>
[original_custom_price] =>
[redirect_url] =>
[base_cost] =>
[price_incl_tax] => 0.0100
[base_price_incl_tax] => 0.0100
[row_total_incl_tax] => 0.0100
[base_row_total_incl_tax] => 0.0100
[hidden_tax_amount] => 0.0000
[base_hidden_tax_amount] => 0.0000
[gift_message_id] =>
[weee_tax_disposition] => 0.0000
[weee_tax_row_disposition] => 0.0000
[base_weee_tax_disposition] => 0.0000
[base_weee_tax_row_disposition] => 0.0000
[weee_tax_applied] => a:0:{}
[weee_tax_applied_amount] => 0.0000
[weee_tax_applied_row_amount] => 0.0000
[base_weee_tax_applied_amount] => 0.0000
[base_weee_tax_applied_row_amnt] =>
[qty_options] => Array
(
)
[tax_class_id] => 0
[is_recurring] =>
[has_error] =>
)
)
[payment] => Array
(
[payment_id] =>
[quote_id] => 800
[created_at] => 2014-04-07 16:57:18
[updated_at] => 2014-04-07 16:57:18
[method] => authorizenet
[cc_type] => VI
[cc_number_enc] =>
[cc_last4] => 5636
[cc_cid_enc] =>
[cc_owner] => Hardik Raval
[cc_exp_month] => 11
[cc_exp_year] => 2021
[cc_ss_owner] =>
[cc_ss_start_month] =>
[cc_ss_start_year] =>
[po_number] =>
[additional_data] =>
[cc_ss_issue] =>
[additional_information] => Array
(
)
[paypal_payer_id] =>
[paypal_payer_status] =>
[paypal_correlation_id] =>
)
)
Getting this error: Credit card number mismatch with credit card type.
Best Answer
I'm not so into PCI-DSS but long story short (and maybe wrong! ;-))
To save CC numbers, the credit card companies expect, that your application and infrastructure is PCI-DSS certified. More can be found about this on wikipedia.
So to "save" the cc number at any time (e.g. sending it via form to the server, "saving" it in the memory and just forward it to any credit card processing company) or just save it and then process it manually, you need this certification.
That said, I think that Authorize.net is implemented as pci-dss conform as possible, which means, the data is sent to authorize.net and not saved.