Applet does not have message pushing function, to achieve this, you can use php's websocket
Configure the server.
1. Upload the web-msg-sender directory to the server (download address https://www.workerman.net/web-sender)
2. Modify the start_io.php file to modify the certificate path (nginx certificate)
$sender_io = new SocketIO(2120);
Modify to
$context = array( 'ssl' => array( 'local_cert' => '/ssl/cn_bundle.crt', 'local_pk' => '/ssl/pk.key', 'verify_peer' => false, ) ); // PHPSocketIO Service $sender_io = new SocketIO(2120,$context);
Certificates can be applied for through Tencent Cloud. After downloading, select the nginx certificate inside.
3. Check the environment with http://doc.workerman.net/faq/disable-function-check.html
If disable function vi/usr/local/php/etc/php.ini finds disable_functions to remove the disable item
4. After entering the web-msg-sender directory, execute the startup command windows system enters the framework directory, double-click the start_for_win.bat file to start
php start.php start -d
5. Open port 2120 2121 and join the Cloud Server Security Group
You can perform telnet domain name 2120 test in cmd to see if it is connected
6. Don't forget to add the domain name or ip to the wss domain name of the authorized domain name of the WeChat applet, otherwise it will not be accessible
2. Configure Client
1 Applet Client
weapp.socket.io.js File Download
http://fourpan.com/fs/exi6ao0gg6vi9pdf04/
https://github.com/10cella/weapp.socket.io
const io = require('../../utils/weapp.socket.io.js') Page({ /** * Initial data for page */ data: {}, /** * Lifecycle Functions--Listen for Page Loading */ onLoad: function () { var that = this; var uid='bitefu1'; const socket = io('https://Domain name or ip:2120') socket.on('connect', () => { console.log(socket.connected); // true socket.emit('login', uid); }); socket.on('new_msg', d => { console.log('received news: ', d) }) } })
2. Web Client
Easy to send tests Deliberately send a web-side for easy testing.
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <script src='https://cdn.bootcss.com/socket.io/2.0.3/socket.io.js'></script> <script src='//cdn.bootcss.com/jquery/1.11.3/jquery.js'></script> <script> var domain='Domain name or ip'; </script> </head> <body> <div style="width:850px;"> <h3>test:</h3> //Current user uid:<b class="uid"></b><br> //You can send a message to the current user via url:<a id="send_to_one" href="" target="_blank"><font style="color:#91BD09">http://<font class="domain"></font>:2121?Type=publish&to=<b class="uid"></b>&content=message content</font></a> //You can push messages to all online users via url:<a href=""target="_blank" id="send_to_all"><font style="color:#91BD09">http://<font class="domain"></font>:2121?Type=publish&to=&content=message content</font></a> <script> // Replace usage with real uid, here's a convenient demonstration of using timestamps var uid = Date.parse(new Date()); $('#send_to_one').attr('href', 'http://'+domain+':2121/?type=publish&content=%E6%B6%88%E6%81%AF%E5%86%85%E5%AE%B9&to='+uid); $('.uid').html(uid); $('#send_to_all').attr('href', 'http://'+domain+':2121/?type=publish&content=%E6%B6%88%E6%81%AF%E5%86%85%E5%AE%B9'); $('.domain').html(domain); </script> </div> <script> $(document).ready(function () { // Connect server var socket = io('https://'+domain+':2120'); // Log on after connection socket.on('connect', function(){ socket.emit('login', uid); }); // When the backend pushes a message socket.on('new_msg', function(msg){ $('#content').append('received message:'+msg+'<br>'); }); // When backend pushes online data socket.on('update_online_count', function(online_stat){ $('#online_box').html(online_stat); }); }); </script> <div id="online_box"></div> <div id="content"></div> </body> </html>
Three-server messaging
<?php // Indicates to whom to push, empty means to push to all online users $to_uid = 'bitefu1'; // Push url address, use your own server address $push_api_url = "http://Domain name or ip:2121/"; $content='Hello, everyone'; $post_data = array( "type" => "publish", "content" =>$content , "to" => $to_uid, ); $res=curlget($push_api_url,$post_data,'POST',array(),true); var_export($res); function curlget($url, $params='', $method = 'GET', $header = array(), $multi = false,$debug=false,$optsother='') { $opts = array(CURLOPT_TIMEOUT => 10,CURLOPT_RETURNTRANSFER=> 1,CURLOPT_SSL_VERIFYPEER=> false,CURLOPT_SSL_VERIFYHOST=> false,CURLOPT_HTTPHEADER => $header); switch (strtoupper($method)) {/* Setting specific parameters based on request type */ case 'GET':$opts[CURLOPT_URL] = $params?$url.'?'.http_build_query($params):$url;break; case 'POST':$params = $multi ? $params : http_build_query($params);//Determine whether to transfer files $opts[CURLOPT_URL] = $url;$opts[CURLOPT_POST] = 1;$opts[CURLOPT_POSTFIELDS] = $params;break; default:if($debug)E('Unsupported request method!');break; }$ch = curl_init();if($optsother && is_array($optsother))$opts=$opts+$optsother;curl_setopt_array($ch, $opts);$data = curl_exec($ch);$error = curl_error($ch);curl_close($ch);/* Initialize and execute curl requests */ if($error && $debug){E('An error occurred in the request:'.$error);} return $data; }