Centos7

CentOS7安装Python3的方法CentOS7搭建L2TP服务端一键脚本CentOS7使用CertBot工具获取LetSencrypt泛域名HTTPS证书

Git

GIT删除仓库的历史提交记录脚本示例GIT进行代码量统计和贡献统计

HTTP

HTTP关于HEADER的详细解释HTTP协议对URI长度POST数据长度及COOKIE长度限制说明HTTP关于Code状态码的详细解释

JavaScript

JavaScript下的RSA对称加密DEMOJavaScript解析并遍历Excel示例代码JavaScript调用语音合成Speech Synthesis API使用ElementUI配合API数据快速渲染合并表格

Linux

Linux 信号说明列表说明Linux利用CronTab定时执行ThinkPHP命令行模式

MySQL

MySQL字符串截取MySQL腾讯云数据库导出备份到本地服务器导入MySQL设计与使用规范MySQL在5.7及以上版本中的ONLY_FULL_GROUP_BY问题处理方案

Nginx

Nginx反向代理NodeJS实现WSS协议Nginx反向代理中的Host参数传递遇到的坑Nginx配置HTTPS与HTTP2.0Nginx负载均衡的lnmp环境初始化脚本Nginx图片递归代理服务器DEMO

NodeJS

NodeJS一些冷门但实用的npm包NodeJS使用Request模块实现CURLNodeJS使用express模块无法收到phpCurl的值NodeJS使用jimp和qrcode-reader识别解析二维码NodeJS实现UDP数据报套接字通讯NodeJS实现Websocket聊天室NodeJS实现串口通讯简单例程NodeJS实现微信协议登录NodeJS实现超级方便的Git自动发布WebhookNodeJS控制台简单表格打印NodeJS转码amr到mp3NWJS配置文件

Other

C#串口通信扫码枪数据读取支付宝Schema协议列表默克尔树基础算法示例博客的升级历程

PHP

PHP下RSA对称加密超长字符串分段加密DEMOPHP下phpMyAdmin数据字典美化代码PHP下的RSA对称加解密-根证书自签与签发子证书PHP使用root权限执行系统命令和切换到www用户PHP使用独占文件指针实现阻塞少量并发PHP多进程同时处理任务示例DEMO代码PHP大文件视频上传WebUploaderPHP实现Web方式发起一个超时任务的处理请求PHP实现二叉查找树的简单代码实现PHP实现微博登录简单代码PHP微信JSSDK开发DEMOPHP的坑XML转JSONPHP简单实现QQ登录代码PHP获取URL HTTP_HOST和SERVER_NAMEPHP获取上周、本周、上月、本月、本季度、上季度时间方法PHP获取真实IP之IP代理-IP伪造-真实IPPHP解密微信小程序手机号简单DEMOPHP高精度计算常用代码

Python

Python3使用Pool进程池实现多进程并发Python3使用jieba分词并生成WordCloud词云图Python3使用request进行CURL操作Python3实现WebhookPython3使用Selenium进行自动化测试手册

Wechat

微信公众号php环境无法获取POST值微信公众号网页跳转避免出现导航栏的小技巧
PHP微信JSSDK开发DEMO
手机阅读

扫描二维码阅读文章
<?php 
function getWxToken($appid, $appkey)
{
    $access_token = Config('access_token');
    if ($access_token) {
        return $access_token;
    }
    
    $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . $appid . '&secret=' . $appkey;
    $res = file_get_contents($url);
    $res = json_decode($res, true);
    if ($res && $res['access_token']) {
        Config('access_token', $res['access_token']);
        return $res['access_token'];
    }else{
        return '';
    }
}

function getWxJsToken($token)
{
    $jsapi_ticket = Config('jsapi_ticket');
    if ($jsapi_ticket) {
        return $jsapi_ticket;
    }
    $url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=' . $token;
    $res = file_get_contents($url);
    $res = json_decode($res, true);
    if ($res && $res['errcode'] == 0) {
        Config('jsapi_ticket', $res['ticket']);
        return $res['ticket'];
    }else{
        return '';
    }
}

function getSign($data)
{
    ksort($data);
    $str = [];
    foreach ($data as $key => $val) {
        $str[] = "$key=$val";
    }
    $sign = hash('sha1', implode('&', $str));
    
    return $sign;
}

function Config($key, $value = '', $expire = 7000)
{
    $file = 'wx_'.$key.'.txt';
    if ($value) {
        file_put_contents($file, json_encode([
            'value'  => $value,
            'expire' => time() + $expire,
        ]));
    }
    else {
        if (!is_file($file)){ 
            return '';
        }
        
        $data = file_get_contents($file);
        $data = json_decode($data, true);
        if ($data['expire'] >= time()){
            return $data['value'];
        }else{
            return '';
        }
    }
}

$appid  = '';
$appkey = '';

$token    = getWxToken($appid, $appkey);
$js_token = getWxJsToken($token);

$data = [
    'noncestr'     => sha1(time()) . mt_rand(100000, 999999),
    'timestamp'    => time(),
    'jsapi_ticket' => $js_token,
    'url'          => $_SERVER['HTTP_REFERER'] ?? ($_SERVER['REQUEST_SCHEME']."://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']),
];

$sign = getSign($data);
?>
<script src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
<script>
wx.config({
    debug: true,
    appId: '<?php echo $appid ?>',
    timestamp: <?php echo $data['timestamp']; ?>,
    nonceStr: '<?php echo $data['noncestr']; ?>',
    signature: '<?php echo $sign; ?>',
    jsApiList: ['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareQZone']
});
</script>