??Webman.tool 輔助函數(shù)百寶箱

v1.3.1
版本
2025-04-23
版本更新時間
11
安裝
6
star
Youloge.tool Webman 輔助函數(shù)工具箱
使用前看一下下面輔助函數(shù):尤其注意
函數(shù)名稱問題
- 代碼風(fēng)格極簡 歡迎提交代碼
- 幾行代碼就能接入微信支付/支付寶
- 一行代碼生成一個虛擬文件并上傳
項(xiàng)目地址
Github Youloge.Tool Star我 有幫助的話,記得給個star
能提交點(diǎn)代碼最好
- 1.2.8 [2025-03-20] 增加
useValidate
基本數(shù)據(jù)類型int:100
,float:1.02
,bool:false
,string:默認(rèn)值
提供默認(rèn)值支持 - 1.2.7 [2025-03-16] 優(yōu)化表單過濾器
useValidate
并拆分獨(dú)立版本Webman.validate - 1.2.4 [
2025-03-15
] 新增輸入過濾器useValidate
優(yōu)雅處理表單輸入 - 1.2.2 [2025-03-13] 新增谷歌令牌輔助函數(shù)
secret_base32
=>useTOTP
- 1.0.1 增加 構(gòu)造騰訊云請求體
- 0.0.9 遷移多個輔助函數(shù)
安裝使用
composer require youloge/webman.tool
- 如果要使用
onRequest
請求封裝 請安裝composer require workerman/http-client
- 如果要使用
onQueue
隊(duì)列封裝 請安裝composer require workerman/redis-queue
使用說明
- 到目錄
config/youloge.php
新建配置文件 - 工具箱已經(jīng)內(nèi)置``配置文件讀取功能 .ini
<?php $config = [ 'weixin'=>[ 'v3key'=>ini('WEIXIN.V3KEY',''),// 商戶APIV3密鑰, 'anthor'=>'https://%s%S' ], // 支付寶 二類配置`public`和`gatway.xxx.xxx.xx` 'alipay'=>[ // 公共參數(shù) 'public'=>[ 'app_id'=>'','method'=>'','version'=>'1.0', 'format'=>'JSON','charset'=>'utf-8', 'sign_type'=>'RSA2','timestamp'=>date('Y-m-d H:i:s') ] // 方法參數(shù) 'alipay.system.oauth.token'=>['grant_type'=>'','code'=>""], 'alipay.trade.create'=>['biz_content'=>'','notify_url'=>'',], 'alipay.trade.precreate'=>['biz_content'=>'','notify_url'=>'',], 'alipay.trade.page.pay'=>['notify_url'=>'','biz_content'=>''], 'alipay.trade.wap.pay'=>['notify_url'=>'','biz_content'=>''], ], // 數(shù)組每次代理 隨機(jī)選擇一個 'proxy'=>[ ['addr'=>'','prot'=>'','pass'=>''] ], // 商戶配置 '150123456'=>[ 'apiclient_key'=>'file:///www/pem/150123456.apiclient_key.pem' ], // 小程序配置 '12345678'=>[ 'secert'=>ini('XCX.SECERT','12345678'), 'xxx'=>ini('XCX.xxx','12345678'), ] ]; // 帶格式的配置 - 例如 $config['150123456']['cert'] = <<<EOT 多行配置參數(shù) 多行配置參數(shù) EOT; // 最后返回配置 return $config;
示例代碼 - 輔助輔助 函數(shù)還是要配合代碼食用才香~
示例:表單輸入驗(yàn)證器
查看使用詳情文檔 webman.validat
- 驗(yàn)證規(guī)則
-
|
分割多個規(guī)則
-
:
規(guī)則參數(shù),
多個參數(shù)用逗號分隔
-
#
自定義錯誤提示
$rules = [
'name'=>'required|min:3|max:10',
'age'=>'required|int|min:18|max:100',
'email'=>'required|email',
]
$array = useValidate($data,$rules,$filter=true);
示例:標(biāo)準(zhǔn)動態(tài)令牌
標(biāo)準(zhǔn)TOTP令牌 RFC6238
$secret = secret_base32(16); // 生成一個16位Base32隨機(jī)字符串
$array = useTOTP('GQBWBS7AAEBECCUJ',1741877199);
// 返回時間戳 前中后 三組驗(yàn)證碼
[893277,448721,854850]
示例:騰訊云短信SMS號碼查詢
簡單粗暴 不需要安裝各種
騰訊云各種SDK
配好密鑰 直接開干
// 第二個參數(shù)為一個組合 `接入點(diǎn)/方法/版本/區(qū)域(可選參數(shù))`
$options = tencent_request('POST','sms.tencentcloudapi.com/DescribePhoneNumberInfo/2021-01-11/ap-nanjing',[
'PhoneNumberSet'=>['+8617605509012']
],'1253985496');
$request = onRequest(...$options); // 異步請求
$request = httpProxy(...$options); // 代理請求
示例:請求微信證書
就是這么簡單 發(fā)起JSAPI H5 支付都是同理,比如JSAPI支付
統(tǒng)一下單之后
在調(diào)用一下簽名組裝一下payment
參數(shù)即可支付
$options = weixin_request('GET','/v3/certificates',[],'商戶ID');
@['data'=>$data] = $request = onRequest(...$options);
// 返回一個V3加密后的數(shù)組
$list = [];
foreach($data as ['serial_no'=>$serial_no,'encrypt_certificate'=>$encrypt_certificate]){
// 使用微信V3解密 weixin_decrypt
$certificate = weixin_decrypt($encrypt_certificate,'商戶ID');
// 按照證書序列號`PEM格式`保存到本地
file_put_contents("$serial_no.pem",$certificate);
$list[$serial_no] = $certificate;
}
//
return $list;
示例:上傳JSON文件到七牛
上傳
一個JSON片段文件
并指定保存文件名到config/100.json
, 二進(jìn)制數(shù)據(jù)沒測試*
$url = qiniu_sign([
'scope'=>"buket:100.json",
'deadline'=>time()+300,
'forceSaveKey'=>true,
'saveKey'=>"config/100.json",
'returnBody'=>'{"err": 200,"hash": $(etag)}',
'insertOnly'=>0,
]);
$data = json_encode([
'uuid'=>100,
'target'=>'https://www.abc.com',
'type'=>'1'
]);
$file = ['name'=>"100.json",'mime'=>'application/json','data'=>$data];
@['err'=>$err,'hash'=>$hash] = $virtual = virtualFile("https://upload.qiniup.com/?token=$url",['file'=>$file],['key'=>'100']);
示例:代理請求網(wǎng)網(wǎng)址
網(wǎng)站支持
github登錄
服務(wù)器在國內(nèi),運(yùn)營商會屏蔽你的訪問,這時候可以使用代理請求,數(shù)據(jù)結(jié)構(gòu)與onRequest
一樣
@['appid'=>$appid,'code'=>$code] = $request->all();
@['secret'=>$secret] = config("youloge.$appid"); // 配置參數(shù)格式統(tǒng)一起來
// 換取`access_token`
@['access_token'=>$access_token] = $data = `httpProxy`(
"https://github.com/login/oauth/access_token?client_id=$appid&client_secret=$secret&code=$code",[
'headers'=>[
'Accept'=>'application/json'
]
]);
if($access_token == null){ return ['err'=>100800,'msg'=>'Github授權(quán)失敗']; }
// 獲取用戶信息
@['email'=>$mail] = $data = httpProxy('https://api.github.com/user',[
'headers'=>['Authorization'=>"Bearer $access_token",'Accept'=>'application/json','User-Agent'=>'Youloge-API']
]);
if($mail == null){ return ['err'=>100801,'msg'=>'Github賬戶未認(rèn)證']; }
// 用登錄信息 查詢數(shù)據(jù)庫 ...
代碼工具箱
安全的base64編碼
safe_base64_encode($data);
safe_base64_decode($data);
生成不重復(fù)字符 - 用于驗(yàn)證碼
- 使用Base32字符集 ABCDEFGHIJKLMNOPQRSTUVWXYZ234567
- @param int $len=4 長度
rand_base32($len=4)
生成重復(fù)的字符 - 用于密鑰密碼
- 使用Base32字符集
- @param int $len=16 長度
- @param string $prefix='' 前綴
secret_base32($len=16,$prefix='')
Mysql實(shí)例
- 推薦使用 模型
- laravel數(shù)據(jù)庫
- @param string $table 表名
onMysql($table)
Redis實(shí)例 - 配置文件讀取默認(rèn)
- 返回句柄
onRedis()
Redis數(shù)組執(zhí)行(自動close)
- runRedis('HGET',["wallet",$uuid])
- runRedis('HINCRBY',["wallet",$uuid,10])
runRedis($method,$params)
[webman-queue] 隊(duì)列封裝
- @param string $queue 隊(duì)列名稱
- @param array $data 數(shù)據(jù)
- @param int $delay 可選:延遲時間
onQueue($queue,$data,$delay=0)
[http-client] 異步網(wǎng)絡(luò)請求封裝
- @param string $url 請求網(wǎng)址
- @param array $options 請求配置
- 示例:'https://example.com/', ['method' => 'POST','version' => '1.1','headers' => ['Connection' => 'keep-alive'],'data' => ['key1' => 'value1', 'key2' => 'value2'],]
- 請求返回 返回 [JOSN] 非對象返回 [raw=響應(yīng)內(nèi)容]
- 錯誤返回 ['err'=>500,'msg'=>'錯誤信息']
onRequest($url,$options=[])
網(wǎng)絡(luò)代理 微信支付/支付寶 都需config/youloge.php
配置文件
HTTP代理網(wǎng)絡(luò)請求 - 配置文件隨機(jī)讀取 [youloge.proxy[0~n]]
- 請求參數(shù)與 httpProxy == onRequest == http-client(request) 一樣
- @param string $url 請求網(wǎng)址
- @param array $options 請求配置
httpProxy($url,$options=[])
生成虛擬文件對象并上傳 - 支持多文件
- @param string $url 上傳地址
- @param array $files 文件類型數(shù)據(jù) ['表單名稱'=>['name'=>'文件名稱','mime'=>'文件類型','data'=>'數(shù)據(jù)內(nèi)容']]
- @param array $body 其他表單數(shù)據(jù)
- @param array $header 其他表單請求頭
- @return array 上傳結(jié)果
virtualFile($url,$files,$body=[],$header=[])
- =============================
- = 算法相關(guān)
- =============================
構(gòu)造騰訊云請求體 - 配置路徑(一律小寫):[youloge.{appid}.secretid|secretkey]
- 簽名方法:TC3-HMAC-SHA256
- @param string $method 請求方式 GET/POST
- @param string $endpoint_action_version_region 接入點(diǎn)/方法/版本/區(qū)域
- @param array $payload 請求載體 無參數(shù)時 設(shè)為[],null,false,0 即可
- @param string $appid 選擇那個appid下得的證書
tencent_request($method,$endpoint_action_version_region,$payload,$appid)
$method = POST
// 接入點(diǎn)/方法/版本/區(qū)域(可選參數(shù))
trtc.tencentcloudapi.com/DescribeInstances/2019-07-22/ap-guangzhou
七牛簽名 - 配置文件讀取[youloge.qiniu.ak|sk]
七牛HMAC
- @param string $string 待簽名字符串
qiniu_hmac($string)
* 七牛SIGN -
- @param array $params 待簽名數(shù)組對象
qiniu_sign($params)
七牛AUTH -
- @param array $params 待簽名數(shù)組對象
qiniu_auth($params)
七牛DOWN -
- @param array $url 待簽名下載網(wǎng)址
- @param number $second 可選:設(shè)置有效時間 默認(rèn)3600秒
- @param string $attname 可選:設(shè)置下載文件名 默認(rèn)沒有
qiniu_download($url,$second=3600,$attname='')
- =============================
- = 支付算法類 詳細(xì)配置文件
- = 證書路徑 youloge.{$appid}.{apiclient_key}
- = 證書格式 1. ./file.pem 文件路徑 PEM編碼的證書/私鑰|公鑰 2. PEM格式的私鑰|公鑰
- =============================
私鑰簽名 - 配置路徑:[youloge.{appid}.apiclient_key]
- @param string $string 待簽名字符串
- @param string $appid 選擇那個id下得的證書
- 返回數(shù)組 成功 [err=>200,data=>base64] 失敗 [err=>500,msg=>'簽名錯誤']
private_sign($string,$appid)
構(gòu)造微信支付請求體 - 配置路徑:[youloge.{appid}.apiclient_key|serial_no...]
- 示例:weixin_request('GET','/v3/certificates',{},11111111);
- 配置文件格式要規(guī)范
- @param string $method 請求網(wǎng)絡(luò)方式 GET/POST
- @param string $router 請求網(wǎng)絡(luò)路徑 必須'/'開頭
- @param array $data JSON數(shù)據(jù) 不傳設(shè)置為 '' false 0 即可
- @param string $appid 選擇那個商戶id下得的證書
weixin_request($method,$router,$data='',$appid='')
微信回調(diào)驗(yàn)簽 - 配置路徑:[youloge.{serial}.platform_cert]
- @param object $request Request
給返回對象傳進(jìn)來
- 成功返回 對象返回JSON 否則返回 []
- 失敗返回 ['err'=>500,'msg'=>Exception]
weixin_verify($request)
微信解密V3 - 配置路徑:[youloge.{appid}.v3key]
- @param array $encrypt 解密數(shù)據(jù) 要有['ciphertext','nonce','associated_data']
- @param string $appid 選擇那個商戶id下得的證書
- 成功返回 對象返回JSON 否則返回 ['raw'=>$raw]
- 失敗返回 ['err'=>500,'msg'=>Exception]
weixin_decrypt($encrypt,$appid)
構(gòu)造支付寶支付請求體 - 配置路徑:[appid.{appid}.apiclient_key]
- 示例:alipay_request('alipay.trade.create',$data,11111111);
- @param string $method 接口名稱 alipay.trade.create ...
- @param array $data 待合并參數(shù)
- @param string $appid 選擇那個商戶id下得的證書
alipay_request($method,$data,$appid)
支付寶驗(yàn)簽 - 配置路徑:[youloge.alipay.public_key]
- @param object $request Request
給返回對象傳進(jìn)來
- 成功返回 對象返回JSON 否則返回 []
- 失敗返回 ['err'=>500,'msg'=>Exception]
alipay_verify($request)
讀取配置文件參數(shù)
ini(null)
返回全部配置ini('MYSQL','默認(rèn)值')
返回一級配置[數(shù)組]ini('MYSQL.HOST')
返回三級配置[字符串]
ini($keys, $def='')