Skip to content

Commit

Permalink
Merge pull request #3 from omise/feature/balance-transfer
Browse files Browse the repository at this point in the history
Add ability to administrator to transfer the balance to his account
  • Loading branch information
tommy-omise committed Mar 10, 2015
2 parents b04e95e + 7562b35 commit bc80b12
Show file tree
Hide file tree
Showing 6 changed files with 408 additions and 90 deletions.
50 changes: 50 additions & 0 deletions assets/css/omise-css.css
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,54 @@ input[name='card_id']:checked ~ #new_card_form {

#new_card_info:checked ~ #new_card_form {
display: block;
}

.omise-dashboard-header{
float:left;
}

.omise-dashboard-account-mode{
float:left;
padding: 10px;
border-radius: 5px;
background-color: white;
}

.omise-dashboard-balance{
float:left;
margin-left:20px;
}

.omise-dashboard-balance-label{
float:left;
margin-left: 5px;
padding: 10px;
font-size:1.3em;
}

.omise-dashboard-balance-value{
float:left;
margin-left: 5px;
padding: 10px;
border-radius: 5px;
background-color: white;
font-size:1.3em;
}

.omise-dashboard-white-box{
float:left;
margin-left: 5px;
padding: 10px;
border-radius: 5px;
background-color: white;
font-size:1.3em;
}

.omise-transfer-form{
margin-left: 5px;
padding: 10px;
}

.omise-clear-both{
clear:both;
}
22 changes: 22 additions & 0 deletions assets/javascripts/omise-dashboard-handler.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
(function ( $, undefined ) {
$("#omise_transfer_full_amount").change(function(){
if($(this).is(":checked")){
$("#omise_transfer_specific_amount").hide();
$("#omise_transfer_amount").removeAttr('required');
$("#omise_transfer_amount").val("");
}else{
$("#omise_transfer_specific_amount").show();
$("#omise_transfer_amount").attr('required', 'required');
}
})

$("#omise_create_transfer_form").submit(function(e){
e.preventDefault();
amount_field = $("#omise_transfer_amount");
if(amount_field.prop('required') && amount_field.val()==""){
alert("Please specify transfer amount !");
}else{
this.submit();
}
});
})(jQuery);
63 changes: 63 additions & 0 deletions includes/templates/omise-wp-admin-page.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<?php
defined ( 'ABSPATH' ) or die ( "No direct script access allowed." );
?>
<div class="wrap">
<div class="omise-dashboard-header">
<h2>Omise Merchant Account</h2>
</div>
<div class="omise-dashboard-account-mode" style="color: <?php echo $viewData["current_account_mode"]=='TEST' ? 'orange' : 'green'; ?>;">
<strong><?php echo $viewData["current_account_mode"]; ?> MODE</strong>
</div>
<br class="omise-clear-both" />
<div>
Omise payment gateway plugin is in <strong><?php echo $viewData["current_account_mode"]; ?></strong>
mode. Go to WooCommerce settings to change mode.
</div>
<?php
if (isset ( $viewData ["balance"] )) {
$balance = $viewData ["balance"];
$redirect_back = urlencode ( remove_query_arg ( 'omise_result_msg', $_SERVER ['REQUEST_URI'] ) );
?>
<br />
<div class="omise-dashboard-balance">
<div class="omise-dashboard-balance-label">Total Balance :</div>
<div class="omise-dashboard-balance-value"><?php echo $balance->formatted_total ?></div>
</div>
<div class="omise-dashboard-balance">
<div class="omise-dashboard-balance-label">Available Balance :</div>
<div class="omise-dashboard-balance-value"><?php echo $balance->formatted_available ?></div>
</div>
<br class="omise-clear-both" />
<h2>Request a transfer</h2>
<div class="omise-transfer-form">
<form id='omise_create_transfer_form'
action='<?php echo admin_url( 'admin-post.php' ); ?>'
method='POST'>
<input type="hidden" name="action" value="omise_create_transfer" />
<?php wp_nonce_field( 'omise_create_transfer', 'omise_create_transfer_nonce', FALSE ); ?>
<input type="hidden" name="_wp_http_referer"
value="<?php echo $redirect_back; ?>"> <input type="checkbox"
name="full_transfer" id="omise_transfer_full_amount"
value="full_amount" /> <label for="omise_transfer_full_amount">Full available amount (<?php echo $balance->formatted_available ?>)</label>
<br />
<div id="omise_transfer_specific_amount">
<div>------ Or ------</div>
Partial amount : <input type='text' name='omise_transfer_amount'
id='omise_transfer_amount' required /> THB
</div>
<br /> <input type='submit' value='submit'
class='button button-primary' />
</form>
</div>

<?php
}

if (! empty ( $viewData ["message"] )) {
?>
<div class="omise-dashboard-white-box"><?php echo esc_html($viewData["message"]) ?></div>
<?php
}
?>

</div>
189 changes: 101 additions & 88 deletions omise-api-wrapper.php
Original file line number Diff line number Diff line change
@@ -1,98 +1,111 @@
<?php
defined('ABSPATH') or die("No direct script access allowed.");

class Omise{
public function __construct(){
}

/**
* Creates a charge
* @param string $apiKey
* @param Array $chargeInfo
* @return mixed
*/
public static function create_charge($apiKey, $chargeInfo){
$result = self::call_api($apiKey, "POST", "/charges", $chargeInfo);
return json_decode($result);
}

/**
* Creates a customer
* @param string $apiKey
* @param Array $customer_data
* @return mixed
*/
public static function create_customer($apiKey, $customer_data){
$result = self::call_api($apiKey, "POST", "/customers", $customer_data);
return json_decode($result);
}

/**
* Get list of customer's cards
* @param string $apiKey
* @param string $customer_id
* @return mixed
*/
public static function get_customer_cards($apiKey, $customer_id){
$result = self::call_api($apiKey, "GET", "/customers/{$customer_id}/cards");
return json_decode($result);
}

/**
* Creates a card
* @param string $apiKey
* @param string $customer_id
* @param string $token
* @return mixed
*/
public static function create_card($apiKey, $customer_id, $token){
$result = self::call_api($apiKey, "PATCH", "/customers/{$customer_id}", "card=".$token);
return json_decode($result);
}

/**
* Deletes customer card
* @param string $apiKey
* @param string $customer_id
* @param string $card_id
* @return mixed
*/
public static function delete_card($apiKey, $customer_id, $card_id){
$result = self::call_api($apiKey, "DELETE", "/customers/{$customer_id}/cards/{$card_id}");
return json_decode($result);
}

/**
* Make a request to the API endpoint
* @param string $apiKey
* @param string $method
* @param string $endpoint
* @param mixed $data
* @return string
*/
private static function call_api($apiKey, $method, $endpoint, $data = false){
global $wp_version;
$url = OMISE_PROTOCOL_PREFIX.OMISE_API_HOST.$endpoint;
if(!class_exists('Omise')){
class Omise{
public function __construct(){
}

/**
* Creates a charge
* @param string $apiKey
* @param Array $chargeInfo
* @return mixed
*/
public static function create_charge($apiKey, $chargeInfo){
$result = self::call_api($apiKey, "POST", "/charges", $chargeInfo);
return json_decode($result);
}

$headers = array(
'Authorization' => 'Basic ' . base64_encode( $apiKey.':' ),
'User-Agent' => 'OmiseWooCommerce/'.OMISE_WOOCOMMERCE_PLUGIN_VERSION.' WooCommerce/'.WC_VERSION.' Wordpress/'.$wp_version
);
/**
* Creates a customer
* @param string $apiKey
* @param Array $customer_data
* @return mixed
*/
public static function create_customer($apiKey, $customer_data){
$result = self::call_api($apiKey, "POST", "/customers", $customer_data);
return json_decode($result);
}

$request_info = array(
'timeout' => 60,
'method' => $method,
'headers' => $headers,
'body' => $data
);
/**
* Get list of customer's cards
* @param string $apiKey
* @param string $customer_id
* @return mixed
*/
public static function get_customer_cards($apiKey, $customer_id){
$result = self::call_api($apiKey, "GET", "/customers/{$customer_id}/cards");
return json_decode($result);
}

$response = wp_remote_request($url, $request_info);
/**
* Creates a card
* @param string $apiKey
* @param string $customer_id
* @param string $token
* @return mixed
*/
public static function create_card($apiKey, $customer_id, $token){
$result = self::call_api($apiKey, "PATCH", "/customers/{$customer_id}", "card=".$token);
return json_decode($result);
}

/**
* Deletes customer card
* @param string $apiKey
* @param string $customer_id
* @param string $card_id
* @return mixed
*/
public static function delete_card($apiKey, $customer_id, $card_id){
$result = self::call_api($apiKey, "DELETE", "/customers/{$customer_id}/cards/{$card_id}");
return json_decode($result);
}

public static function get_balance($apiKey){
$result = self::call_api($apiKey, "GET", "/balance");
return json_decode($result);
}

public static function create_transfer($apiKey, $amount=null){
$post_data = isset($amount) ? "amount=".$amount : null;
$result = self::call_api($apiKey, "POST", "/transfers", $post_data);
return json_decode($result);
}

if(is_wp_error($response)){
return '{ "object": "error", "message": "'.$response->get_error_message().'" }';
}else{
$response_body = wp_remote_retrieve_body($response);
return $response_body;
/**
* Make a request to the API endpoint
* @param string $apiKey
* @param string $method
* @param string $endpoint
* @param mixed $data
* @return string
*/
private static function call_api($apiKey, $method, $endpoint, $data = false){
global $wp_version;
$url = OMISE_PROTOCOL_PREFIX.OMISE_API_HOST.$endpoint;

$headers = array(
'Authorization' => 'Basic ' . base64_encode( $apiKey.':' ),
'User-Agent' => 'OmiseWooCommerce/'.OMISE_WOOCOMMERCE_PLUGIN_VERSION.' WooCommerce/'.WC_VERSION.' Wordpress/'.$wp_version
);

$request_info = array(
'timeout' => 60,
'method' => $method,
'headers' => $headers,
'body' => $data
);

$response = wp_remote_request($url, $request_info);

if(is_wp_error($response)){
return '{ "object": "error", "message": "'.$response->get_error_message().'" }';
}else{
$response_body = wp_remote_retrieve_body($response);
return $response_body;
}
}
}
}
Expand Down
6 changes: 4 additions & 2 deletions omise-gateway.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,15 @@
define("OMISE_PROTOCOL_PREFIX", "https://");
define("OMISE_VAULT_HOST", "vault.omise.co");
define("OMISE_API_HOST", "api.omise.co");
define("OMISE_WOOCOMMERCE_PLUGIN_VERSION", "1.0");
define("OMISE_WOOCOMMERCE_PLUGIN_VERSION", "1.0.1");

require_once 'omise-util.php';
require_once 'omise-api-wrapper.php';
require_once 'omise-wc-gateway.php';
require_once 'omise-wc-myaccount.php';
require_once 'omise-wp-admin.php';

add_action ( 'plugins_loaded', 'register_omise_wc_gateway_plugin', 0 );
add_action ( 'plugins_loaded', 'prepare_omise_myaccount_panel', 0 );
?>
add_action ( 'plugins_loaded', array ( Omise_Admin::get_instance(), 'register_admin_page_and_actions' ) );
?>

0 comments on commit bc80b12

Please sign in to comment.