Untitled

 avatar
unknown
plain_text
3 years ago
4.0 kB
7
Indexable
<?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']);