Например, через систему Authorize.Net (http://www.authorize.net/) Вот набросал небольшой пример PHP: <? $data['x_version'] = '3.1'; $data['x_type'] = 'AUTH_CAPTURE'; $data['x_delim_data'] = 'true'; $data['x_relay_response'] = 'false'; $data['x_login'] = $YourAuthorizeLoginId; $data['x_tran_key'] = $YourAuthorizeTransactionKey; $data['x_amount'] = $_POST['Amount']; $data['x_card_num'] = $_POST['CardNumber']; $data['x_exp_date'] = $_POST['ExpiredDate']; // format: month/year $data['x_card_code'] = $_POST['CardCode']; //cvv $data['x_first_name'] = ...; $data['x_last_name'] = ...; $data['x_company'] = ...; $data['x_address'] = ...; $data['x_city'] = ...; $data['x_state'] = ...; $data['x_zip'] = ...; $data['x_country'] = ...; $data['x_phone'] = ...; $data['x_cust_id'] = ...; $data['x_email'] = ...; $data['x_email_customer'] = ...; $data['x_trans_id'] = ...; $data['x_invoice_num'] = ...; $data['x_description'] = ...; $fp = fsockopen('ssl://secure.authorize.net', 443, $errno, $errstr, 30); if($fp) { $query = ''; foreach($data as $key=>$val) { if(!empty($query)) $query .= '&'; $query .= $key.'='.urlencode($val); } $header = "POST /gateway/transact.dll HTTP/1.0\r\n"; $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; $header .= "Content-Length: ".strlen($query)."\r\n\r\n"; fputs ($fp, $header.$query); $response = ''; while (!feof($fp)) { $response = @fgets($fp); } fclose($fp); $response = explode(",", $response); switch($response[0]) { case 1: // approved print 'OK!!!'; break; case 2: // declined print 'Error: '.$response[3].'<br />'; //error print '#'.$response[2]; //error number break; default: // error print 'Error: '.$response[3].'<br />'; //error print '#'.$response[2]; //error number break; } }else{ print 'Connection Error.' } ?> более подробно, есть смысл зарыться в доки