2017 © Pedro Peláez
 

library tool

payment package

image

johnxu/tool

payment package

  • Tuesday, July 3, 2018
  • by johnxu
  • Repository
  • 1 Watchers
  • 1 Stars
  • 10 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 7 Versions
  • 25 % Grown

The README.md

字符串操作

截取字符串

<?php
use johnxu\tool\Str;
$res = Str::getInstance()->cut('http://www.johnxu.net', 0, 3);
var_dump($res); // htt

转换编码

<?php
use johnxu\tool\Str;
$res = Str::getInstance()->encoding('我们是好朋友', 'GBK');
var_dump($res); // �����Ǻ�����

var_dump(Str::getInstance()->encoding('�����Ǻ�����', 'UTF-8')); // 我们是好朋友

内置方法

  • cut(string, start , length) 截取字符串
  • lower(string) // 转换小写
  • upper(string) // 转换大小
  • has(string, neddle) // 查找是否存在该字符串
  • remove(string, neddle) // 去除字符串
  • reverse(string) // 翻转字符串
  • arrayToString(array) // 将数组转换成字符串
  • stringToArray(string) // 将字符串转换成数组
  • ucwords(string) // 将字符串每个单子首字母大写
  • ucfirst(string) // 将字符首字母大写
  • generateTradeNo(length) // 创建订单号\
  • generateUid(); // 创建用户ID
  • getMachineCode(block, blockSize, split); // 创建机器激活码:8E8363C1-094E0EDC-7D67C393
  • formatBytes(size, delimiter); // 格式化文件大小:10KB, 10MB

RSA生成签名串

<?php
use johnxu\tool\Rsa;
$data = '这是要签名的数据,字符串类型';
$private_key = ''; // 有两种方式,第一种是文件,写入文件路径即可;第二种是字符串,填写密钥字符串
$sign = Rsa::signature($data, $private_key); // 返回的签名后的base64字符串

RSA校验签名

<?php
use johnxu\tool\Rsa;
$sign = ''; // 签名串
$public_key = ''; // 同private_key
$data = '这是要签名的数据,字符串类型';
$result = Rsa::verify($data, $sign, $public_key); // 返回验签的结果

公私钥加密

<?php
use johnxu\tool\Rsa;
// 第三个参数有为,表示用公钥加密,私钥解密;反之
Rsa::encrypt('1234', 'private or public key', true);

公私钥解密

<?php
use johnxu\tool\Rsa;
// 第三个参数有为,表示用私钥解密;反之
Rsa::decrypt('加密数据', 'private or public key', true);

Config配置是用

<?php
$config = array(
    'wx' => array(
        'appid' => 1234,
        'key' => 5678
    ),
    'site_url' => 'http://www.johnxu.net'
);
// 批量设置
johnxu\tool\Config::batch($config);

// 单独设置
johnxu\tool\Config::set('wx', $config['wx']);

// 取值
johnxu\tool\Config::get('wx');
johnxu\tool\Config::get('wx.appid');

http请求的使用

<?php 
use johnxu\tool\Http;

// get请求
$response = Http::getInstance()->request('http://www.baidu.com');

if ($response->getCode() == 200) {
    var_dump($response->get('data'));// 原始数据
    var_dump($response->getContent(false)); // 同上
    var_dump($response->getContent()); // json解析后的数据(数组)
}

RESTFul风格的接口(只支持tp5)

<?php
namespace app\api\controller;
use johnxu\tool\Restful;
class Users extends Restful
{
    // 模拟用户组
    private $users
        = array(
            array(
                'uid'           => 1,
                'authorization' => false,
                'nickname'      => 'tom',
                'age'           => 25,
                'sex'           => 'male',
                'email'         => 'tom@163.com'
            ),
            array(
                'uid'           => 2,
                'authorization' => false,
                'nickname'      => 'Alice',
                'age'           => 25,
                'sex'           => 'female',
                'email'         => 'Alice@163.com'
            ),
            array(
                'uid'           => 3,
                'authorization' => true,
                'nickname'      => 'peter',
                'age'           => 30,
                'sex'           => 'male',
                'email'         => 'peter@163.com'
            ),
        );

    // 获取所有的用户
    public function index()
    {
        $this->ok( Restful::HTTP_RESPONSE_OK, $this->users );
    }

    // 获取指定用户的信息
    public function get( $uid )
    {
        foreach ( $this->users as $user )
        {
            if ( $user['uid'] == $uid )
            {
                if ( $user['authorization'] == false )
                {
                    // {"uid":2,"authorization":false,"nickname":"Alice","age":25,"sex":"female","email":"Alice@163.com"}
                    $this->ok( Restful::HTTP_RESPONSE_OK, $user );
                }
                else
                {
                    // {"err_code":2001,"message":"UnAuthorization"}
                    $this->fail( Restful::HTTP_RESPONSE_UN_AUTHORIZATION, 2001, 'UnAuthorization' );
                }
            }
        }

        // {"err_code":1001,"message":"Not Found"}
        $this->fail( Restful::HTTP_RESPONSE_NOT_FOUND, 1001, 'Not Found' );
    }
}

```php <?php // 定义路由 route.php Route::group( 'v1', function () { Route::group( 'users', function () { Route::get( '/', 'api/users/index' );, (*1)

    Route::get( '/:uid', 'api/users/get' );
} );

} );, (*2)

// 访问: // 获取所有用户:GET http://localhost/v1/useres // 获取指定用户:GET http://localhost/v1/users/1, (*3)


## RSA签名和验签 ```php <?php use johnxu\tool\Rsa; use johnxu\tool\exception\InvalidSignatureException; use johnxu\tool\exception\InvalidParamException; use johnxu\tool\exception\InvalidVerifyException; $publicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC/ykZnOUb0ro7WaraW+aPyNCgZgJyvr2CIQhTLRvOeOW4Ba8FaudwWACL0QFfIjW+V3rqMG0SPHGIitHUXIH0tzQZoKp8FfZVQOZxNyBaIjwzgSvuZuBGYZ/rrH53158t7gt58IIHGxcfJehhex/0bk8rUAO2U5kKGKwvEbDMOXwIDAQAB'; $privateKey = 'MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAL/KRmc5RvSujtZqtpb5o/I0KBmAnK+vYIhCFMtG8545bgFrwVq53BYAIvRAV8iNb5XeuowbRI8cYiK0dRcgfS3NBmgqnwV9lVA5nE3IFoiPDOBK+5m4EZhn+usfnfXny3uC3nwggcbFx8l6GF7H/RuTytQA7ZTmQoYrC8RsMw5fAgMBAAECgYA1T5ucS86OawsnTMhuVPweciMHW7myGBTEK2IuUw2a2KncWUCI4IrtzqHotQ3xoGb5CM1f7qBzC1e3/+NgR1aj7laAXtg/S1mfJISMIoXkUi/9q+4GwbbaU/vkYyhqnoAa5tL7/X4wuRlWtc7tC9TyqS+EXOa990SZOpuHjqpCiQJBAOLV1+ISWa30MMFWeTD5L6SP6BAE2mrgt6ZaRL2hGUp9QxWX2o89/cne4FEa0RrI1gLfOYHEoHhw5lqSMHHpGJMCQQDYcvBp7idMecg9+NcI1F+P1EDtNsMgpiXmAdV8sNpv/TbhzarLHh7bTnHrg7e2QRhUBuoZmU8Rx3FsUu41Qc6FAkBQyZKKvLhd4QNgSFj/XTBfrrUax2+28vPVdn7W/sJQKk6zKRM5Qv3ZYNyJZkClBnRaL4B+vDXez27rQPeqCjerAkAv9+kH0NusuyCBe3BMaKR0/5kT+RrtVWT4wFdLtvXx87ACAs5jDV3RRGVCyIIiRfLaTF39Jli7m/OrCgX4j4jxAkEAspLOMeD7ZH97cR+Mi3iHnweCQ86tZ6UNCc2+pC7murjpZs+fBP/zDeLTjYmX22QZb1KvPTeAnKkQ2OuyUdTN/w=='; // 私钥签名 try { $signature = Rsa::signature('123', $privateKey, 'RSA2'); var_dump($signature); } catch (InvalidSignatureException $e) { var_dump($e->getMessage()); } catch (InvalidParamException $e) { var_dump($e->getMessage()); } // 公钥验签 try { $flag = Rsa::verify($signature, $publicKey, 'RSA2'); var_dump($flag); } catch (InvalidParamException $e) { var_dump($e->getMessage()); } catch (InvalidVerifyException $e) { var_dump($e->getMessage()); }

RSA加密与解密

<?php
use johnxu\tool\Rsa;
use johnxu\tool\exception\InvalidParamException;

$publicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC/ykZnOUb0ro7WaraW+aPyNCgZgJyvr2CIQhTLRvOeOW4Ba8FaudwWACL0QFfIjW+V3rqMG0SPHGIitHUXIH0tzQZoKp8FfZVQOZxNyBaIjwzgSvuZuBGYZ/rrH53158t7gt58IIHGxcfJehhex/0bk8rUAO2U5kKGKwvEbDMOXwIDAQAB';
$privateKey = 'MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAL/KRmc5RvSujtZqtpb5o/I0KBmAnK+vYIhCFMtG8545bgFrwVq53BYAIvRAV8iNb5XeuowbRI8cYiK0dRcgfS3NBmgqnwV9lVA5nE3IFoiPDOBK+5m4EZhn+usfnfXny3uC3nwggcbFx8l6GF7H/RuTytQA7ZTmQoYrC8RsMw5fAgMBAAECgYA1T5ucS86OawsnTMhuVPweciMHW7myGBTEK2IuUw2a2KncWUCI4IrtzqHotQ3xoGb5CM1f7qBzC1e3/+NgR1aj7laAXtg/S1mfJISMIoXkUi/9q+4GwbbaU/vkYyhqnoAa5tL7/X4wuRlWtc7tC9TyqS+EXOa990SZOpuHjqpCiQJBAOLV1+ISWa30MMFWeTD5L6SP6BAE2mrgt6ZaRL2hGUp9QxWX2o89/cne4FEa0RrI1gLfOYHEoHhw5lqSMHHpGJMCQQDYcvBp7idMecg9+NcI1F+P1EDtNsMgpiXmAdV8sNpv/TbhzarLHh7bTnHrg7e2QRhUBuoZmU8Rx3FsUu41Qc6FAkBQyZKKvLhd4QNgSFj/XTBfrrUax2+28vPVdn7W/sJQKk6zKRM5Qv3ZYNyJZkClBnRaL4B+vDXez27rQPeqCjerAkAv9+kH0NusuyCBe3BMaKR0/5kT+RrtVWT4wFdLtvXx87ACAs5jDV3RRGVCyIIiRfLaTF39Jli7m/OrCgX4j4jxAkEAspLOMeD7ZH97cR+Mi3iHnweCQ86tZ6UNCc2+pC7murjpZs+fBP/zDeLTjYmX22QZb1KvPTeAnKkQ2OuyUdTN/w==';

// 公钥加密 === 私钥解密
// 公钥加密
try {
    $crypted = Rsa::encrypt('123', $publicKey);
    var_dump($crypted);
} catch(InvalidParamException $e) {
    var_dump($e->getMessage());
}

// 私钥解密
try {
    $decrypted = Rsa::decrypt($crypted, $privateKey);
    var_dump($decrypted);
} catch(InvalidParamException $e) {
    var_dump($e->getMessage());
}

// 私钥加密 === 公钥解密
// 私钥加密
try {
    $crypted = Rsa::encrypt('123', $privateKey, false);
    var_dump($crypted);
} catch (InvalidParamException $e) {
    var_dump($e->getMessage());
}

// 公钥解密
try {
    $decrypted = Rsa::decrypt($crypted, $publicKey, false);
    var_dump($decrypted);
} catch (InvalidParamException $e) {
    var_dump($e->getMessage());
}

用户授权管理

<?php
use johnxu\tool\Api;

class Users extends Api
{   
    /**
     * @login true 
     */
    public function needLogin()
    {
        return '需要验证登录的';
    }
    /**
     * @login false
     */
    public function noNeedLogin()
    {
        return '不需要登录的';
    }
}
// curl -i -u fsyzxz@163.com localhost:8000/api/users/authorization // 登录
// POST http://localhost:8000/api/users/register {username: "xfjpeter@163.com", password: 123456} // 注册
// POST|GET http://localhost:8000/api/users/logout // 退出登录

Hash加密和验证

<?php
// Hash加密
$hashStr = \johnxu\tool\Hash::make('123');
var_dump($hashStr);

// 验证hash加密是否正确
$result = \johnxu\tool\Hash::check('123', $hashStr);
var_dump($result);

时间操作

<?php
use johnxu\tool\Time;
// 获取今天的时间戳(开始,结束)
$today = Time::today();
print_r( $today );
/**
 * Array
 * (
 * [0] => 1551139200
 * [1] => 1551225599
 * )
 */

// 获取昨天的时间戳(开始,结束)
$yesterday = Time::yesterday();

// 获取本周开始和结束的时间戳
$week = Time::week();

// 上周开始和结束的时间戳
$lastWeek = Time::lastWeek();

// 本月开始和结束的时间戳
Time::month();

// 上月开始和结束的时间戳
Time::lastMonth();

// 今年开始和结束的时间戳
Time::year();

// 去年开始和结束的时间戳
Time::lastYear();

// 获取7天前零点到现在的时间戳
Time::dayToNow(7);

// 获取7天前零点到昨日结束的时间戳
Time::dayToNow(7, true);

// 获取7天前的时间戳
Time::daysAgo(7);

//  获取7天后的时间戳
Time::daysAfter(7);

// 天数转换成秒数
Time::daysToSecond(5);

// 周数转换成秒数
Time::weekToSecond(5);

~~JWT验证(已废弃)~~

<?php
use johnxu\tool\Jwt;

$jwt     = Jwt::getInstance([
    'key' => '123456',
]);
$payload = [
    'iss' => 'johnxu', // 该jwt的签发者
    'iat' => time(), // 签发时间
    'exp' => time() + 7200, // 过期时间
    'nbf' => time() + 60, // 该时间之前不接收处理该Token
    'sub' => 'www.johnxu.net', // 面向的用户
    'jti' => md5(uniqid('jwt').time()) // 该token的唯一值
];

// 获取token
$token = $jwt->getToken($payload);
// echo $token;
// eyJhbGciOiJIUzI1NiIsInR5cCI6Imp3dCJ9.eyJpc3MiOiJqb2hueHUiLCJpYXQiOjE1NTUzOTA5MzEsImV4cCI6MTU1NTM5ODEzMSwibmJmIjoxNTU1MzkwOTkxLCJzdWIiOiJ3d3cuam9obnh1Lm5ldCIsImp0aSI6ImE0NGQ1M2QzNmUzZjA0ODQ4NWUyNmM4NWRkMjhhODNmIn0.qPJkuuC41UI4usTdelZaGYF3ahGT3WmByjEhg50FrjY

// 校验
$result = $jwt->verify('eyJhbGciOiJIUzI1NiIsInR5cCI6Imp3dCJ9.eyJpc3MiOiJqb2hueHUiLCJpYXQiOjE1NTUzOTA5MzEsImV4cCI6MTU1NTM5ODEzMSwibmJmIjoxNTU1MzkwOTkxLCJzdWIiOiJ3d3cuam9obnh1Lm5ldCIsImp0aSI6ImE0NGQ1M2QzNmUzZjA0ODQ4NWUyNmM4NWRkMjhhODNmIn0.qPJkuuC41UI4usTdelZaGYF3ahGT3WmByjEhg50FrjY');
var_dump($result);

JWT(Json Web Tokens)

<?php
use johnxu\tool\Jwt;
use johnxu\tool\Str;
use johnxu\tool\exception\InvalidParamException;
use johnxu\tool\exception\InvalidVerifyException;
use johnxu\tool\exception\InvalidSignatureException;

// 生成token签名
$jwt = new Jwt();
$jwt->setHeader([
    'typ' => 'jwt',
    'alg' => 'HS256',
]);
$jwt->setExp(time() + 60);
$jwt->setNbf(time() + 30);
$jwt->setJti(Str::getInstance()->generateTradeNo());
$jwt->setSub('权限验证');
$jwt->setIat(time());
$jwt->setIss('johnxu');
$jwt->setPayload([
    'token' => Str::getInstance()->getMachineCode(3, 8, ''),
]);
try {
    var_dump($jwt->getToken());
} catch (InvalidParamException $e) {
    var_dump($e->getMessage()); // 接管参数异常
}

// 验证token签名
$token = 'eyJ0eXAiOiJqd3QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NjM0MTg0NDIsImF1ZCI6bnVsbCwiZXhwIjoxNTYzNDE5NDQyLCJzdWIiOiLmnYPpmZDpqozor4EiLCJpc3MiOiJqb2hueHUiLCJuYmYiOjE1NjM0MTg1MDIsImp0aSI6IjIwMTkwNzE4MTA1NDAyNTI5NzU2NDg1NyIsInBheWxvYWQiOnsidG9rZW4iOiI3MTRGMkE5NzcwMkUxMTE1NTU1MzAwNkUifX0.LwINfASxIBSFuKd4U5MtjbUQhVDPTRcKsaGC9Ud7jVM';

$jwt = new Jwt();
try {
    var_dump($jwt->verify($token));
    /**
      array(8) {
        ["iat"] => int(1563419701)
        ["aud"] => NULL
        ["exp"] => int(1563419761)
        ["sub"] => string(12) "权限验证"
        ["iss"] => string(6) "johnxu"
        ["nbf"] => int(1563419731)
        ["jti"] => string(24) "201907181115015153519854"
        ["payload"] => array(1) {
          ["token"] => string(24) "8C873A9101AFD2F4B00A8D60"
        }
      }
     */
} catch (InvalidSignatureException $e) {
    var_dump($e->getMessage()); // 签名错误
} catch (InvalidVerifyException $e) {
    var_dump($e->getMessage()); // 过期或者还没到生效期
}

AES 加密与解密

CBC方式加密解密

<?php
use johnxu\tool\Aes;

$aes = Aes::getInstance();
try {
    echo $aes->encrypt('{"name":"johnxu","age":25,"email":"fsyzxz@163.com"}', $key, Aes::METHOD_AES_128_CBC, $iv);
    echo PHP_EOL;
    echo $aes->decrypt('bBBl028ESU3hjpxwIPzTf3ep+WT3k8FALPic8Hz9o99OMZVgAoJmBTjHxrQJIc1VffLjtBRxCldUvQLSAptQRA==', $key,
            Aes::METHOD_AES_128_CBC, $iv).PHP_EOL.PHP_EOL;
} catch (Exception $e) {
    var_dump($e->getMessage());
}

ECB方式加密解密

<?php
use johnxu\tool\Aes;

$aes = Aes::getInstance();
try {
    echo $aes->encrypt('{"name":"johnxu","age":25,"email":"fsyzxz@163.com"}', $key).PHP_EOL;
    echo $aes->decrypt('U8TELNRLE6l+JIM+nKO/4rg7ZaaJWOyLocU3MZPsDOnnkpbG/msHn63FOjvHCwjH8cmlCOi8wYmVKiLyq+Cdew==', $key).PHP_EOL;
} catch(Exception $e) {
    var_dump($e->getMessage());
}

压缩或解压文件

<?php

use johnxu\tool\Zip;

$zip = Zip::getInstance();

// 压缩
$filename = $zip->zzip('./');
if (!$filename) {
    var_dump($zip->getError());
} else {
    var_dump($filename);
}

// 解压
$list = $zip->unzip('./test.zip', './test/');
if (!$list) {
    var_dump($zip->getError());
} else {
    var_dump($list);
}

The Versions

03/07 2018

dev-master

9999999-dev https://www.johnxu.net

payment package

  Sources   Download

The Requires

  • php >=7.0.0

 

by Avatar johnxu

tool 工具类 许发君 johnxu

03/07 2018

v1.0.5

1.0.5.0 https://www.johnxu.net

payment package

  Sources   Download

The Requires

  • php >=7.0.0

 

by Avatar johnxu

tool 工具类 许发君 johnxu

30/05 2018

v1.0.4

1.0.4.0 https://www.johnxu.net

payment package

  Sources   Download

The Requires

  • php >=7.0.0

 

by Avatar johnxu

tool 工具类 许发君 johnxu

28/05 2018

v1.0.3

1.0.3.0 https://www.johnxu.net

payment package

  Sources   Download

The Requires

  • php >=7.0.0

 

by Avatar johnxu

tool 工具类 许发君 johnxu

02/04 2018

v1.0.2

1.0.2.0 https://www.johnxu.net

payment package

  Sources   Download

The Requires

  • php >=7.0.0

 

by Avatar johnxu

tool 工具类 许发君 johnxu

21/03 2018

v1.0.1

1.0.1.0 https://www.johnxu.net

payment package

  Sources   Download

The Requires

  • php >=7.1.0

 

by Avatar johnxu

tool 工具类 许发君 johnxu

07/03 2018

v1.0.0

1.0.0.0 https://www.johnxu.net

payment package

  Sources   Download

The Requires

  • php >=7.1.0

 

by Avatar johnxu

tool 工具类 许发君 johnxu