22
33require_once dirname (__DIR__ , 1 ) . '/vendor/autoload.php ' ;
44use Web3 \Utils ;
5+ use chillerlan \QRCode \QRCode ;
56
67if ( ! defined ( 'ABSPATH ' ) ) {
78 exit ;
@@ -52,7 +53,8 @@ public function __construct() {
5253 add_action ( 'woocommerce_api_kyber_callback ' , array ( $ this , 'handle_kyber_callback ' ) );
5354 add_action ( 'woocommerce_order_details_after_order_table_items ' , array ( $ this , 'add_tx_hash_to_order ' ) );
5455 add_action ( 'woocommerce_thankyou ' , array ( $ this , 'embed_kyber_widget_button ' ) );
55- add_action ( 'woocommerce_admin_order_totals_after_total ' , array ( $ this , 'kyber_price_filter ' ) );
56+ // add_action( 'woocommerce_admin_order_totals_after_total', array( $this, 'kyber_price_filter' ) );
57+ add_action ( 'woocommerce_email_order_meta ' , array ( $ this , 'add_tx_hash_to_email ' ), 10 , 3 );
5658 }
5759
5860 /**
@@ -225,12 +227,12 @@ public function get_list_token_supported() {
225227 return $ result ;
226228 }
227229
228- public function get_token_rate ( $ token ) {
230+ public function get_token_rate ( $ token, $ base ) {
229231 $ network = $ this ->get_option ('network ' );
230232 if ( $ network == "ropsten " ) {
231- $ tracker_url = 'https://ropsten-api.kyber.network/token_price?currency=USD ' ;
233+ $ tracker_url = sprintf ( 'https://ropsten-api.kyber.network/token_price?currency=%s ' , $ base ) ;
232234 } else {
233- $ tracker_url = 'https://api.kyber.network/token_price?currency=USD ' ;
235+ $ tracker_url = sprintf ( 'https://api.kyber.network/token_price?currency=%s ' , $ base ) ;
234236 }
235237 $ response = wp_remote_get ( $ tracker_url );
236238
@@ -401,6 +403,8 @@ public function get_checkout_url( $order ) {
401403 if ( !$ receiveAmount ) {
402404 $ receiveAmount = $ this ->get_token_price ( $ order );
403405 error_log ( print_r ( sprintf ("cannot get token price from order meta data, try to get from blockchain: %s " , $ receiveAmount ), 1 ) );
406+ $ order ->add_meta_data ( "token_price " , $ receiveAmount , true );
407+ $ order ->save ();
404408 }
405409
406410 $ endpoint .= 'mode= ' . $ mode .'&receiveAddr= ' . $ receiveAddr . '&receiveToken= ' . $ receiveToken . '&callback= ' . $ callback_url . '&receiveAmount= ' . $ receiveAmount ;
@@ -464,7 +468,7 @@ public function handle_kyber_callback() {
464468 }
465469
466470 // Reduce stock levels
467- $ order -> reduce_order_stock ( );
471+ wc_reduce_stock_levels ( $ order_id );
468472
469473 // Save transaction hash to order
470474 $ order ->update_meta_data ("tx " , $ tx );
@@ -559,9 +563,17 @@ public function embed_kyber_widget_button( $order_id ) {
559563
560564 $ widget_text = apply_filters ( 'kyber_widget_text ' , __ ('Pay by tokens ' , 'woocommerce-gateway-kyber ' ) );
561565
562- printf ("<a href='%s'
563- class='theme-emerald kyber-widget-button' name='KyberWidget - Powered by KyberNetwork' title='Pay by tokens'
564- target='_blank'>%s</a> " , $ endpoint , $ widget_text );
566+ $ qr = (new QRCode )->render ($ endpoint );
567+
568+ printf ("
569+ <div class='kyber-payment-button-wrap'>
570+ <div class='kyber-payment-link-wrap'>
571+ <a href='%s' class='theme-emerald kyber-widget-button' name='KyberWidget - Powered by KyberNetwork' title='Pay by tokens' target='_blank'>%s</a>
572+ </div>
573+ <div class='kyber-payment-qr-wrap'>
574+ <img src='%s' class='kyber-payment-qr' />
575+ </div>
576+ </div> " , $ endpoint , $ widget_text , $ qr );
565577 }
566578 }
567579
@@ -584,17 +596,32 @@ public function payment_fields() {
584596 $ total = $ order ->get_total ();
585597 }
586598 $ receiveToken = $ this ->get_option ( "receive_token_symbol " );
587- $ rate = $ this ->get_token_rate ( $ receiveToken );
599+ $ rate = $ this ->get_token_rate ( $ receiveToken, " USD " );
588600
589601 $ token_price = 0 ;
590602 if ( $ rate != 0 ) {
591603 $ token_price = $ total / $ rate ;
592604 }
593605
606+ if ( $ receiveToken != "ETH " ) {
607+ $ rate_eth = $ this ->get_token_rate ( $ receiveToken , "ETH " );
608+ } else {
609+ $ rate_eth = 1 ;
610+ }
611+
612+ if ( $ token_price *$ rate_eth < 0.001 ) {
613+ $ token_price_html = sprintf (
614+ "<br><br>
615+ <p>Total value of token is <strong>%f%s</strong> which is smaller than <strong>0.001ETH</strong>.
616+ Kyber Widget only can handle amount which is equal or bigger than <strong>0.001ETH</strong> equivalent. Please add more items or choose another payment method.</p> " , $ token_price , $ receiveToken );
617+ echo $ token_price_html ;
618+ return ;
619+ };
620+
594621 $ token_price_html = sprintf ('</br><p></p>
595622 <div class="kyber-cart-token-price">
596623 <img style="float:left; margin-right: 5px;" src="%s" height="24px" width="24px">
597- <strong>%.3f </strong>
624+ <strong>%.5f </strong>
598625 <span class="receive-token"><strong>%s</strong></span>
599626 </div> ' ,
600627 esc_html (sprintf ("https://files.kyber.network/DesignAssets/tokens/%s.svg " , strtolower ($ receiveToken ))),
@@ -613,21 +640,45 @@ public function payment_fields() {
613640 */
614641 public function get_token_price ( $ order ) {
615642 $ receiveToken = $ this ->get_option ( "receive_token_symbol " );
616- $ rate = $ this ->get_token_rate ( $ receiveToken );
643+ $ rate = $ this ->get_token_rate ( $ receiveToken, " USD " );
617644
618645 $ token_price = 0 ;
619646 if ( $ rate != 0 ) {
620647 $ token_price = $ order ->get_total () / $ rate ;
621648 }
622649 $ order ->add_meta_data ( "token_price " , $ token_price , true );
650+ $ order ->save ();
623651
624652 return $ token_price ;
625653 }
626654
627- public function kyber_price_filter ( $ order_id ) {
628- error_log ( print_r ( sprintf ("kyber price filter: %s " , $ order_id ), 1 ) );
629- $ total_order_token_price_html = sprintf ('<p>%s</p> ' , esc_html ($ order_id ));
630- return $ total_order_token_price_html ;
655+ /**
656+ * Add tx hash to email
657+ *
658+ * @return string order meta data
659+ *
660+ * @since 0.3
661+ */
662+ public function add_tx_hash_to_email ( $ order , $ sent_to_admin , $ plain_text ) {
663+ $ tx_hash = $ order ->get_meta ( "tx " );
664+ if ( empty ($ tx_hash ) ) {
665+ return ;
666+ }
667+ $ network = $ order ->get_meta ( "network " );
668+ $ etherscan_url = "https://etherscan.io/tx/ " + $ tx_hash ;
669+ if ( $ network == "ropsten " ) {
670+ $ etherscan_url = sprintf ("https://%s.etherscan.io/tx/%s " , $ network , $ tx_hash );
671+ }
672+ $ metadata = "" ;
673+ if ($ plain_text ) {
674+ $ metadata = sprintf ("Transaction hash: %s " , $ tx_hash );
675+ } else {
676+ $ metadata = "<h3>Transaction hash: </h3> " ;
677+ $ metadata .= sprintf ("<a href='%s'>
678+ %s
679+ </a> " , $ etherscan_url , $ tx_hash );
680+ }
681+ echo $ metadata ;
631682 }
632683
633684}
0 commit comments