working 99%, major changes next
This commit is contained in:
parent
ed94cf17db
commit
89b5344e79
6 changed files with 328 additions and 62 deletions
|
|
@ -37,10 +37,49 @@ curl_close($ch);
|
|||
|
||||
if ($http !== 201 && $http !== 200) { http_response_code($http); echo $res; exit; }
|
||||
|
||||
$payload = json_decode($res, true);
|
||||
$status = $payload['status'] ?? 'UNKNOWN';
|
||||
$txnId = $payload['purchase_units'][0]['payments']['captures'][0]['id'] ?? null;
|
||||
// Parse the capture response
|
||||
$captureData = json_decode($res, true);
|
||||
$captureStatus = $captureData['status'] ?? '';
|
||||
|
||||
echo json_encode(['status'=>$status, 'txn_id'=>$txnId]);
|
||||
// If capture was successful, immediately update the order status to 'paid'
|
||||
if ($captureStatus === 'COMPLETED') {
|
||||
// Extract custom_id which contains the order_id
|
||||
$customId = $captureData['purchase_units'][0]['payments']['captures'][0]['custom_id'] ?? null;
|
||||
$txnId = $captureData['purchase_units'][0]['payments']['captures'][0]['id'] ?? null;
|
||||
|
||||
if ($customId && is_numeric($customId)) {
|
||||
// Connect to DB and update order status
|
||||
$db = @mysqli_connect($db_host, $db_user, $db_pass, $db_name);
|
||||
if ($db) {
|
||||
$orderId = intval($customId);
|
||||
|
||||
// Calculate finish_date based on qty and invoice_duration
|
||||
$qtyRes = mysqli_query($db, "SELECT qty, invoice_duration FROM ogp_billing_orders WHERE order_id = $orderId LIMIT 1");
|
||||
$finish_date = null;
|
||||
if ($qtyRes && $row = mysqli_fetch_assoc($qtyRes)) {
|
||||
$qty = intval($row['qty'] ?? 1);
|
||||
$duration = strtolower(trim($row['invoice_duration'] ?? 'month'));
|
||||
$months = (strpos($duration, 'year') !== false) ? ($qty * 12) : $qty;
|
||||
if ($months > 0) {
|
||||
$dt = new DateTime('now');
|
||||
$dt->modify('+' . $months . ' months');
|
||||
$finish_date = $dt->format('Y-m-d H:i:s');
|
||||
}
|
||||
}
|
||||
|
||||
// Update order status to 'paid'
|
||||
$sql = "UPDATE ogp_billing_orders SET status = 'paid', payment_txid = '" . mysqli_real_escape_string($db, $txnId) . "', paid_ts = NOW()";
|
||||
if ($finish_date) {
|
||||
$sql .= ", finish_date = '" . mysqli_real_escape_string($db, $finish_date) . "'";
|
||||
}
|
||||
$sql .= " WHERE order_id = $orderId AND status = 'in-cart' LIMIT 1";
|
||||
mysqli_query($db, $sql);
|
||||
mysqli_close($db);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Return the full PayPal response for proper processing
|
||||
echo $res;
|
||||
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -47,6 +47,17 @@ if ($http !== 200) { http_response_code(500); echo json_encode(['error'=>'oauth_
|
|||
$access = json_decode($tok, true)['access_token'] ?? null;
|
||||
if (!$access) { http_response_code(500); echo json_encode(['error'=>'oauth_no_token']); exit; }
|
||||
|
||||
// Update site base URL to exclude 'modules/billing'
|
||||
$siteBaseUrl = 'http://gameservers.world';
|
||||
|
||||
// Ensure return_url and cancel_url are absolute URLs (relative to site root)
|
||||
if (strpos($return_url, 'http') !== 0) {
|
||||
$return_url = $siteBaseUrl . '/' . ltrim($return_url, '/');
|
||||
}
|
||||
if (strpos($cancel_url, 'http') !== 0) {
|
||||
$cancel_url = $siteBaseUrl . '/' . ltrim($cancel_url, '/');
|
||||
}
|
||||
|
||||
$purchaseUnit = [
|
||||
'amount' => [ 'currency_code' => $currency, 'value' => $amount_value ],
|
||||
'description' => $description,
|
||||
|
|
@ -64,6 +75,18 @@ $body = [
|
|||
'application_context' => [ 'return_url'=>$return_url, 'cancel_url'=>$cancel_url, 'user_action'=>'PAY_NOW' ]
|
||||
];
|
||||
|
||||
// Log the payload for debugging
|
||||
$logDir = __DIR__ . '/../data';
|
||||
@mkdir($logDir, 0775, true);
|
||||
$logFile = $logDir . '/create_order_payload.log';
|
||||
$logEntry = date('Y-m-d H:i:s') . "\n" . json_encode($body, JSON_PRETTY_PRINT) . "\n\n";
|
||||
@file_put_contents($logFile, $logEntry, FILE_APPEND);
|
||||
|
||||
// Log corrected URLs for debugging
|
||||
$logFile = $logDir . '/corrected_urls.log';
|
||||
$logEntry = date('Y-m-d H:i:s') . "\nReturn URL: $return_url\nCancel URL: $cancel_url\n\n";
|
||||
@file_put_contents($logFile, $logEntry, FILE_APPEND);
|
||||
|
||||
$ch = curl_init("$api/v2/checkout/orders");
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
|
|
@ -75,7 +98,18 @@ $res = curl_exec($ch);
|
|||
$http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
if ($http !== 201) { http_response_code($http); echo $res; exit; }
|
||||
if ($http !== 201) {
|
||||
// Log error for debugging
|
||||
$logDir = __DIR__ . '/../data';
|
||||
@mkdir($logDir, 0775, true);
|
||||
$logFile = $logDir . '/create_order_errors.log';
|
||||
$logEntry = date('Y-m-d H:i:s') . " HTTP $http: " . substr($res, 0, 500) . "\n";
|
||||
@file_put_contents($logFile, $logEntry, FILE_APPEND);
|
||||
|
||||
http_response_code($http);
|
||||
echo $res;
|
||||
exit;
|
||||
}
|
||||
echo $res;
|
||||
|
||||
?>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue