自助 DIY 万能收款码定制 QQ 微信 支付宝三合一收款码设计制作 非芝麻收款

http://pay.go.kkmobi.com/

合并微信支付宝收款码通过合并后的二维码可以自动识别用户扫码方式,微信扫码则使用微信支付,支付宝扫码则使用支付宝支付,商家无需打印2个二维码,节省成本与空间。

安全,有保障全新扫码转账技术,钱直接转到商家个体账户,本软件不参与中间转账过程,完全免费提供技术支持,保证商家利益。

钱直接付款到个体账号,无手续费用户通过扫描合并后的二维码转账,直接转到商户个体账户里,省去千分之6的手续费。

方便快捷一码收款,对于用户,无需关注扫码支付方式,直接扫码付款即可。不用担心不能微信支付或者支付宝支付

免费可商用图片库(25个)

免费可商用图标库(8个)
1.unDraw
2.pictogram2.com
3.icons8
4.illustrio
5.Iconfont
6.easyicon.net
7.standart
8.60Logo

免费可商用图片库(25个)
1.Free stock photos · Pexels
2.colorhub.me – 高清无版权图片,个人和商业用途免费
3.Beautiful Free Images | Unsplash
4.Awesome Wallpapers – wallhaven.cc
5.Stunning Free Images · Pixabay
6.Free Stock Photos | Stockvault
7.100% free stock photos for personal and commercial use
8.Visual Hunt
9.OnTap | Free Stock Imagery
10.泼辣有图 | Polayoutu – Free Chinese stock photos
11.Hippopx – 精美的免版权图库
12.Stock Image Search Engine| Everypixel
13.PhotoAC
14.Public Domain Images | Free Stock Photos
15.Free high-quality stock photos
16.Desktop Wallpapers 4 Me
17.Free high resolution photography – Life of Pix
18.Gratisography | Free High Resolution Pictures
19.Streetwill | Free Hi-Res Photos
20.Free Stock Photos • picjumbo
21.Fancycrave
22.Free images for commercial use
23.Free Nature Stock
24.Beautiful Free Stock Photos (CC0)
25.Trunklog.com | Free stock photos

原文链接:免费可商用图片库(25个),转载请注明来源!

KKPay 个人收款支付系统 v2.3

完全免费
没有中间商赚差价!每笔交易金额实时直达您个人账户, 不再忍受第三方抽取手续费

无需任何第三方SDK
无需集成任何支付SDK代码,极简自定义开发。 支持任何业务逻辑回调,支持移动端支付

无需签约
营业执照?个体工商户?身份证?统统见鬼去吧! 一张二维收款码搞定收款

演示地址 :http://kkpay.kkmobi.com/pay.php

基于socket.io的php扩展介绍—phpsocket.io

工具地址:https://github.com/walkor/phpsocket.io
phpsocket.io是由workerman根据socket.IO扩展的用于php服务端通讯组件,后台服务用workerman监听端口,处理事件回调.
socket.io-client客户端socket.io.js 供前端界面初始化io
下面是phpsocket.io操作手册:

安装
请使用composer集成phpsocket.io。

脚本中引用vendor中的autoload.php实现SocketIO相关类的加载。例如

require_once ‘/你的vendor路径/autoload.php’;
服务端和客户端连接
创建一个SocketIO服务端

<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
use PHPSocketIO\SocketIO;

// 创建socket.io服务端,监听2021端口
$io = new SocketIO(3120);
// 当有客户端连接时打印一行文字
$io->on('connection', function($socket)use($io){
echo "new connection coming\n";
});
Worker::runAll();

客户端

<script src='https://cdn.bootcss.com/socket.io/2.0.3/socket.io.js'></script>
<script>
// 如果服务端不在本机,请把127.0.0.1改成服务端ip
var socket = io('http://127.0.0.1:3120');
// 当连接服务端成功时触发connect默认事件
socket.on('connect', function(){
console.log('connect success');
});
</script>

自定义事件
socket.io主要是通过事件来进行通讯交互的。

socket连接除了自带的connect,message,disconnect三个事件以外,在服务端和客户端开发者可以自定义其它事件。

服务端和客户端都通过emit方法触发对端的事件。

例如下面的代码在服务端定义了一个chat message事件,事件参数为$msg。

<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
use PHPSocketIO\SocketIO;

$io = new SocketIO(3120);
// 当有客户端连接时
$io->on('connection', function($socket)use($io){
// 定义chat message事件回调函数
$socket->on('chat message', function($msg)use($io){
// 触发所有客户端定义的chat message from server事件
$io->emit('chat message from server', $msg);
});
});
Worker::runAll();

客户端通过下面的方法触发服务端的chat message事件。

<script src='//cdn.bootcss.com/socket.io/1.3.7/socket.io.js'></script>
<script>
// 连接服务端
var socket = io('http://127.0.0.1:3120');
// 触发服务端的chat message事件
socket.emit('chat message', '这个是消息内容...');
// 服务端通过emit('chat message from server', $msg)触发客户端的chat message from server事件
socket.on('chat message from server', function(msg){
console.log('get message:' + msg + ' from server');
});
</script>

workerStart事件
phpsocket.io提供了workerStart事件回调,也就是当进程启动后准备好接受客户端链接时触发的回调。 一个进程生命周期只会触发一次。可以在这里设置一些全局的事情,比如开一个新的Worker端口等等。

require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
use PHPSocketIO\SocketIO;

$io = new SocketIO(9120);

// 监听一个http端口,通过http协议访问这个端口可以向所有客户端推送数据(url类似http://ip:9191?msg=xxxx)
$io->on('workerStart', function()use($io) {
$inner_http_worker = new Worker('http://0.0.0.0:9191');
$inner_http_worker->onMessage = function($http_connection, $data)use($io){
if(!isset($_GET['msg'])) {
return $http_connection->send('fail, $_GET["msg"] not found');
}
$io->emit('chat message', $_GET['msg']);
$http_connection->send('ok');
};
$inner_http_worker->listen();
});

// 当有客户端连接时
$io->on('connection', function($socket)use($io){
// 定义chat message事件回调函数
$socket->on('chat message', function($msg)use($io){
// 触发所有客户端定义的chat message from server事件
$io->emit('chat message from server', $msg);
});
});

Worker::runAll();

phpsocket.io启动后开内部http端口通过phpsocket.io向客户端推送数据参考 web-msg-sender。

分组
socket.io提供分组功能,允许向某个分组发送事件,例如向某个房间广播数据。

1、加入分组(一个连接可以加入多个分组)

$socket->join(‘group name’);
2、离开分组(连接断开时会自动从分组中离开)

$socket->leave(‘group name’);
向客户端发送事件的各种方法
$io是SocketIO对象。$socket是客户端连接

$data可以是数字和字符串,也可以是数组。当$data是数组时,客户端会自动转换为javascript对象。

同理如果客户端向服务端emit某个事件传递的是一个javascript对象,在服务端接收时会自动转换为php数组。

1、向当前客户端发送事件

$socket->emit(‘event name’, $data);
2、向所有客户端发送事件

$io->emit(‘event name’, $data);
3、向所有客户端发送事件,但不包括当前连接。

$socket->broadcast->emit(‘event name’, $data);
4、向某个分组的所有客户端发送事件

$io->to(‘group name’)->emit(‘event name’, $data);
获取客户端ip
$io->on(‘connection’, function($socket)use($io){
var_dump($socket->conn->remoteAddress);
});
关闭链接
$socket->disconnect();
支持SSL(https wss)
SSL 要求workerman>=3.3.7 phpsocket.io>=1.1.1

<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
use PHPSocketIO\SocketIO;

// 传入ssl选项,包含证书的路径
$context = array(
'ssl' => array(
'local_cert' => '/your/path/of/server.pem',
'local_pk' => '/your/path/of/server.key',
'verify_peer' => false,
)
);
$io = new SocketIO(2021, $context);

$io->on('connection', function($socket)use($io){
echo "new connection coming\n";
});

Worker::runAll();

注意:
1、证书是要验证域名的,所以客户端链接时要指定域名才能顺利的建立链接。
2、客户端连接时不能再用http方式,要改成https类似下面这样。

<script>
var socket = io(‘https://yoursite.com:3120’);
//…..
</script>
aa

前端测试:
<script src='http://cdn.bootcss.com/socket.io/1.3.7/socket.io.js'></script>
<script>
// 连接服务端,workerman.net:2120换成实际部署web-msg-sender服务的域名或者ip
var socket = io('http://workerman.net:2120');
// uid可以是自己网站的用户id,以便针对uid推送以及统计在线人数
uid = 123;
// socket连接后以uid登录
socket.on('connect', function(){
socket.emit('login', uid);
});
// 后端推送来消息时
socket.on('new_msg', function(msg){
console.log("收到消息:"+msg);
});
// 后端推送来在线数据时
socket.on('update_online_count', function(online_stat){
console.log(online_stat);
});
</script>
后端调用api向任意用户推送:
<?php
// 指明给谁推送,为空表示向所有在线用户推送
$to_uid = "";
// 推送的url地址,使用自己的服务器地址
$push_api_url = "http://workerman.net:2121/";
$post_data = array(
"type" => "publish",
"content" => "这个是推送的测试数据",
"to" => $to_uid, 
);
$ch = curl_init (); //curl初始化
curl_setopt ( $ch, CURLOPT_URL, $push_api_url ); //api地址
curl_setopt ( $ch, CURLOPT_POST, 1 ); //设置为POST方式
curl_setopt ( $ch, CURLOPT_HEADER, 0 ); //头信息不输出
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); //如果成功只将结果返回,不自动输出任何内容
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $post_data ); //POST数据
curl_setopt ($ch, CURLOPT_HTTPHEADER, array("Expect:")); //当post数据大于1024时强制执行
$return = curl_exec ( $ch ); //执行
curl_close ( $ch ); //关闭资源
var_export($return); //打印结果同var_dump()

Chrome桌面提醒功能,兼容新老版本,firefox最新版本也通过

//桌面提醒
function notify(title, content) {
        
        if(!title && !content){
            title = "桌面提醒";
            content = "您看到此条信息桌面提醒设置成功";
        }
        var iconUrl = "/images/send_ok.png";
        
        if (window.webkitNotifications) {
            //chrome老版本
            if (window.webkitNotifications.checkPermission() == 0) {
                var notif = window.webkitNotifications.createNotification(iconUrl, title, content);
                notif.display = function() {}
                notif.onerror = function() {}
                notif.onclose = function() {}
                notif.onclick = function() {this.cancel();}
                notif.replaceId = 'Meteoric';
                notif.show();
            } else {
                window.webkitNotifications.requestPermission($jy.notify);
            }
        }
        else if("Notification" in window){
            // 判断是否有权限
            if (Notification.permission === "granted") {
                var notification = new Notification(title, {
                    "icon": iconUrl,
                    "body": content,
                });
            }
            //如果没权限,则请求权限
            else if (Notification.permission !== 'denied') {
                Notification.requestPermission(function(permission) {
                    // Whatever the user answers, we make sure we store the
                    // information
                    if (!('permission' in Notification)) {
                        Notification.permission = permission;
                    }
                    //如果接受请求
                    if (permission === "granted") {
                        var notification = new Notification(title, {
                            "icon": iconUrl,
                            "body": content,
                        });
                    }
                });
            }
        }
    }