Rumah pembangunan bahagian belakang masalah PHP Cara menggunakan PHP untuk mengimbas kod QR untuk log masuk ke QQ

Cara menggunakan PHP untuk mengimbas kod QR untuk log masuk ke QQ

Nov 21, 2022 am 09:27 AM
php qq

Cara menggunakan PHP untuk mengimbas kod QR untuk log masuk ke QQ: 1. Dapatkan kod pengesahan log masuk melalui kaedah "public function QRcode(){...}" 2. Teruskan secara dinamik rentetan nama kelas QQ WeChat, contoh cepat 3. Hasilkan kod QR dan tinjauan pendapat untuk mengesan status kod QR.

Cara menggunakan PHP untuk mengimbas kod QR untuk log masuk ke QQ

Persekitaran pengendalian tutorial ini: sistem Windows 7, PHP versi 8.1, komputer Dell G3.

Bagaimana untuk mengimbas kod QR untuk log masuk ke QQ dengan PHP?

Kongsi bahawa PHP merealisasikan log masuk kod imbasan QQ WeChat pihak keempat Pengguna boleh menyambung ke Kilang Angsa tanpa mengakses platform pembangun phpQQ WeChat log masuk

Saya ambil pakej QQ sendiri dan menyepadukan beberapa kod berpakej di Internet

Butirannya adalah seperti berikut:

QQ:

<?php
class QQ extends Curl_Api
{
    //获取登录验证码
    public function QRcode()
    {
        $url=&#39;https://ssl.ptlogin2.qq.com/ptqrshow?appid=549000912&e=2&l=M&s=4&d=72&v=4&t=0.5409099&#39;.time().&#39;&daid=5&#39;;
        $arr=$this->get_curl_split($url);
        preg_match(&#39;/qrsig=(.*?);/&#39;,$arr[&#39;header&#39;],$match);
        if($qrsig=$match[1])
            return array(&#39;code&#39;=>200,&#39;qrsig&#39;=>$qrsig,&#39;data&#39;=>base64_encode($arr[&#39;body&#39;]));
        else
            return array(&#39;code&#39;=>400,&#39;msg&#39;=>&#39;二维码获取失败&#39;);
    }
    public function ListenQR($qrsig)
    {
        $qrsig = $qrsig[0];
        if(empty($qrsig))return array(&#39;code&#39;=>-1,&#39;msg&#39;=>&#39;qrsig不能为空&#39;);
        $url=&#39;https://ssl.ptlogin2.qq.com/ptqrlogin?u1=https%3A%2F%2Fqzs.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&ptqrtoken=&#39;.$this->getqrtoken($qrsig).&#39;&login_sig=&ptredirect=0&h=1&t=1&g=1&from_ui=1&ptlang=2052&action=0-0-&#39;.time().&#39;0000&js_ver=10194&js_type=1&pt_uistyle=40&aid=549000912&daid=5&&#39;;
        $ret = $this->get_curl($url,0,$url,&#39;qrsig=&#39;.$qrsig.&#39;; &#39;,1);
        if(preg_match("/ptuiCB\(&#39;(.*?)&#39;\)/", $ret, $arr)){
            $r=explode("&#39;,&#39;",str_replace("&#39;, &#39;","&#39;,&#39;",$arr[1]));
            if($r[0]==0){
                preg_match(&#39;/uin=(\d+)&/&#39;,$ret,$uin);
                $uin=$uin[1];
                preg_match(&#39;/skey=@(.{9});/&#39;,$ret,$skey);
                preg_match(&#39;/superkey=(.*?);/&#39;,$ret,$superkey);
                $data=$this->get_curl($r[2],0,0,0,1);
                if($data) {
                    preg_match("/p_skey=(.*?);/", $data, $matchs);
                    $pskey = $matchs[1];
                }
                if($pskey){
                    if(isset($_GET[&#39;findpwd&#39;])){
                        $_SESSION[&#39;findpwd_qq&#39;]=$uin;
                    }
                    return array(&#39;code&#39;=>200,&#39;uin&#39;=>$uin,&#39;skey&#39;=>&#39;@&#39;.$skey[1],&#39;pskey&#39;=>$pskey,&#39;superkey&#39;=>$superkey[1],&#39;nick&#39;=>$r[5]);
                }else{
                    return array(&#39;code&#39;=>201,&#39;msg&#39;=>&#39;登录成功,获取相关信息失败!&#39;.$r[2]);
                }
            }elseif($r[0]==65){
                return array(&#39;code&#39;=>400,&#39;msg&#39;=>&#39;二维码已失效。&#39;);
            }elseif($r[0]==66){
                return array(&#39;code&#39;=>202,&#39;msg&#39;=>&#39;二维码未失效。&#39;);
            }elseif($r[0]==67){
                return array(&#39;code&#39;=>302,&#39;msg&#39;=>&#39;正在验证二维码。&#39;);
            }else{
                return array(&#39;code&#39;=>401,&#39;msg&#39;=>$r[4]);
            }
        }else{
            return array(&#39;code&#39;=>403,&#39;msg&#39;=>$ret);
        }
  
    }
    private function getqrtoken($qrsig){
        $len = strlen($qrsig);
        $hash = 0;
        for($i = 0; $i < $len; $i++){
            $hash += (($hash << 5) & 2147483647) + ord($qrsig[$i]) & 2147483647;
            $hash &= 2147483647;
        }
        return $hash & 2147483647;
    }
}
Salin selepas log masuk

WeChat:

<?php
class Wechat extends Curl_Api
{
    //获取验证码
    public function QRcode()
    {
        $url = "https://login.weixin.qq.com/jslogin?appid=wx782c26e4c19acffb&fun=new&lang=zh_CN";
        $uuid = $this->get_curl($url);
//        var_dump($uuid);
        $uuid = substr($uuid,strpos($uuid,&#39;"&#39;)+1,-2);
        $url = "https://login.wx.qq.com/qrcode/{$uuid}?t=webwx";
        $qrcode = file_get_contents($url);
        $result = [&#39;code&#39;=>200,&#39;uuid&#39;=>$uuid,&#39;qrcode&#39;=>base64_encode($qrcode)];
        return $result;
    }
    public function ListenQR($uuid)
    {
        $paras[&#39;ctime&#39;] = 1000;
        $paras[&#39;rtime&#39;] = 1000;
        $paras[&#39;refer&#39;] = &#39;https://wx2.qq.com/&#39;;
        $api = &#39;https://login.wx2.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=&#39; . $uuid[0] . &#39;&tip=0&#39;;
        $body = $this->curl($api, $paras);
        preg_match(&#39;/(\d){3}/&#39;, $body, $code);
        preg_match(&#39;/redirect_uri="(.*?)"/&#39;, $body, $url);
        if ($code[0] == &#39;200&#39;) {
            $body = $this->curl($url[1]);
            preg_match(&#39;/<wxuin>(\d*?)<\/wxuin>/&#39;, $body, $wxuin);
            $ret[&#39;code&#39;] = 200;
            $ret[&#39;data&#39;][&#39;uin&#39;] = $wxuin[1];
            $ret[&#39;data&#39;][&#39;type&#39;] = &#39;wx&#39;;
            $ret[&#39;msg&#39;] = &#39;登录成功&#39;;
        } else {
            $ret[&#39;code&#39;] = 408;
            $ret[&#39;msg&#39;] = &#39;请使用手机微信扫码登录&#39;;
        }
        return $ret;
    }
}
Salin selepas log masuk

Untuk memudahkan penggunaan, di sini saya telah merangkumkan kelas

Lepaskan secara dinamik dalam rentetan nama kelas QQ WeChat untuk instantiasi pantas

Kelas Tencent:

<?php
Class Tencent{
    protected $path = __DIR__ . &#39;/&#39;;
     private $cl;
     /*
      * 动态传入QQ或WX字符串,自动转换对应的api类登录
      */
    public function __construct($type)
    {
        //注册自动加载函数
        spl_autoload_register([$this,&#39;Psr4Autoload&#39;]);
        //引入curl
        $this->cl = new $type();
    }
    public function Psr4Autoload($class)
    {
    $class_file = $this->path .&#39;/&#39;. $class . &#39;.php&#39;;
    if (file_exists($class_file))
    {
        include "$class_file";
    }else{
        die(&#39;类文件&#39;.$class_file .&#39;不存在&#39;);
    }
    }
    public function QRcode()
    {
        return call_user_func([$this->cl,__FUNCTION__]);
    }
    public function ListenQR(...$args)
    {
        return call_user_func([$this->cl,__FUNCTION__],$args);
    }
    public function __call($name, $arguments)
    {
       call_user_func_array([$this->cl,$name],(array)$arguments);
    }
}
Salin selepas log masuk

Dan kelas curl terakhir:

<?php
class Curl_Api
{
    public $ua = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36";
      
     public function get_curl($url,$post=0,$referer=0,$cookie=0,$header=0,$ua=0,$nobaody=0){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        $httpheader[] = "Accept: application/json";
        $httpheader[] = "Accept-Encoding: gzip,deflate,sdch";
        $httpheader[] = "Accept-Language: zh-CN,zh;q=0.8";
        $httpheader[] = "Connection: keep-alive";
        curl_setopt($ch, CURLOPT_HTTPHEADER, $httpheader);
        if($post){
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
        }
        if($header){
            curl_setopt($ch, CURLOPT_HEADER, TRUE);
        }
        if($cookie){
            curl_setopt($ch, CURLOPT_COOKIE, $cookie);
        }
        if($referer){
            curl_setopt($ch, CURLOPT_REFERER, $referer);
        }
        if($ua){
            curl_setopt($ch, CURLOPT_USERAGENT,$ua);
        }else{
            curl_setopt($ch, CURLOPT_USERAGENT,$this->ua);
        }
        if($nobaody){
            curl_setopt($ch, CURLOPT_NOBODY,1);
  
        }
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        curl_setopt($ch, CURLOPT_ENCODING, "gzip");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        $ret = curl_exec($ch);
        curl_close($ch);
        return $ret;
    }
    function curl($url, $paras = array()) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        $httpheader[] = "Accept:*/*";
        $httpheader[] = "Accept-Encoding:gzip,deflate,sdch";
        $httpheader[] = "Accept-Language:zh-CN,zh;q=0.8";
        $httpheader[] = "Connection:close";
        curl_setopt($ch, CURLOPT_HTTPHEADER, $httpheader);
        if ($paras[&#39;ctime&#39;]) { // 连接超时
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, $paras[&#39;ctime&#39;]);
        }
        if ($paras[&#39;rtime&#39;]) { // 读取超时
            curl_setopt($ch, CURLOPT_TIMEOUT_MS, $paras[&#39;rtime&#39;]);
        }
        if ($paras[&#39;post&#39;]) {
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $paras[&#39;post&#39;]);
        }
        if ($paras[&#39;header&#39;]) {
            curl_setopt($ch, CURLOPT_HEADER, true);
        }
        if ($paras[&#39;cookie&#39;]) {
            curl_setopt($ch, CURLOPT_COOKIE, $paras[&#39;cookie&#39;]);
        }
        if ($paras[&#39;refer&#39;]) {
            if ($paras[&#39;refer&#39;] == 1) {
                curl_setopt($ch, CURLOPT_REFERER, &#39;http://m.qzone.com/infocenter?g_f=&#39;);
            } else {
                curl_setopt($ch, CURLOPT_REFERER, $paras[&#39;refer&#39;]);
            }
        }
        if ($paras[&#39;ua&#39;]) {
            curl_setopt($ch, CURLOPT_USERAGENT, $paras[&#39;ua&#39;]);
        } else {
            curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36");
        }
        if ($paras[&#39;nobody&#39;]) {
            curl_setopt($ch, CURLOPT_NOBODY, 1);
        }
        curl_setopt($ch, CURLOPT_ENCODING, "gzip");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $ret = curl_exec($ch);
        curl_close($ch);
        return $ret;
    }
     public function get_curl_split($url){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        $httpheader[] = "Accept: */*";
        $httpheader[] = "Accept-Encoding: gzip,deflate,sdch";
        $httpheader[] = "Accept-Language: zh-CN,zh;q=0.8";
        $httpheader[] = "Connection: keep-alive";
        curl_setopt($ch, CURLOPT_HTTPHEADER, $httpheader);
        curl_setopt($ch, CURLOPT_HEADER, TRUE);
        curl_setopt($ch, CURLOPT_USERAGENT,$this->ua);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        curl_setopt($ch, CURLOPT_ENCODING, "gzip");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        $ret = curl_exec($ch);
        $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
        $header = substr($ret, 0, $headerSize);
        $body = substr($ret, $headerSize);
        $ret=array();
        $ret[&#39;header&#39;]=$header;
        $ret[&#39;body&#39;]=$body;
        curl_close($ch);
        return $ret;
    }
}
Salin selepas log masuk

Proses panggilan kasar

1 Simpan empat kelas ke fail

2. Import fail

3 Tulis dua antara muka berasingan, satu untuk menjana kod QR (base64), dan satu untuk meninjau status pengimbasan kod QR

4 berjaya diimbas, ID QQ unik dan ID WeChat akan dikembalikan

5. Di sini saya hanya akan menunjukkan contoh mengimbas kod WeChat untuk log masuk

Menjana kod QR dan tinjauan pendapat untuk mengesan log masuk Status kod QR.php:

<?php
//我这里只引入了一个文件的原因是因为Wechat和QQ类不用引入、只需要把Curl_Api请求类引入进来就好,但我Tencent类内已经引入了。所以这里我只需要引入一个文件就好
include "Lib/Tencent/Tencent.php";
$wx = new Tencent("Wechat");
$ret = $wx->QRcode();
?>
<!--直接生成QR码、记得把uuid给带上-->
<img id="wx" src="data:text/html;base64,<?=$ret[&#39;qrcode&#39;]?>" uuid="<?=$ret[&#39;uuid&#39;]?>">
  
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>
    // setTimeout(function () {
    //     var uuid = document.getElementById(&#39;wx&#39;).getAttribute("uuid");
    //     var url ="/ajax.php?uuid="+uuid;
    //     console.log(url);
    // },1000);
    //每秒去查询一次二维码状态
    $(document).ready(function () {
        setInterval(function () {
            var uuid = document.getElementById(&#39;wx&#39;).getAttribute("uuid");
            var url ="/ajax.php?uuid="+uuid;
            $.ajax({type:"GET",url:url,success:function (data) {
                    if (data.code == 200)
                    {
                        alert("登陆成功,uin为:"+data.uid);
                    }
                }});
        },1000);
    });
  
</script>
Salin selepas log masuk

ajax.php:

<?php
include "Lib/Tencent/Tencent.php";
$wx = new Tencent("Wechat");
//直接获取到uuid后,监听就好了
$ret = $wx->ListenQR($_GET[&#39;uuid&#39;]);
//var_dump($ret);
echo json_encode($ret,true);exit;
Salin selepas log masuk

Contoh ini untuk WeChat, kod yang sama boleh dijalankan pada QQ juga

Terdapat banyak jadual pengguna pangkalan data Medan qq dan wxuin, QQ dan WeChat digunakan untuk menyimpan pengikatan pengguna

Di atas hanyalah satu contoh, dan mungkin tidak ditulis dengan baik. Bos, jangan mengeluh

Kajian yang disyorkan: "Tutorial Video PHP"

Atas ialah kandungan terperinci Cara menggunakan PHP untuk mengimbas kod QR untuk log masuk ke QQ. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Apr 05, 2025 am 12:04 AM

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Terangkan pengikatan statik lewat dalam php (statik: :). Terangkan pengikatan statik lewat dalam php (statik: :). Apr 03, 2025 am 12:04 AM

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah kaedah Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apakah kaedah Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apr 03, 2025 am 12:03 AM

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.

Perisian apa yang boleh membuat bitcoin? Cadangan Perisian Perdagangan 10 Bitcoin Teratas pada tahun 2025 Perisian apa yang boleh membuat bitcoin? Cadangan Perisian Perdagangan 10 Bitcoin Teratas pada tahun 2025 Feb 21, 2025 pm 09:30 PM

Dengan perkembangan pesat pasaran Bitcoin, adalah penting untuk memilih perisian perdagangan yang boleh dipercayai. Artikel ini akan mencadangkan perisian Perdagangan Sepuluh Bitcoin teratas pada tahun 2025 untuk membantu anda berdagang dengan cekap dan selamat. Perisian ini telah ditayangkan dengan ketat dan mempertimbangkan faktor-faktor seperti fungsi, keselamatan, keramahan pengguna dan tahap sokongan. Dari platform mesra pemula ke alat yang kompleks untuk peniaga yang berpengalaman, anda akan mendapati pilihan terbaik untuk keperluan perdagangan anda dalam senarai ini.

Apakah pemalsuan permintaan lintas tapak (CSRF) dan bagaimana anda melaksanakan perlindungan CSRF di PHP? Apakah pemalsuan permintaan lintas tapak (CSRF) dan bagaimana anda melaksanakan perlindungan CSRF di PHP? Apr 07, 2025 am 12:02 AM

Dalam PHP, anda boleh mencegah serangan CSRF dengan menggunakan token yang tidak dapat diramalkan. Kaedah khusus termasuk: 1. Menjana dan membenamkan token CSRF dalam bentuk; 2. Sahkan kesahihan token semasa memproses permintaan.

Terangkan ungkapan perlawanan (Php 8) dan bagaimana ia berbeza dari suis. Terangkan ungkapan perlawanan (Php 8) dan bagaimana ia berbeza dari suis. Apr 06, 2025 am 12:03 AM

Dalam Php8, ungkapan perlawanan adalah struktur kawalan baru yang mengembalikan hasil yang berbeza berdasarkan nilai ungkapan. 1) Ia sama dengan pernyataan suis, tetapi mengembalikan nilai dan bukannya blok pernyataan pelaksanaan. 2) Ekspresi perlawanan secara ketat (===), yang meningkatkan keselamatan. 3) Ia mengelakkan kemungkinan ketinggalan dalam penyataan suis dan meningkatkan kesederhanaan dan kebolehbacaan kod.

PHP dan Python: Membandingkan dua bahasa pengaturcaraan yang popular PHP dan Python: Membandingkan dua bahasa pengaturcaraan yang popular Apr 14, 2025 am 12:13 AM

PHP dan Python masing -masing mempunyai kelebihan mereka sendiri, dan memilih mengikut keperluan projek. 1.PHP sesuai untuk pembangunan web, terutamanya untuk pembangunan pesat dan penyelenggaraan laman web. 2. Python sesuai untuk sains data, pembelajaran mesin dan kecerdasan buatan, dengan sintaks ringkas dan sesuai untuk pemula.

Ringkasan Perisian Essential untuk Bulatan Mata Wang 2025 Ringkasan Perisian Essential untuk Bulatan Mata Wang 2025 Feb 21, 2025 pm 09:42 PM

Panduan ini memberikan gambaran keseluruhan alat perisian penting dalam bulatan mata wang yang membantu pengguna mengurus dan berdagang aset crypto dengan lebih cekap. Perisian ini meliputi pelbagai kategori dari platform perdagangan ke alat analisis dan penyelesaian keselamatan. Panduan ini direka untuk membantu pengguna mempersiapkan pasaran Crypto yang akan datang pada tahun 2025.

See all articles