首页
源码
关于
Search
1
luhn验证
9 阅读
2
git协同开发
7 阅读
3
微信公众号发送模版消息
7 阅读
4
银联商务支付对接
6 阅读
5
mysql大批量插入数据
5 阅读
PHP
Socket
Java
MYSQL
JS
Vue
ThinkPHP
Git
ts
Mac
登录
/
注册
Search
标签搜索
thinkphp
PHP
微信小程序
银联商务支付
支付
银联
luhn
luhn校验
mysql
mysql大批量插入数据
insert
load指令
tp
订阅消息
仓库
远程仓库
git仓库
git
git协同开发
微信
404
累计撰写
17
篇文章
累计收到
0
条评论
首页
栏目
PHP
Socket
Java
MYSQL
JS
Vue
ThinkPHP
Git
ts
Mac
页面
源码
关于
搜索到
5
篇与
的结果
2022-07-29
JWT验证
安装composer require lcobucci/jwt=3.3.3<?php namespace app\api\lib; use think\facade\Db; use Lcobucci\JWT\Parser; use Lcobucci\JWT\ValidationData; use Lcobucci\JWT\Builder; use Lcobucci\JWT\Signer\Key; use Lcobucci\JWT\Signer\Hmac\Sha256; class Jwt { private $token = ''; private $username = '';//当前用户标识 private static $instance = null; private function __construct() { $this->token = request()->param('token'); $this->username = request()->param('username'); if($this->token != "" && $this->token != null){ $this->token = (new Parser())->parse($this->token); $this->username = $this->token->getClaim('username'); } } //入口 public static function getInstance() { if(!self::$instance instanceof self){ self::$instance = new self(); } return self::$instance; } //生成Token private function createToken() { $configJwt = $this->getSystemJwt(); $time = time(); $signer = new Sha256(); $this->token = (new Builder()) ->issuedBy('http://live.com/')//发行者 ->identifiedBy('live',true)//id ->issuedAt($time)//发行时间 ->canOnlyBeUsedAfter($time + 0)//生效时间 ->expiresAt($time + $configJwt['content']['jwk_time'])//过期时间 ->withClaim('username', $this->username)//配置字段 ->getToken($signer, new Key($configJwt['content']['jwk_key']));//创建token } //验证token public function checkToken() { $configJwt = $this->getSystemJwt(); $time = time(); $data = new ValidationData(); $data->setIssuer('http://live.com/'); //发行者 $data->setId('live'); //id $data->setCurrentTime($time + 0); $signer = new Sha256(); if($this->token->verify($signer, $configJwt['content']['jwk_key'])===true && $this->token->validate($data)===true){ //判断用户状态 $user = Db::name('user')->where('user', $this->username)->find(); if($user){ return true; }else{ return false; } }else{ return false; } } public function setToken() { $this->createToken(); return $this; } public function getToken() { // 当前token为对象类型 return $this->token; } public function getSystemJwt() { $jwt = Db::name('system')->where('name','JWT')->find(); $jwt['content'] = json_decode($jwt['content'],true); return $jwt; } } 调用 生成token use app\api\lib\Jwt as JwtAuth; $token = JwtAuth::getInstance()->setToken()->getToken()->__toString(); 验证token $result = JwtAuth::getInstance()->checkToken(); dd($result);
2022年07月29日
2 阅读
0 评论
0 点赞
2022-07-28
Socket基本使用-极简
/** * * AF_INET: IPv4网络协议。TCP,UDP都可使用此协议。 * AF_INET6: IPv6网络协议。TCP,UDP都可使用此协议。 * AF_UNIX: 本地通信协议,具有高性能和低成本的IPC(进程间通讯) * * SOCK_STREAM TCP协议套接字 * SOCK_DGRAM UDP协议套接字 * * SOL_TCP: TCP协议 * SOL_UDP: UDP协议 * * 运行 php server.php 服务端 * 运行 php client.php 客户端 * 查看 netstat -an|grep 6001 **/{mtitle title="server.php"/}//创建一个socket资源 参数1:网络协议 2:套接字类型 3:协议 $socket1 = socket_create(AF_INET,SOCK_STREAM,SOL_TCP); //绑定到IP上 端口1-65535都可以使用 1-1024root用户才可使用 socket_bind($socket1, '127.0.0.1',6001); //负责监听 socket_listen($socket1,3); //scoket2 负责处理通讯(处理客户端接收和发送) $socket2 = socket_accept($socket1); //读取客户端发送的数据 读取大小字节1024可自由设置 $res = socket_read($socket2, 1024); echo $res.PHP_EOL; //向客户端反馈信息 socket_write($socket2,'hello client'.time()); //关闭socket socket_close($socket1); socket_close($socket2);{mtitle title="client.php"/}<?php $host = '127.0.0.1'; $port = 6001; $sock = null; //创建socket if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) === false ){ echo "socket_create() failed : reason:" . socket_strerror(socket_last_error()) . "\n"; return; } //连接socket if($con = socket_connect($sock, $host, $port) === false) { echo "connect fail" . "\n"; return; }else{ echo "connect success" . "\n"; } $client_msg = 'hello server!'; //向连接成功的socket发送信息 if(socket_write($sock, $client_msg, strlen($client_msg)) === false ){ echo "fail to write" . socket_strerror(socket_last_error()); }else{ echo "client write success" . PHP_EOL . "\n"; //读取服务端返回来的套接流信息 while ($serverback = socket_read($sock,1024)) { echo 'server return message is :' . PHP_EOL . $serverback . "\n"; } }
2022年07月28日
2 阅读
0 评论
0 点赞
2022-07-05
微信公众号发送模版消息
微信公众号用户的OpenId获取方式之一 通过微信接口 1.1)获取网页授权code(分为静默授权,非静默授权(需用户确认)) 1.2) 通过授权code获取用户信息(用户信息包含两种:1)只取OpenId,2)取用户相关头像、昵称。openId等) 通过公众号用户获取: 直接在登陆公众号-找到管理--> 用户信息-找到已关注用户列表-用F12打开 打开调试模式,选中某个用户-找到label下的value值,这就是用户的openId <?php class Index{ static function getToken(){ $appid ='appid'; $secret = 'secret'; $urla = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" .$appid . "&secret=" . $secret; $outputa = self::curlGet($urla); $result = json_decode($outputa, true); // var_dump($result); return $result['access_token']; } /** * 发送get请求 * @param string $url 链接 * @return bool|mixed */ private static function curlGet($url){ $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($curl); if(curl_errno($curl)){ return 'ERROR ' . curl_error($curl); } curl_close($curl); return $output; } /** * 发送post请求 * @param string $url 链接 * @param string $data 数据 * @return bool|mixed */ private static function curlPost($url, $data = null){ $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); if(!empty($data)){ curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($curl); curl_close($curl); return $output; } static function pushMessage($data = [],$topcolor = '#0000'){ $template = [ 'touser' => $data['openid'], 'template_id' => $data['template_id'], 'url' => $data['url'], 'topcolor' => $topcolor, 'data' => $data['data'] ]; $json_template = json_encode($template); $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" . self::getToken(); $result = self::curlPost($url, urldecode($json_template)); $resultData = json_decode($result, true); return $resultData; } public function sendMsg(){ $weiwei_token=self::getToken(); // echo $weiwei_token;die(); $data=[ 'openid' => 'o-用户openid', // 用户openid 'access_token' => $weiwei_token, 'template_id' => "填写你自己的消息模板ID", // 填写你自己的消息模板ID 'data' => [ // 模板消息内容,根据模板详情进行设置 'first' => ['value' => urlencode("尊敬的某某某先生,您好,您太帅了"),'color' => "#743A3A"], 'keyword1' => ['value' => urlencode("2019必胜猪"),'color'=>'blue'], 'keyword2' => ['value' => urlencode("2019必胜猪"),'color'=>'blue'], 'keyword3' => ['value' => urlencode("2019-09-06"),'color' => 'green'], 'keyword4' => ['value' => urlencode("请收下我的膝盖"),'color' => '#743A3A'] ], 'remark'=>'上海xxx' ]; echo "<pre>"; var_dump(self::pushMessage($data)); echo "</pre>"; echo "<hr>"; echo "<pre>"; var_dump($data); echo "</pre>"; } } $Index = new Index(); $Index->sendMsg(); var_dump($Index->sendMsg());
2022年07月05日
7 阅读
0 评论
0 点赞
2022-07-02
银联商务支付对接
测试期间不要设置白名单<? $appId = 'appId'; $appKey = 'appKey'; $mid = 'mid'; $tid = 'tid'; //业务内容az $time = time(); $content = [ 'requestTimestamp' => date('Y-m-d H:i:s', $time),//报文请求时间 'merOrderId' => '32AF' . date('YmdHis'),//商户订单号 'mid' => $mid,//商户号 'tid' => $tid,//终端号 'instMid' => 'H5DEFAULT',//业务类型 'totalAmount' => '1',//支付总金额 'expireTime' => date('Y-m-d H:i:s', strtotime('+1 day', $time)),//过期时间 'notifyUrl' => '',//支付通知地址 'returnUrl' => ''//网页跳转地址 ]; $timestamp = date('YmdHis', $time); //随机数 $str = md5(uniqid(mt_rand(), true)); $uuid = substr($str, 0, 8) . '-'; $uuid .= substr($str, 8, 4) . '-'; $uuid .= substr($str, 12, 4) . '-'; $uuid .= substr($str, 16, 4) . '-'; $uuid .= substr($str, 20, 12); $nonce = $uuid; //签名 $hash = bin2hex(hash('sha256', json_encode($content), true)); $hashStr = $appId . $timestamp . $nonce . $hash; $signature = base64_encode((hash_hmac('sha256', $hashStr, $appKey, true))); //$appKey银联商户H5支付产品的AppKey $data = [ 'timestamp' => $timestamp,//时间戳 'authorization' => 'OPEN-FORM-PARAM',//认证方式 'appId' => $appId,//APPID 'nonce' => $nonce,//随机数 'content' => urlencode(json_encode($content)),//业务内容 'signature' => urlencode($signature),//签名 ]; $options = ''; foreach ($data as $key => $value) { $options .= $key . '=' . $value .'&'; } $options = rtrim($options, '&'); //存在转义字符,那么去掉转义 if(get_magic_quotes_gpc()){ $options = stripslashes($options); } $url = 'https://api-mop.chinaums.com/v1/netpay/trade/h5-pay?' . $options; header("Location:$url");
2022年07月02日
6 阅读
0 评论
0 点赞
2022-07-02
微信订阅消息
小程序订阅消息推送1.获取用户openid2.用户授权消息推送(订阅几次可发送几次)3.后端组合数据调用微信api发送订阅消息 getTmplID: function () { wx.requestSubscribeMessage({ tmplIds: ['模版id'], success(res) { console.log(res) if(res['模版id'] === 'accept') { console.log('授权成功') wx.showToast({ title: '订阅OK!', duration: 1000, }) /*****服务器主动推送的话,不需要调用***************/ wx.request({ method: 'POST', url: '后端接口', //不是josn格式 header: { 'content-type': 'application/json' }, data: { }, //调用接口成功 success: function (res) { console.log("请求成功",res); } }); } }, fail(err) { //失败 console.error(err); reject() } }) }<?php declare (strict_types = 1); namespace app\index\controller; use think\facade\View; use think\facade\Db; use think\Request; class Wx { public function sendMessage() { $appid = 'appid'; $appsecret = 'appsecret'; $touser = '用户openid';//用户openid $template_id = '订阅模板id';//所需下发的订阅模板id $page = 'pages/my/my';//跳转页面不填则模板无跳转。 $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . $appid . '&secret=' . $appsecret; $res = json_decode(file_get_contents($url), true); $access_token = $res['access_token']; //请求url $url = 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=' . $access_token; //发送内容 $data = []; //接收者(用户)的 openid $data['touser'] = $touser; //所需下发的订阅模板id $data['template_id'] = $template_id; //点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。 $data['page'] = $page; //模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } } $data['data'] = [ "character_string1" => [ 'value' => '46546546' ], "date2" => [ 'value' => '2022年6月30日 12:00' ], "thing3" => [ 'value' => '122' ], 'thing6' => [ 'value' => '22' ], ]; //跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版 $data['miniprogram_state'] = 'developer' ; return self::curlPost($url,json_encode($data)) ; } //发送post请求 static function curlPost($url,$data) { $ch = curl_init(); $params[CURLOPT_URL] = $url; //请求url地址 $params[CURLOPT_HEADER] = FALSE; //是否返回响应头信息 $params[CURLOPT_SSL_VERIFYPEER] = false; $params[CURLOPT_SSL_VERIFYHOST] = false; $params[CURLOPT_RETURNTRANSFER] = true; //是否将结果返回 $params[CURLOPT_POST] = true; $params[CURLOPT_POSTFIELDS] = $data; curl_setopt_array($ch, $params); //传入curl参数 $content = curl_exec($ch); //执行 curl_close($ch); //关闭连接 return $content; } }
2022年07月02日
3 阅读
0 评论
0 点赞