commit
dd35a7af38
|
@ -0,0 +1,375 @@
|
|||
<?php
|
||||
/*
|
||||
Plugin Name: Bitcoin Private Payment Gateway
|
||||
Description: BTCPPay.com WooCommerce Payment Gateway Integration for payments with Bitcoin Private
|
||||
Author:
|
||||
Author URI:
|
||||
*/
|
||||
|
||||
if (!defined('ABSPATH')) {
|
||||
exit; // Exit if accessed directly
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom Payment Gateway.
|
||||
*
|
||||
* Provides a Custom Payment Gateway, mainly for testing purposes.
|
||||
*/
|
||||
add_action('plugins_loaded', 'init_custom_gateway_class');
|
||||
function init_custom_gateway_class()
|
||||
{
|
||||
|
||||
class WC_Gateway_Custom extends WC_Payment_Gateway
|
||||
{
|
||||
|
||||
public $domain;
|
||||
|
||||
/**
|
||||
* Constructor for the gateway.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
|
||||
$this->domain = 'custom_payment';
|
||||
|
||||
$this->id = 'custom';
|
||||
$this->icon = apply_filters('woocommerce_custom_gateway_icon', '');
|
||||
$this->has_fields = false;
|
||||
$this->method_title = __('Bitcoin Private', $this->domain);
|
||||
$this->method_description = __('Allows payments with BTCPPAY.com gateway.', $this->domain);
|
||||
|
||||
// Load the settings.
|
||||
$this->init_form_fields();
|
||||
$this->init_settings();
|
||||
|
||||
// Define user set variables
|
||||
$this->title = $this->get_option('title');
|
||||
$this->description = $this->get_option('description');
|
||||
$this->instructions = $this->get_option('instructions', $this->description);
|
||||
$this->order_status = $this->get_option('order_status', 'completed');
|
||||
|
||||
// Actions
|
||||
add_action('woocommerce_update_options_payment_gateways_' . $this->id, array(
|
||||
$this,
|
||||
'process_admin_options'
|
||||
));
|
||||
add_action('woocommerce_thankyou_custom', array(
|
||||
$this,
|
||||
'thankyou_page'
|
||||
));
|
||||
|
||||
// Customer Emails
|
||||
add_action('woocommerce_email_before_order_table', array(
|
||||
$this,
|
||||
'email_instructions'
|
||||
), 10, 3);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialise Gateway Settings Form Fields.
|
||||
*/
|
||||
public function init_form_fields()
|
||||
{
|
||||
|
||||
$this->form_fields = array(
|
||||
'enabled' => array(
|
||||
'title' => __('Enable/Disable', $this->domain),
|
||||
'type' => 'checkbox',
|
||||
'label' => __('Enable Custom Payment', $this->domain),
|
||||
'default' => 'yes'
|
||||
),
|
||||
'title' => array(
|
||||
'title' => __('Title', $this->domain),
|
||||
'type' => 'text',
|
||||
'description' => __('This controls the title which the user sees during checkout.', $this->domain),
|
||||
'default' => __('Bitcoin Private', $this->domain),
|
||||
'desc_tip' => true
|
||||
),
|
||||
'order_status' => array(
|
||||
'title' => __('Order Status', $this->domain),
|
||||
'type' => 'select',
|
||||
'class' => 'wc-enhanced-select',
|
||||
'description' => __('Choose whether status you wish after checkout.', $this->domain),
|
||||
'default' => 'wc-completed',
|
||||
'desc_tip' => true,
|
||||
'options' => wc_get_order_statuses()
|
||||
),
|
||||
'description' => array(
|
||||
'title' => __('Description', $this->domain),
|
||||
'type' => 'textarea',
|
||||
'description' => __('Payment method description that the customer will see on your checkout.', $this->domain),
|
||||
'default' => __('Pay for your purchase with Bitcoin Private', $this->domain),
|
||||
'desc_tip' => true
|
||||
),
|
||||
'instructions' => array(
|
||||
'title' => __('Instructions', $this->domain),
|
||||
'type' => 'textarea',
|
||||
'description' => __('Instructions that will be added to the thank you page and emails.', $this->domain),
|
||||
'default' => '',
|
||||
'desc_tip' => true
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Output for the order received page.
|
||||
*/
|
||||
public function thankyou_page()
|
||||
{
|
||||
if ($this->instructions)
|
||||
echo wpautop(wptexturize($this->instructions));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add content to the WC emails.
|
||||
*
|
||||
* @access public
|
||||
* @param WC_Order $order
|
||||
* @param bool $sent_to_admin
|
||||
* @param bool $plain_text
|
||||
*/
|
||||
public function email_instructions($order, $sent_to_admin, $plain_text = false)
|
||||
{
|
||||
if ($this->instructions && !$sent_to_admin && 'custom' === $order->payment_method && $order->has_status('on-hold')) {
|
||||
echo wpautop(wptexturize($this->instructions)) . PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
public function payment_fields()
|
||||
{
|
||||
|
||||
if ($description = $this->get_description()) {
|
||||
echo wpautop(wptexturize($description));
|
||||
}
|
||||
|
||||
?>
|
||||
<div id="custom_input">
|
||||
|
||||
|
||||
<p class="form-row form-row-wide">
|
||||
<input type="hidden" class="" name="i_payment_address" id="i_payment_address" placeholder="" value="">
|
||||
</p>
|
||||
|
||||
<p class="form-row form-row-wide">
|
||||
<input type="hidden" class="" name="i_payment_txid" id="i_payment_txid" placeholder="" value="">
|
||||
</p>
|
||||
|
||||
<p class="form-row form-row-wide">
|
||||
<input type="hidden" class="" name="i_payment_txref" id="i_payment_txref" placeholder="" value="">
|
||||
</p>
|
||||
|
||||
|
||||
<div class="fiat_totals">
|
||||
<div id="fiat_total" style="display:inline-block"><strong>Fiat Total:</strong></div>
|
||||
<div id="fiat_total_value" style="display:inline-block"></div>
|
||||
</div>
|
||||
|
||||
<div class="btcp_totals">
|
||||
<div id="btcp_total" style="display:inline-block"><strong>BTCP Total:</strong></div>
|
||||
<div id="btcp_total_value" style="display:inline-block"></div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<script id="convert">
|
||||
var btcPrivate;
|
||||
var btcpAmount;
|
||||
var btcpAmount2;
|
||||
var json = new XMLHttpRequest(); // start a new variable to store the JSON in
|
||||
json.onreadystatechange = function() {
|
||||
if (this.readyState == 4 && this.status == 200) { // if HTTP header 200 - ok
|
||||
var object = JSON.parse(this.responseText);
|
||||
btcPrivate = object[0].price_usd;
|
||||
var ValueUSD = '<?php echo WC()->cart->total; ?>';
|
||||
btcpAmount = ValueUSD / btcPrivate;
|
||||
btcpAmount2 = btcpAmount.toFixed(8)
|
||||
//document.getElementById('btcpprice').innerHTML += 'BTCP Price: ' + btcpAmount2;
|
||||
console.log("btcpAmount2 within function " + btcpAmount2);
|
||||
}
|
||||
};
|
||||
json.open(
|
||||
"GET", // method
|
||||
"https://api.coinmarketcap.com/v1/ticker/bitcoin-private/", // url
|
||||
true // async
|
||||
); // initialise the request
|
||||
json.send(); //send request
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
<script id="btcp_widget_data">
|
||||
var order_fiat_total = '<?php echo WC()->cart->total; ?>';
|
||||
console.log("order_fiat_total: " + order_fiat_total);
|
||||
var order_btcp_total = btcpAmount2
|
||||
document.getElementById('btcp_total_value').innerHTML = order_btcp_total;
|
||||
document.getElementById('fiat_total_value').innerHTML = order_fiat_total;
|
||||
|
||||
var btcpWidget = {};
|
||||
btcpWidget.data = {
|
||||
"id" : "btcp_widget",
|
||||
"buttonData" : "buy_A1_1",
|
||||
"hideButton" : true,
|
||||
"merchantid" : "343",
|
||||
"walletid" : "12",
|
||||
"amount" : order_btcp_total,
|
||||
"itemid" : "0",
|
||||
"description" : "cart purchase",
|
||||
"transactiondetails" :
|
||||
{
|
||||
"itemId" : 0,
|
||||
"test" : "test item"
|
||||
}
|
||||
};
|
||||
|
||||
btcpWidget.onPaymentSuccess = function(data) {
|
||||
console.log("Payment Success:\n\n" + JSON.stringify(data));
|
||||
paymentAddress = data.address;
|
||||
paymentTxid = data.txid;
|
||||
paymentTxref = data.transactionRef;
|
||||
|
||||
var payment_address_textbox = document.getElementById('i_payment_address');
|
||||
payment_address_textbox.value = paymentAddress;
|
||||
var payment_txid_textbox = document.getElementById('i_payment_txid');
|
||||
payment_txid_textbox.value = paymentTxid;
|
||||
var payment_txref_textbox = document.getElementById('i_payment_txref');
|
||||
payment_txref_textbox.value = paymentTxref;
|
||||
//document.getElementById('i_payment_address').innerHTML = paymentAddress;
|
||||
|
||||
console.log("address: " + paymentAddress);
|
||||
console.log("txid: " + paymentTxid);
|
||||
console.log("txref: " + paymentTxref);
|
||||
alert("Payment success! Data:\n\n" + JSON.stringify(data));
|
||||
completedPayment = true;
|
||||
get('place_order').click();
|
||||
};
|
||||
|
||||
btcpWidget.onPaymentFail = function(data) {
|
||||
alert("Payment failed! Reason: " + data.reason);
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- Load core functionality //-->
|
||||
<script src="//mattpass.com/lab/widget.js" id="btcp_widget"></script>
|
||||
|
||||
<script>
|
||||
setTimeout(function() {
|
||||
get('place_order').addEventListener("click", function(e){
|
||||
if ("undefined" != typeof completedPayment) {
|
||||
// return true;
|
||||
} else if (!btcpWidget.showPaymentScreenLockOn) {
|
||||
e.preventDefault();
|
||||
btcpWidget.paidEnough
|
||||
? alert("Payment in progress, please wait")
|
||||
: btcpWidget.showPaymentScreen();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
},3000)
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Process the payment and return the result.
|
||||
*
|
||||
* @param int $order_id
|
||||
* @return array
|
||||
*/
|
||||
public function process_payment($order_id)
|
||||
{
|
||||
|
||||
$order = wc_get_order($order_id);
|
||||
|
||||
$status = 'wc-' === substr($this->order_status, 0, 3) ? substr($this->order_status, 3) : $this->order_status;
|
||||
|
||||
// Set order status
|
||||
$order->update_status($status, __('Checkout with custom payment. ', $this->domain));
|
||||
|
||||
// Reduce stock levels
|
||||
// depreceiated // $order->reduce_order_stock();
|
||||
//$order->reduce_stock_levels();
|
||||
|
||||
// Remove cart
|
||||
WC()->cart->empty_cart();
|
||||
|
||||
// Return thankyou redirect
|
||||
return array(
|
||||
'result' => 'success',
|
||||
'redirect' => $this->get_return_url($order)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
add_filter('woocommerce_payment_gateways', 'add_custom_gateway_class');
|
||||
function add_custom_gateway_class($methods)
|
||||
{
|
||||
$methods[] = 'WC_Gateway_Custom';
|
||||
return $methods;
|
||||
}
|
||||
|
||||
add_action('woocommerce_checkout_process', 'process_custom_payment');
|
||||
function process_custom_payment()
|
||||
{
|
||||
|
||||
if ($_POST['payment_method'] != 'custom')
|
||||
return;
|
||||
|
||||
if( !isset($_POST['i_payment_address']) || empty($_POST['i_payment_address']) )
|
||||
wc_add_notice( __( 'Payment address not populated'), 'error' );
|
||||
if( !isset($_POST['i_payment_txid']) || empty($_POST['i_payment_txid']) )
|
||||
wc_add_notice( __( 'Payment txid not populated'), 'error' );
|
||||
if( !isset($_POST['i_payment_txref']) || empty($_POST['i_payment_txref']) )
|
||||
wc_add_notice( __( 'Payment txref not populated'), 'error' );
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the order meta with field value
|
||||
*/
|
||||
add_action('woocommerce_checkout_update_order_meta', 'custom_payment_update_order_meta');
|
||||
function custom_payment_update_order_meta($order_id)
|
||||
{
|
||||
|
||||
if ($_POST['payment_method'] != 'custom')
|
||||
return;
|
||||
|
||||
// echo "<pre>";
|
||||
// print_r($_POST);
|
||||
// echo "</pre>";
|
||||
// exit();
|
||||
|
||||
update_post_meta($order_id, 'paymentAddress', $_POST['i_payment_address']);
|
||||
update_post_meta($order_id, 'paymentTxid', $_POST['i_payment_txid']);
|
||||
update_post_meta($order_id, 'paymentTxref', $_POST['i_payment_txref']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display field value on the order edit page
|
||||
*/
|
||||
add_action('woocommerce_admin_order_data_after_billing_address', 'custom_checkout_field_display_admin_order_meta', 10, 1);
|
||||
function custom_checkout_field_display_admin_order_meta($order)
|
||||
{
|
||||
$method = get_post_meta($order->id, '_payment_method', true);
|
||||
if ($method != 'custom')
|
||||
return;
|
||||
|
||||
$paymentAddress = get_post_meta($order->id, 'paymentAddress', true);
|
||||
$paymentTxid = get_post_meta($order->id, 'paymentTxid', true);
|
||||
$paymentTxref = get_post_meta($order->id, 'paymentTxref', true);
|
||||
|
||||
echo '<p><strong>' . __('Payment Address') . ':</strong> <a href="https://explorer.btcprivate.org/address/' . $paymentAddress . '" target="_blank"> ' . $paymentAddress . '</a></p>';
|
||||
echo '<p><strong>' . __('BTCP Transaction ID') . ':</strong> <a href="https://explorer.btcprivate.org/tx/' . $paymentTxid . '" target="_blank"> ' . $paymentTxid . '</a></p>';
|
||||
echo '<p><strong>' . __('BTCP Pay TransactionRef') . ':</strong> ' . $paymentTxref . '</p>';
|
||||
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
<?php
|
||||
/**
|
||||
* @package BTCP_Pay
|
||||
* @version 0.1
|
||||
*/
|
||||
/*
|
||||
Plugin Name: BTCP Pay
|
||||
Plugin URI: http://wordpress.org/plugins/btcp-pay/
|
||||
Description: Official BTCP Pay plugin from the Bitcoin Private core dev team. Allows users to add their widget button directly into the Wordpress website so they can take Bitcoin Private payments.
|
||||
Author: Bitcoin Private
|
||||
Version: 1.0
|
||||
Author URI: https://btcprivate.org
|
||||
*/
|
||||
|
||||
function btcp_pay_widget() {
|
||||
echo '
|
||||
|
||||
<!-- BTCP Pay Widget // -->
|
||||
<!-- Set parameters and actions //-->
|
||||
<script id="btcp_widget_data">
|
||||
var btcpWidget = {};
|
||||
btcpWidget.data = {
|
||||
"id" : "btcp_widget",
|
||||
"buttonData" : "buy_A1_6",
|
||||
"merchantid" : "414",
|
||||
"walletid" : "2",
|
||||
"amount" : 0.001,
|
||||
"itemid" : "0",
|
||||
"description" : "Pepperoni Pizza",
|
||||
"transactiondetails" :
|
||||
{
|
||||
"size" : "12 inch",
|
||||
"crust" : "stuffed",
|
||||
"pan" : "thin base"
|
||||
}
|
||||
};
|
||||
|
||||
btcpWidget.onPaymentSuccess = function(data) {
|
||||
alert("Payment success! Data:\n\n" + JSON.stringify(data));
|
||||
};
|
||||
|
||||
btcpWidget.onPaymentFail = function(data) {
|
||||
alert("Payment failed! Reason: " + data.reason);
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- Load core functionality //-->
|
||||
<script src="//mattpass.com/lab/widget.js" id="btcp_widget"></script>
|
||||
|
||||
';
|
||||
}
|
||||
?>
|
Loading…
Reference in New Issue