Comment on page
Payment integrate example
Below you can see the structure of WooCommerce integration. This way you can develop your own custom converters.
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()
];
});
Last modified 2mo ago