foreach ($item_ids as $v) { db_query("UPDATE {$tables['download_keys']} SET expires = '" . (time() + $config['egoods']['download_key_ttl'] * 3600) . "' WHERE item_id = '{$v['item_id']}'"); } } $pids = cw_query("SELECT {$tables['order_details']}.item_id, {$tables['order_details']}.product_id, {$tables['products']}.distribution FROM {$tables['order_details']}, {$tables['products']} WHERE {$tables['order_details']}.doc_id = '{$doc_id}' AND {$tables['order_details']}.product_id = {$tables['products']}.product_id AND {$tables['products']}.distribution != ''"); if ($pids) { $keys = array(); foreach ($pids as $v) { if (cw_query_first_cell("SELECT COUNT(*) FROM {$tables['download_keys']} WHERE item_id = '{$v['item_id']}'")) { continue; } $keys[$v['item_id']]['download_key'] = keygen($v['product_id'], $config['egoods']['download_key_ttl'], $v['item_id']); $keys[$v['item_id']]['distribution_filename'] = basename($v['distribution']); } if (!empty($keys)) { $order = cw_order_data($doc_id); if (!empty($order)) { foreach ($order['products'] as $k => $v) { if (isset($keys[$v['item_id']])) { $order['products'][$k] = cw_array_merge($v, $keys[$v['item_id']]); } } $smarty->assign('products', $order['products']); $smarty->assign('order', $order['order']); $smarty->assign('userinfo', $order['userinfo']); cw_call('cw_send_mail', array($config['Company']['orders_department'], $order['userinfo']['email'], "mail/egoods_download_keys_subj.tpl", "mail/egoods_download_keys.tpl")); } } } cw_header_location("index.php?target={$target}&mode=details&doc_id=" . $doc_id); }
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); }