📄 paypaldp.php
字号:
function _doDebug($subject = 'PayPal debug data', $data, $useSession = true) {
if (MODULE_PAYMENT_PAYPALDP_DEBUGGING == 'Log and Email') {
$data = urldecode($data) . "\n\n";
if ($useSession) $data .= "\nSession data: " . print_r($_SESSION, true);
zen_mail(STORE_NAME, STORE_OWNER_EMAIL_ADDRESS, $subject, $this->code . "\n" . $data, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, array('EMAIL_MESSAGE_HTML'=>nl2br($this->code . "\n" . $data)), 'debug');
}
}
/**
* Initialize the PayPal/PayflowPro object for communication to the processing gateways
*/
function paypal_init() {
$ec_uses_gateway = (defined('MODULE_PAYMENT_PAYPALDP_PRO20_EC_METHOD') && MODULE_PAYMENT_PAYPALDP_PRO20_EC_METHOD == 'Payflow') ? true : false;
$nvp = (!($ec_uses_gateway) && MODULE_PAYMENT_PAYPALWPP_APIPASSWORD != '' && MODULE_PAYMENT_PAYPALWPP_APISIGNATURE != '') ? true : false;
$ec = ($nvp && ($this->in_special_checkout() || $_GET['type'] == 'ec')) ? true : false;
if (substr(MODULE_PAYMENT_PAYPALDP_MODULE_MODE,0,7) == 'Payflow' && !$ec) {
$doPayPal = new paypal_curl(array('mode' => 'payflow',
'user' => trim(MODULE_PAYMENT_PAYPALWPP_PFUSER),
'vendor' => trim(MODULE_PAYMENT_PAYPALWPP_PFVENDOR),
'partner'=> trim(MODULE_PAYMENT_PAYPALWPP_PFPARTNER),
'pwd' => trim(MODULE_PAYMENT_PAYPALWPP_PFPASSWORD),
'server' => MODULE_PAYMENT_PAYPALDP_SERVER));
$doPayPal->_endpoints = array('live' => 'https://payflowpro.verisign.com/transaction',
'sandbox' => 'https://pilot-payflowpro.verisign.com/transaction');
} else {
$doPayPal = new paypal_curl(array('mode' => 'nvp',
'user' => trim(MODULE_PAYMENT_PAYPALWPP_APIUSERNAME),
'pwd' => trim(MODULE_PAYMENT_PAYPALWPP_APIPASSWORD),
'signature' => trim(MODULE_PAYMENT_PAYPALWPP_APISIGNATURE),
'version' => '2.3',
'server' => MODULE_PAYMENT_PAYPALDP_SERVER));
$doPayPal->_endpoints = array('live' => 'https://api-3t.paypal.com/nvp',
'sandbox' => 'https://api.sandbox.paypal.com/nvp');
}
// set logging options
$doPayPal->_logDir = $this->_logDir;
// $doPayPal->_logLevel = $this->_logLevel;
// set proxy options if configured
if (CURL_PROXY_REQUIRED == 'True' && CURL_PROXY_SERVER_DETAILS != '') {
$proxy_tunnel_flag = (defined('CURL_PROXY_TUNNEL_FLAG') && strtoupper(CURL_PROXY_TUNNEL_FLAG) == 'FALSE') ? false : true;
$doPayPal->setCurlOption(CURLOPT_HTTPPROXYTUNNEL, $proxy_tunnel_flag);
$doPayPal->setCurlOption(CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
$doPayPal->setCurlOption(CURLOPT_PROXY, CURL_PROXY_SERVER_DETAILS);
}
// transaction processing mode
$doPayPal->_trxtype = (MODULE_PAYMENT_PAYPALDP_TRANSACTION_MODE == 'Auth Only') ? 'A' : 'S';
// $this->zcLog('comm details', 'Comm Details: ' . "\n" . print_r($doPayPal, true) . "\n\n" . 'MODULE_PAYMENT_PAYPALDP_TRANSACTION_MODE = ' . MODULE_PAYMENT_PAYPALDP_TRANSACTION_MODE . "\ndoPayPal->_trxtype = " . $doPayPal->_trxtype . "\n");
return $doPayPal;
}
/**
* Determine which PayPal URL to direct the customer's browser to when needed
*/
function getPayPalLoginServer() {
if (MODULE_PAYMENT_PAYPALDP_SERVER == 'live') {
// live url
$paypal_url = 'https://www.paypal.com/cgi-bin/webscr';
} else {
// sandbox url
$paypal_url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
// for UK sandbox -- NOTE: this system is intermittently flakey ... and if it's down, odd redirects occur.
if (substr(MODULE_PAYMENT_PAYPALDP_MODULE_MODE,0,7) == 'Payflow') {
// $paypal_url = 'https://test-expresscheckout.paypal.com/cgi-bin/webscr';
}
}
return $paypal_url;
}
/**
* Used to submit a refund for a given transaction. FOR FUTURE USE.
*/
function _doRefund($oID, $amount = 'Full', $note = '') {
global $db, $doPayPal, $messageStack;
$new_order_status = MODULE_PAYMENT_PAYPALDP_REFUNDED_STATUS_ID;
$orig_order_amount = 0;
$doPayPal = $this->paypal_init();
$proceedToRefund = false;
$refundNote = strip_tags(zen_db_input($_POST['refnote']));
if (isset($_POST['fullrefund']) && $_POST['fullrefund'] == MODULE_PAYMENT_PAYPAL_ENTRY_REFUND_BUTTON_TEXT_FULL) {
$refundAmt = 'Full';
if (isset($_POST['reffullconfirm']) && $_POST['reffullconfirm'] == 'on') {
$proceedToRefund = true;
} else {
$messageStack->add_session(MODULE_PAYMENT_PAYPALDP_TEXT_REFUND_FULL_CONFIRM_ERROR, 'error');
}
}
if (isset($_POST['partialrefund']) && $_POST['partialrefund'] == MODULE_PAYMENT_PAYPAL_ENTRY_REFUND_BUTTON_TEXT_PARTIAL) {
$refundAmt = (float)$_POST['refamt'];
$new_order_status = MODULE_PAYMENT_PAYPALDP_REFUNDED_STATUS_ID;
$proceedToRefund = true;
if ($refundAmt == 0) {
$messageStack->add_session(MODULE_PAYMENT_PAYPALDP_TEXT_INVALID_REFUND_AMOUNT, 'error');
$proceedToRefund = false;
}
}
// look up history on this order from PayPal table
$sql = "select * from " . TABLE_PAYPAL . " where order_id = :orderID AND parent_txn_id = '' ";
$sql = $db->bindVars($sql, ':orderID', $oID, 'integer');
$zc_ppHist = $db->Execute($sql);
if ($zc_ppHist->RecordCount() == 0) return false;
$txnID = $zc_ppHist->fields['txn_id'];
$PFamt = $zc_ppHist->fields['mc_gross'];
if ($doPayPal->_mode == 'payflow' && $refundAmt == 'Full') $refundAmt = $PFamt;
/**
* Submit refund request to PayPal
*/
if ($proceedToRefund) {
$response = $doPayPal->RefundTransaction($oID, $txnID, $refundAmt, $refundNote);
$error = $this->_errorHandler($response, 'DoRefund');
if (!$error) {
if (!isset($response['GROSSREFUNDAMT'])) $response['GROSSREFUNDAMT'] = $refundAmt;
// Success, so save the results
$sql_data_array = array('orders_id' => $oID,
'orders_status_id' => (int)$new_order_status,
'date_added' => 'now()',
'comments' => 'REFUND INITIATED. Trans ID:' . $response['REFUNDTRANSACTIONID'] . $response['PNREF']. "\n" . /*' Net Refund Amt:' . urldecode($response['NETREFUNDAMT']) . "\n" . ' Fee Refund Amt: ' . urldecode($response['FEEREFUNDAMT']) . "\n" . */' Gross Refund Amt: ' . urldecode($response['GROSSREFUNDAMT']) . (isset($response['PPREF']) ? "\nPPRef: " . $response['PPREF'] : '') . "\n" . $refundNote,
'customer_notified' => 0
);
zen_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array);
$db->Execute("update " . TABLE_ORDERS . "
set orders_status = '" . (int)$new_order_status . "'
where orders_id = '" . (int)$oID . "'");
$messageStack->add_session(sprintf(MODULE_PAYMENT_PAYPALDP_TEXT_REFUND_INITIATED, urldecode($response['GROSSREFUNDAMT']), urldecode($response['REFUNDTRANSACTIONID']). $response['PNREF']), 'success');
return true;
}
}
}
/**
* Used to capture part or all of a given previously-authorized transaction. FOR FUTURE USE.
*/
function _doCapt($oID, $captureType = 'Complete', $amt = 0, $currency = 'USD', $note = '') {
global $db, $doPayPal, $messageStack;
$doPayPal = $this->paypal_init();
// alt value for $captureType = 'NotComplete';
//@TODO: Read current order status and determine best status to set this to
$new_order_status = MODULE_PAYMENT_PAYPALDP_ORDER_STATUS_ID;
$orig_order_amount = 0;
$doPayPal = $this->paypal_init();
$proceedToCapture = false;
$captureNote = strip_tags(zen_db_input($_POST['captnote']));
if (isset($_POST['captfullconfirm']) && $_POST['captfullconfirm'] == 'on') {
$proceedToCapture = true;
} else {
$messageStack->add_session(MODULE_PAYMENT_PAYPALDP_TEXT_CAPTURE_FULL_CONFIRM_ERROR, 'error');
}
if (isset($_POST['captfinal']) && $_POST['captfinal'] == 'on') {
$captureType = 'Complete';
} else {
$captureType = 'NotComplete';
}
if (isset($_POST['btndocapture']) && $_POST['btndocapture'] == MODULE_PAYMENT_PAYPAL_ENTRY_CAPTURE_BUTTON_TEXT_FULL) {
$captureAmt = (float)$_POST['captamt'];
if ($captureAmt == 0) {
$messageStack->add_session(MODULE_PAYMENT_PAYPALDP_TEXT_INVALID_CAPTURE_AMOUNT, 'error');
$proceedToCapture = false;
}
}
// look up history on this order from PayPal table
$sql = "select * from " . TABLE_PAYPAL . " where order_id = :orderID AND parent_txn_id = '' ";
$sql = $db->bindVars($sql, ':orderID', $oID, 'integer');
$zc_ppHist = $db->Execute($sql);
if ($zc_ppHist->RecordCount() == 0) return false;
$txnID = $zc_ppHist->fields['txn_id'];
/**
* Submit capture request to PayPal
*/
if ($proceedToCapture) {
$response = $doPayPal->DoCapture($txnID, $captureAmt, $currency, $captureType, '', $captureNote);
$error = $this->_errorHandler($response, 'DoCapture');
if (!$error) {
if (isset($response['PNREF'])) {
if (!isset($response['AMT'])) $response['AMT'] = $captureAmt;
if (!isset($response['ORDERTIME'])) $response['ORDERTIME'] = date("M-d-Y h:i:s");
}
// Success, so save the results
$sql_data_array = array('orders_id' => (int)$oID,
'orders_status_id' => (int)$new_order_status,
'date_added' => 'now()',
'comments' => 'FUNDS COLLECTED. Trans ID: ' . urldecode($response['TRANSACTIONID']) . $response['PNREF']. "\n" . ' Amount: ' . urldecode($response['AMT']) . ' ' . $currency . "\n" . 'Time: ' . urldecode($response['ORDERTIME']) . "\n" . (isset($response['RECEIPTID']) ? 'Receipt ID: ' . urldecode($response['RECEIPTID']) : 'Auth Code: ' . $response['AUTHCODE']) . (isset($response['PPREF']) ? "\nPPRef: " . $response['PPREF'] : '') . "\n" . $captureNote,
'customer_notified' => 0
);
zen_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array);
$db->Execute("update " . TABLE_ORDERS . "
set orders_status = '" . (int)$new_order_status . "'
where orders_id = '" . (int)$oID . "'");
$messageStack->add_session(sprintf(MODULE_PAYMENT_PAYPALDP_TEXT_CAPT_INITIATED, urldecode($response['AMT']), urldecode($response['RECEIPTID'] . $response['AUTHCODE']). $response['PNREF']), 'success');
return true;
}
}
}
/**
* Used to void a given previously-authorized transaction. FOR FUTURE USE.
*/
function _doVoid($oID, $note = '') {
global $db, $doPayPal, $messageStack;
$new_order_status = MODULE_PAYMENT_PAYPALDP_REFUNDED_STATUS_ID;
$doPayPal = $this->paypal_init();
$voidNote = strip_tags(zen_db_input($_POST['voidnote']));
$voidAuthID = trim(strip_tags(zen_db_input($_POST['voidauthid'])));
if (isset($_POST['ordervoid']) && $_POST['ordervoid'] == MODULE_PAYMENT_PAYPAL_ENTRY_VOID_BUTTON_TEXT_FULL) {
if (isset($_POST['voidconfirm']) && $_POST['voidconfirm'] == 'on') {
$proceedToVoid = true;
} else {
$messageStack->add_session(MODULE_PAYMENT_PAYPALDP_TEXT_VOID_CONFIRM_ERROR, 'error');
}
}
// look up history on this order from PayPal table
$sql = "select * from " . TABLE_PAYPAL . " where order_id = :orderID AND parent_txn_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -