Comment on page

Payment integrate example

Below you can see the structure of WooCommerce integration. This way you can develop your own custom converters.
Or you can contact us to get custom development service from us.
use BeycanPress\CryptoPay\Services;
use BeycanPress\CryptoPay\PluginHero\Hook;
use BeycanPress\CryptoPay\Pages\TransactionPage;
Services::registerAddon('woocommerce');
if (is_admin()) {
new TransactionPage(
esc_html__('Order transactions', 'cryptopay'),
'order_transactions',
'woocommerce',
2,
[
'orderId' => function($tx) {
return '<a href="'.get_edit_post_link($tx->orderId).'" target="_blank">'.$tx->orderId.'</a>';
}
]
);
}
add_action('woocommerce_after_checkout_validation', function($data, $errors) {
$paymentMethod = WC()->session->get('chosen_payment_method');
if ($paymentMethod == 'cryptopay' && wp_doing_ajax()) {
if (empty($errors->errors)) {
WC()->session->set('cp_posted_data', $data);
Response::success();
}
foreach ($errors->errors as $code => $messages) {
$data = $errors->get_error_data($code);
foreach ($messages as $message) {
wc_add_notice($message, 'error', $data);
}
}
if (!isset(WC()->session->reload_checkout)) {
$messages = wc_print_notices(true);
}
$data = [
'refresh' => isset(WC()->session->refresh_totals),
'reload' => isset(WC()->session->reload_checkout),
];
unset(WC()->session->refresh_totals, WC()->session->reload_checkout);
Response::error((isset($messages) ? $messages : ''), null, $data);
}
}, 10, 2);
Hook::addFilter('check_order_woocommerce', function($order) {
if (isset($order->id)) {
$order->amount = wc_get_order($order->id)->get_total();
} else {
$order->amount = \WC()->cart->total;
}
return $order;
}, 10, 2);
Hook::addFilter('before_payment_started_woocommerce', function(object $data) {
if (!isset($data->order->id)) {
$postedData = WC()->session->get('cp_posted_data');
$data->order->id = $this->checkout->createOrder($data->userId, $postedData);
} elseif (isset($data->order->id)) {
wc_get_order($data->order->id)->update_status('wc-on-hold');
}
return $data;
});
Hook::addFilter('before_payment_finished_woocommerce', function(object $data) {
if (!isset($data->order->id)) {
$data->order->id = WC()->session->get('cp_order_id');
}
return $data;
});
Hook::addAction('payment_finished_woocommerce', function(object $data) {
if ($order = wc_get_order($data->order->id)) {
$order->update_meta_data(
esc_html__('Blockchain network', 'cryptopay'),
$data->network->name
);
$order->update_meta_data(
esc_html__('Transaction hash', 'cryptopay'),
$data->hash
);
$order->update_meta_data(
esc_html__('Payment currency', 'cryptopay'),
$data->order->paymentCurrency->symbol
);
$order->update_meta_data(
esc_html__('Payment price', 'cryptopay'),
Services::toString($data->order->paymentPrice, $data->order->paymentCurrency->decimals)
);
$order->save();
if ($data->status) {
if ($this->setting('paymentCompleteOrderStatus') == 'wc-completed') {
$note = esc_html__('Your order is complete.', 'cryptopay');
} else {
$note = esc_html__('Your order is processing.', 'cryptopay');
}
$order->payment_complete();
$order->update_status($this->setting('paymentCompleteOrderStatus'), $note);
} else {
$order->update_status('wc-failed', esc_html__('Payment not verified via Blockchain!', 'cryptopay'));
}
}
});
Hook::addFilter('payment_redirect_urls_woocommerce', function(object $data) {
$order = wc_get_order($data->order->id);
return [
'success' => $order->get_checkout_order_received_url(),
'failed' => $order->get_view_order_url()
];
});