<?php
require_once 'engine/init.php';
protect_page();
if (!RequestMethodIsPost()) {
exit;
}
if (!$config['pagarme']['enabled']) {
exit;
}
function createPaymentData($package_id, $user_data, $success, $code, $price, $amount, $accountId, $server) {
$data = array(
"code" => $code,
"customer" => array(
"name" => $user_data['name'],
"type" => "individual",
"email" => $user_data['email']
),
"items" => array(
array(
"amount" => $price * 100,
"description" => strval($amount) . " Taleon Coins",
"quantity" => 1,
"code" => "taleon_pg_" . $package_id
)
),
"payments" => array(
array(
"amount" => $price * 100,
"payment_method" => "checkout",
"checkout" => array(
"expires_in" => 600,
"accepted_payment_methods" => array("credit_card", "pix", "boleto"),
"success_url" => $success,
"customer_editable" => true
),
"credit_card" => array(
"capture" => true,
"operation_type" => "auth_and_capture",
"statement_descriptor" => "Taleon"
),
"boleto" => array(
"instructions" => "Pay until due date.",
"due_at" => date('d-m-Y',strtotime(' + 3 day', strtotime(date('Y-m-d')))),
"document_number" => strval(rand(10000, 100000))
),
"pix" => array(
"expires_in" => 600,
"additional_information" => array(
"name" => "Taleon Coins",
"value" => strval($amount)
)
)
)
),
"metadata" => array(
"accountId" => $accountId,
"server" => $server,
"transactionId" => $code
)
);
return $data;
}
function createOrder($package_id, $user_data, $secret, $price, $amount, $code, $accountId, $server, $success) {
$data = json_encode(createPaymentData($package_id, $user_data, $success, $code, $price, $amount, $accountId, $server));
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.pagar.me/core/v5/orders",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => $data,
CURLOPT_FAILONERROR => true,
CURLOPT_HTTPHEADER => array(
"Accept: application/json",
"Authorization: Basic ".base64_encode($secret.":"),
"Content-Type: application/json"
),
));
$response = curl_exec($curl);
// Handle error
if(curl_errno($curl)) {
curl_close($curl);
return false;
}
curl_close($curl);
return $response;
}
$user = $user_data['id'];
$amount = 0;
$price = 0;
$package_id = 1;
foreach($config['pagseguro']['packages'] as $package) {
if($package['price'] == intval($_POST['amount'])) {
$amount = $package['amount'];
$price = $package['price'];
break;
}
$package_id += 1;
}
if($amount == 0 || $price == 0) {
exit;
}
// Create order in database
$order_code = md5(time());
mysql_insert("INSERT INTO znote_pagarme (account_id, transaction_id, price, points, created_at) VALUES (".$user_data['id'].", '".$order_code."', ".$price.", ".$amount.", NOW())");
// Create payment order and redirect
$resp = createOrder($package_id, $user_data, $config['pagarme']['secret'], $price, $amount, $order_code, $user_data['id'], $config['pagarme']['server'], $config['pagarme']['return_url']);
if(!$resp) {
echo "Unable to create payment (response). Please contact an administrator";
return;
}
$data = json_decode($resp, true);
if(!isset($data['checkouts'])) {
echo "Unable to create payment (checkouts). Please contact an administrator";
return;
}
if(!isset($data['checkouts'][0]['payment_url'])) {
echo "Unable to create payment (payment_url). Please contact an administrator";
return;
}
header("Location: " . $data['checkouts'][0]['payment_url']);