使用前看一下下面辅助函数:尤其注意
函数名称问题
- 代码风格极简 欢迎提交代码
- 几行代码就能接入微信支付/支付宝
- 一行代码生成一个虚拟文件并上传
Github Youloge.Tool Star我 有帮助的话,记得给个star
能提交点代码最好
- 0.0.9 迁移多个辅助函数
- 1.0.1 增加 构造腾讯云请求体
composer require youloge/webman.tool
- 如果要使用
onRequest
请求封装 请安装composer require workerman/http-client
- 如果要使用
onQueue
队列封装 请安装composer require workerman/redis-queue
- 到目录
config/youloge.php
新建配置文件 - 工具箱已经内置``配置文件读取功能 .ini
<?php
$config = [
'weixin'=>[
'v3key'=>ini('WEIXIN.V3KEY',''),// 商户APIV3密钥,
'anthor'=>'https://%s%S'
],
// 支付宝 二类配置`public`和`gatway.xxx.xxx.xx`
'alipay'=>[
// 公共参数
'public'=>[
'app_id'=>'','method'=>'','version'=>'1.0',
'format'=>'JSON','charset'=>'utf-8',
'sign_type'=>'RSA2','timestamp'=>date('Y-m-d H:i:s')
]
// 方法参数
'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'=>''],
],
// 数组每次代理 随机选择一个
'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
多行配置参数
多行配置参数
EOT;
// 最后返回配置
return $config;
简单粗暴 不需要安装各种
腾讯云各种SDK
配好密钥 直接开干
// 第二个参数为一个组合 `接入点/方法/版本/区域(可选参数)`
$options = tencent_request('POST','sms.tencentcloudapi.com/DescribePhoneNumberInfo/2021-01-11/ap-nanjing',[
'PhoneNumberSet'=>['+8617605509012']
],'1253985496');
$request = onRequest(...$options); // 异步请求
$request = httpProxy(...$options); // 代理请求
就是这么简单 发起JSAPI H5 支付都是同理,比如JSAPI支付
统一下单之后
在调用一下签名组装一下payment
参数即可支付
$options = weixin_request('GET','/v3/certificates',[],'商户ID');
@['data'=>$data] = $request = onRequest(...$options);
// 返回一个V3加密后的数组
$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片段文件
并指定保存文件名到config/100.json
, 二进制数据没测试*
$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']);
网站支持
github登录
服务器在国内,运营商会屏蔽你的访问,这时候可以使用代理请求,数据结构与onRequest
一样
@['appid'=>$appid,'code'=>$code] = $request->all();
@['secret'=>$secret] = config("youloge.$appid"); // 配置参数格式统一起来
// 换取`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授权失败']; }
// 获取用户信息
@['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账户未认证']; }
// 用登录信息 查询数据库 ...
代码工具箱
- 使用Base32字符集
- @param int $len 长度
rand_base32($len=4)
- 推荐使用 模型
- laravel数据库
- @param string $table 表名
onMysql($table)
- 返回句柄
onRedis()
- runRedis('HGET',["wallet",$uuid])
- runRedis('HINCRBY',["wallet",$uuid,10])
runRedis($method,$params)
- @param string $queue 队列名称
- @param array $data 数据
- @param int $delay 可选:延迟时间
onQueue($queue,$data,$delay=0)
- @param string $url 请求网址
- @param array $options 请求配置
- 示例:'https://example.com/', ['method' => 'POST','version' => '1.1','headers' => ['Connection' => 'keep-alive'],'data' => ['key1' => 'value1', 'key2' => 'value2'],]
- 请求返回 返回 [JOSN] 非对象返回 [raw=响应内容]
- 错误返回 ['err'=>500,'msg'=>'错误信息']
onRequest($url,$options=[])
网络代理 微信支付/支付宝 都需config/youloge.php
配置文件
- 请求参数与 httpProxy == onRequest == http-client(request) 一样
- @param string $url 请求网址
- @param array $options 请求配置
httpProxy($url,$options=[])
- @param string $url 上传地址
- @param array $files 文件类型数据 ['表单名称'=>['name'=>'文件名称','mime'=>'文件类型','data'=>'数据内容']]
- @param array $body 其他表单数据
- @param array $header 其他表单请求头
- @return array 上传结果
virtualFile($url,$files,$body=[],$header=[])
- =============================
- = 算法相关
- =============================
safe_base64_encode($data);
safe_base64_decode($data);
- 签名方法:TC3-HMAC-SHA256
- @param string $method 请求方式 GET/POST
- @param string $endpoint_action_version_region 接入点/方法/版本/区域
- @param array $payload 请求载体 无参数时 设为[],null,false,0 即可
- @param string $appid 选择那个appid下得的证书
tencent_request($method,$endpoint_action_version_region,$payload,$appid)
$method = POST
// 接入点/方法/版本/区域(可选参数)
trtc.tencentcloudapi.com/DescribeInstances/2019-07-22/ap-guangzhou
- @param string $string 待签名字符串
qiniu_hmac($string)
- @param array $params 待签名数组对象
qiniu_sign($params)
- @param array $params 待签名数组对象
qiniu_auth($params)
- @param array $url 待签名下载网址
- @param number $second 可选:设置有效时间 默认3600秒
- @param string $attname 可选:设置下载文件名 默认没有
qiniu_download($url,$second=3600,$attname='')
- =============================
- = 支付算法类 详细配置文件
- = 证书路径 youloge.{$appid}.{apiclient_key}
- = 证书格式 1. ./file.pem 文件路径 PEM编码的证书/私钥|公钥 2. PEM格式的私钥|公钥
- =============================
- @param string $string 待签名字符串
- @param string $appid 选择那个id下得的证书
- 返回数组 成功 [err=>200,data=>base64] 失败 [err=>500,msg=>'签名错误']
private_sign($string,$appid)
- 示例:weixin_request('GET','/v3/certificates',{},11111111);
- 配置文件格式要规范
- @param string $method 请求网络方式 GET/POST
- @param string $router 请求网络路径 必须'/'开头
- @param array $data JSON数据 不传设置为 '' false 0 即可
- @param string $appid 选择那个商户id下得的证书
weixin_request($method,$router,$data='',$appid='')
- @param object $request Request
给返回对象传进来
- 成功返回 对象返回JSON 否则返回 []
- 失败返回 ['err'=>500,'msg'=>Exception]
weixin_verify($request)
- @param array $encrypt 解密数据 要有['ciphertext','nonce','associated_data']
- @param string $appid 选择那个商户id下得的证书
- 成功返回 对象返回JSON 否则返回 ['raw'=>$raw]
- 失败返回 ['err'=>500,'msg'=>Exception]
weixin_decrypt($encrypt,$appid)
- 示例:alipay_request('alipay.trade.create',$data,11111111);
- @param string $method 接口名称 alipay.trade.create ...
- @param array $data 待合并参数
- @param string $appid 选择那个商户id下得的证书
alipay_request($method,$data,$appid)
- @param object $request Request
给返回对象传进来
- 成功返回 对象返回JSON 否则返回 []
- 失败返回 ['err'=>500,'msg'=>Exception]
alipay_verify($request)
ini(null)
返回全部配置ini('MYSQL','默认值')
返回一级配置[数组]ini('MYSQL.HOST')
返回三级配置[字符串]
ini($keys, $def='')