function cw_paypal_pro_payflow_request($params) { global $REMOTE_ADDR; global $pp_final_action; extract($params); $is_extcard = false; $cardtype = 8; if (cw_payment_cc_is_visa($userinfo["card_number"])) { $cardtype = 0; } elseif (cw_payment_cc_is_mc($userinfo["card_number"])) { $cardtype = 1; } elseif (cw_payment_cc_is_dc($userinfo["card_number"])) { $cardtype = 2; } elseif (cw_payment_cc_is_amex($userinfo["card_number"])) { $cardtype = 3; } elseif (cw_payment_cc_is_diners($userinfo["card_number"])) { $cardtype = 4; } elseif (cw_payment_cc_is_jcb($userinfo["card_number"])) { $cardtype = 5; } elseif (cw_payment_cc_is_solo($userinfo["card_number"])) { $is_extcard = true; $cardtype = "S"; } elseif (cw_payment_cc_is_switch($userinfo["card_number"])) { $is_extcard = true; $cardtype = 9; } $cart =& cw_session_register('cart'); $secure_oid =& cw_session_register('secure_oid'); $post = array("tender" => "C", "trxtype" => $pp_final_action == 'Sale' ? 'S' : 'A', "acct" => $userinfo["card_number"], "accttype" => $cardtype, "amt" => $cart['info']['total'], "street" => $userinfo['main_address']['address'] . ($userinfo['main_address']['address_2'] ? $userinfo['main_address']['address_2'] : ''), "city" => $userinfo['main_address']['city'], "state" => $userinfo['main_address']['state'], "country" => $userinfo['main_address']['country'], "zip" => $userinfo['main_address']['zipcode'], "buttonsource" => '', "clientip" => cw_get_valid_ip($REMOTE_ADDR), "currency" => true, "custom" => implode(',', $secure_oid), "cvv2" => $userinfo['card_cvv2'], "email" => $userinfo['email'], "expdate" => $userinfo['card_expire'], "invnum" => $doc_ids[0], "shiptostreet" => $userinfo['current_address']['address'] . ($userinfo['current_address']['address_2'] ? $userinfo['current_address']['address_2'] : ''), "shiptocity" => $userinfo['current_address']['city'], "shiptostate" => $userinfo['current_address']['state'], "shiptocountry" => $userinfo['current_address']['country'], "shiptozip" => $userinfo['current_address']['zipcode'], "firstname" => $userinfo['current_address']['firstname'], "lastname" => $userinfo['current_address']['lastname']); if ($is_extcard) { $post['cardissue'] = $userinfo['card_issue_no']; $post['cardstart'] = $userinfo["card_valid_from"]; } //cw_log_add('payflow_pro', array('post'=>$post)); $res = cw_paypal_pro_payflow_do($post); $err = cw_paypal_pro_payflow_prepare_errors($res); if ($err) { return $err; } $res = $res[2]; $res['status'] = 'success'; return $res; }
function cw_payment_paypalpro_run_processor($params, $return) { if ($params['payment_data']['processor'] == 'paypal_pro') { extract($params); global $config, $current_location; $cart =& cw_session_register('cart'); $secure_oid =& cw_session_register('secure_oid'); $pp_total = sprintf("%0.2f", $cart['info']['total']); $pp_final_action = $config['paypal_pro']['use_preauth'] == 'Y' ? 'Authorization' : 'Sale'; $pp_username = $config['paypal_pro']['api_access']; $pp_password = $config['paypal_pro']['api_password']; $pp_currency = $config['paypal_pro']['currency']; $pp_cert_file = $app_dir . '/' . $config['paypal_pro']['api_cert_path']; $pp_signature = $config['paypal_pro']['api_signature']; $notify_url = $current_location . '/payment/index.php?target=paypal_pro'; $pp_use_cert = $config['paypal_pro']['auth_type'] == 'C'; $pp_signature_txt = $pp_use_cert ? "" : "<Signature>" . $pp_signature . "</Signature>"; if ($config['paypal_pro']['test_mode'] == "N") { $pp_url = $config['paypal_pro']['auth_type'] == 'C' ? "https://api.paypal.com:443/2.0/" : "https://api-3t.paypal.com:443/2.0/"; $pp_customer_url = "https://www.paypal.com"; } else { $pp_url = $config['paypal_pro']['auth_type'] == 'C' ? "https://api.sandbox.paypal.com:443/2.0/" : "https://api-aa.sandbox.paypal.com:443/2.0/"; $pp_customer_url = "https://www.sandbox.paypal.com"; } $avs_codes = array("A" => "Address Address only (no ZIP)", "B" => "International 'A'. Address only (no ZIP)", "C" => "International 'N'", "D" => "International 'X'. Address and Postal Code", "E" => "Not allowed for MOTO (Internet/Phone) transactions", "F" => "UK-specific X Address and Postal Code", "G" => "Global Unavailable", "I" => "International Unavailable", "N" => "None", "P" => "Postal Code only (no Address)", "R" => "Retry", "S" => "Service not Supported", "U" => "Unavailable", "W" => "Nine-digit ZIP code (no Address)", "X" => "Exact match. Address and five-digit ZIP code", "Y" => "Address and five-digit ZIP", "Z" => "Five-digit ZIP code (no Address)"); $cvv_codes = array("M" => "Match", "N" => "No match", "P" => "Not Processed", "S" => "Service not Supported", "U" => "Unavailable", "X" => "No response"); if (cw_payment_cc_is_visa($userinfo["card_number"])) { $pp_cardtype = "Visa"; } if (cw_payment_cc_is_mc($userinfo["card_number"])) { $pp_cardtype = "MasterCard"; } if (cw_payment_cc_is_dc($userinfo["card_number"])) { $pp_cardtype = "Discover"; } if (cw_payment_cc_is_amex($userinfo["card_number"])) { $pp_cardtype = "Amex"; } if (empty($pp_cardtype)) { $top_message = array("content" => cw_get_langvar_by_name("txt_paypal_us_wrong_cc_type"), "type" => "E"); cw_header_location($current_location . "index.php?target=cart&mode=checkout"); } $payer = $userinfo; foreach ($userinfo as $k => $v) { if (is_array($v)) { continue; } $payer[$k] = htmlspecialchars($v); } $payer['main_address']['state'] = $payer['main_address']['country'] == 'US' || $payer['main_address']['country'] == 'CA' || $payer['main_address']['state'] != "" ? $payer['main_address']['state'] : 'Other'; $payer['current_address']['state'] = $payer['current_address']['country'] == 'US' || $payer['current_address']['country'] == 'CA' || $payer['current_address']['state'] != "" ? $payer['current_address']['state'] : 'Other'; $payer_ipaddress = cw_get_valid_ip($REMOTE_ADDR); $skey = cw_call('cw_payment_start'); $pp_exp_month = (int) substr($userinfo["card_expire"], 0, 2); $pp_exp_year = 2000 + substr($userinfo["card_expire"], 2, 2); $s_name = ""; if (!empty($payer['current_address']['firstname'])) { $s_name = $payer['current_address']['firstname']; } if (!empty($payer['current_address']['lastname'])) { $s_name .= (empty($s_name) ? "" : " ") . $payer['current_address']['lastname']; } if (!empty($s_name)) { $s_name = substr($s_name, 0, 32); } if (empty($payer['main_address']['firstname'])) { $payer['main_address']['firstname'] = "Unknown"; } if (empty($payer['main_address']['lastname'])) { $payer['main_address']['b_lastname'] = "Unknown"; } $oid = implode(',', $secure_oid); $request = <<<EOT <?xml version="1.0" encoding="{$pp_charset}"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Header> <RequesterCredentials xmlns="urn:ebay:api:PayPalAPI"> <Credentials xmlns="urn:ebay:apis:eBLBaseComponents"> <Username>{$pp_username}</Username> <ebl:Password xmlns:ebl="urn:ebay:apis:eBLBaseComponents">{$pp_password}</ebl:Password> {$pp_signature_txt} </Credentials> </RequesterCredentials> </soap:Header> <soap:Body> <DoDirectPaymentReq xmlns="urn:ebay:api:PayPalAPI"> <DoDirectPaymentRequest> <Version xmlns="urn:ebay:apis:eBLBaseComponents">1.00</Version> <DoDirectPaymentRequestDetails xmlns="urn:ebay:apis:eBLBaseComponents"> <PaymentAction>{$pp_final_action}</PaymentAction> <PaymentDetails> <OrderTotal currencyID="{$pp_currency}">{$pp_total}</OrderTotal> <ButtonSource>DP_US</ButtonSource> <NotifyURL>{$notify_url}</NotifyURL> <ShipToAddress> <Name>{$s_name}</Name> <Street1>{$payer['current_address']['adress']}</Street1> <Street2>{$payer['current_address']['address_2']}</Street2> <CityName>{$payer['current_address']['city']}</CityName> <StateOrProvince>{$payer['current_address']['state']}</StateOrProvince> <PostalCode>{$payer['current_address']['zipcode']}</PostalCode> <Country>{$payer['current_address']['country']}</Country> </ShipToAddress> <InvoiceID>{$skey}</InvoiceID> <Custom>{$oid}</Custom> </PaymentDetails> <CreditCard> <CreditCardType>{$pp_cardtype}</CreditCardType> <CreditCardNumber>{$payer['card_number']}</CreditCardNumber> <ExpMonth>{$pp_exp_month}</ExpMonth> <ExpYear>{$pp_exp_year}</ExpYear> <CardOwner> <PayerStatus>verified</PayerStatus> <Payer>{$payer['email']}</Payer> <PayerName> <FirstName>{$payer['main_address']['firstname']}</FirstName> <LastName>{$payer['main_address']['lastname']}</LastName> </PayerName> <PayerCountry>{$payer['main_address']['country']}</PayerCountry> <Address> <Street1>{$payer['main_address']['address']}</Street1> <Street2>{$payer['main_address']['address_2']}</Street2> <CityName>{$payer['main_address']['city']}</CityName> <StateOrProvince>{$payer['main_address']['state']}</StateOrProvince> <Country>{$payer['main_address']['country']}</Country> <PostalCode>{$payer['main_address']['zipcode']}</PostalCode> </Address> </CardOwner> <CVV2>{$payer['card_cvv2']}</CVV2> </CreditCard> <IPAddress>{$payer_ipaddress}</IPAddress> </DoDirectPaymentRequestDetails> </DoDirectPaymentRequest> </DoDirectPaymentReq> </soap:Body> </soap:Envelope> EOT; $result = cw_func_call('cw_paypal_express_request', array('request' => $request)); if ($result['success']) { $return['code'] = 1; $bill_message = 'Accepted'; } else { $bill_message = 'Declined'; $return['code'] = 2; } $additional_fields = array(); foreach (array('TransactionID') as $add_field) { if (isset($result[$add_field]) && strlen($result[$add_field]) > 0) { $additional_fields[] = ' ' . $add_field . ': ' . $result[$add_field]; } } if (!empty($additional_fields)) { $bill_message .= ' (' . implode(', ', $additional_fields) . ')'; } if (!empty($result['error'])) { $bill_message .= sprintf(" Error: %s (Code: %s, Severity: %s)", $result['error']['LongMessage'], $result['error']['ErrorCode'], $result['error']['Severity']); } $return["billmes"] = $bill_message; if (isset($result['AVSCode'])) { $return['avsmes'] = empty($avs_codes[$result['AVSCode']]) ? "Code: " . $result['AVSCode'] : $avs_codes[$result['AVSCode']]; } if (isset($result['CVV2Code'])) { $return['cvvmes'] = empty($cvv_codes[$result['CVV2Code']]) ? "Code: " . $result['CVV2Code'] : $cvv_codes[$result['CVV2Code']]; } if ($pp_final_action != 'Sale') { $return['is_preauth'] = true; } $return['extra_order_data'] = array("paypal_type" => "USDP", "paypal_txnid" => $result['TransactionID'], "capture_status" => $pp_final_action != 'Sale' ? 'A' : '', 'transaction_amount' => $pp_total); } return $return; }
function cw_payment_check_results($payment_data) { $log_payment_failure = false; if (!empty($payment_data['sess_id'])) { if (cw_check_webinput() == "err") { $log_payment_failure = true; if ($payment_data['code'] == 1) { $__transaction_status = "successful"; $payment_data['code'] = 3; } elseif ($payment_data['code'] == 3) { $__transaction_status = "queued"; } else { $__transaction_status = "declined"; } $payment_data['billmes'] = "Gateway reported of {$__transaction_status} transaction but it's response came from the IP that is not specified in the list of valid IPs: " . cw_get_valid_ip($_SERVER['REMOTE_ADDR']) . "\n-- response ----\n" . $payment_data['billmes']; } $sessurl = APP_SESSION_NAME . "=" . $payment_data['sess_id'] . "&"; cw_session_id($payment_data['sess_id']); } else { $sessurl = ''; } $cart =& cw_session_register('cart', array()); $secure_oid =& cw_session_register("secure_oid"); $bill_error = $reason = ''; $fatal = false; if (!empty($payment_data)) { $saved_payment_data = $payment_data; } else { $saved_payment_data = false; } if (empty($secure_oid)) { $bill_error = cw_get_langvar_by_name("lbl_error_ccprocessor_error"); $payment_data['billmes'] = "error: your order was lost"; $reason = $payment_data['billmes']; $fatal = true; } elseif (empty($cart) && empty($payment_data['skey'])) { $bill_error = cw_get_langvar_by_name("lbl_error_ccprocessor_error"); $payment_data['billmes'] = "Error: Your cart was lost"; $reason = $payment_data['billmes']; $fatal = true; } elseif ($payment_data['code'] == 3) { $reason = $payment_data['billmes']; } elseif ($payment_data['code'] == 2) { $bill_error = cw_get_langvar_by_name("lbl_error_ccprocessor_error"); $reason = $payment_data['billmes']; } elseif ($payment_data['code'] == 1) { if (isset($payment_return) && !empty($payment_return) && $payment_data['code'] != 2) { if (isset($payment_return['total'])) { $sum = 0; foreach ($secure_oid as $_oid) { $o = cw_order_data($_oid); $sum += $o['order']['total']; } if ($sum != doubleval($payment_return['total'])) { $payment_data['code'] = 2; $payment_data['billmes'] .= "; Payment amount mismatch."; } } if ($payment_data['code'] != 2 && isset($payment_return['currency']) && isset($payment_return['_currency']) && !empty($payment_return['_currency']) && $payment_return['currency'] != $payment_return['_currency']) { $payment_data['code'] = 2; $payment_data['billmes'] .= "; Payment amount mismatch."; } } if ($payment_data['code'] == 1) { $payment_data['billmes'] = "Approved: " . $payment_data['billmes']; } else { $bill_error = cw_get_langvar_by_name("lbl_error_ccprocessor_error"); $reason = $payment_data['billmes']; $payment_data['billmes'] = "Declined: " . $payment_data['billmes']; } } else { # unavailable $bill_error = cw_get_langvar_by_name("lbl_error_ccprocessor_unavailable"); $payment_data['billmes'] = "Error: Payment gateway is unavailable"; } if (!$fatal) { cw_load('doc'); $status_after_capture = cw_call('cw_payment_doc_status_after_capture', array($payment_data)); $order_status = $bill_error ? "F" : ($payment_data['code'] == 3 ? "Q" : $status_after_capture); if (in_array($order_status, array('P', 'Q', $status_after_capture)) && !empty($payment_data['is_preauth'])) { $order_status = 'A'; // Authorized } if ($payment_data['code'] == 1 || $payment_data['code'] == 3) { if (empty($payment_data['skey'])) { $cart = array(); } } $advinfo = array(); $advinfo[] = "Reason: " . $payment_data['billmes']; if ($payment_data['avsmes']) { $advinfo[] = "AVS info: " . $payment_data['avsmes']; } if ($payment_data['cvvmes']) { $advinfo[] = "CVV info: " . $payment_data['cvvmes']; } if (isset($cmpi_result)) { $advinfo[] = "3-D Secure Transaction:"; if (isset($cmpi_result['Enrolled'])) { $advinfo[] = " TransactionId: " . $cmpi_result['TransactionId']; $advinfo[] = " Enrolled: " . $cmpi_result['Enrolled']; } else { $advinfo[] = " PAResStatus: " . $cmpi_result['PAResStatus']; $advinfo[] = " PAResStatusDesc: " . $cmpi_result['PAResStatusDesc']; $advinfo[] = " CAVV: " . $cmpi_result['Cavv']; $advinfo[] = " SignatureVerification: " . $cmpi_result['SignatureVerification']; $advinfo[] = " Xid: " . $cmpi_result['Xid']; $advinfo[] = " EciFlag: " . $cmpi_result['EciFlag']; } if (!empty($cmpi_result['ErrorNo'])) { $advinfo[] = " ErrorNo: " . $cmpi_result['ErrorNo']; } if (!empty($cmpi_result['ErrorDesc'])) { $advinfo[] = " ErrorDesc: " . $cmpi_result['ErrorDesc']; } } cw_call('cw_doc_change_status', array($secure_oid, $order_status, join("\n", $advinfo))); } if (!empty($payment_data['extra_order_data'])) { foreach ($secure_oid as $oid) { cw_call('cw_doc_place_extras_data', array($oid, $payment_data['extra_order_data'])); } unset($payment_data['extra_order_data']); } cw_session_unregister("secure_oid"); cw_session_save(); return array('bill_error' => $bill_error, 'sessurl' => $sessurl, 'reason' => $reason, 'doc_ids' => $secure_oid); }