首页
复制
搜索
前进
后退
重载网页
和我当邻居
给我留言吧
首页
统计
关于
WOW怀旧
友链
更多
留言
壁纸
直播
Search
1
关于《杀死那个石家庄人》背后的故事
3,797 阅读
2
沈阳故宫之旅
609 阅读
3
摄影记录|鸿恩寺
562 阅读
4
赤壁赋| 知不可乎骤得,托遗响于悲风
423 阅读
5
Laravel-admin 删除行|删除回调
366 阅读
编程技术
GoLang
Vue
PHP
Linux
Redis
网络安全
生活杂记
登录
Search
标签搜索
PHP
随笔
Mysql
Laravel-Admin
Laravel
摄影
设计模式
Ab
Linux
Javascript
MAC
支付
CentOs
sh
嘉陵江
南滨路
蓝易云
redis
万能青年
累计撰写
60
篇文章
累计收到
142
条评论
首页
栏目
编程技术
GoLang
Vue
PHP
Linux
Redis
网络安全
生活杂记
页面
统计
关于
WOW怀旧
友链
留言
壁纸
直播
搜索到
60
篇与
的结果
2022-02-28
笔记|Lumen请求webservice服务
首先封装一个请求方法 /** * @param $uri //webservice 地址 * @param $xml //xml主体 * @param $fuc //方法 * @param $data //请求参数 * @return false * */ public function sendSoap($uri, $xml,$fuc,$data) { ini_set("soap.wsdl_cache_enabled", 0); libxml_disable_entity_loader(false); $class_name = __CLASS__; try { $soap = new \SoapClient($uri, ['soap_version' => SOAP_1_2, "trace" => 1,'cache_wsdl' => 0, 'connection_timeout' => 10]); $soap->__setLocation($uri); logMessage('【SOAP请求:】' . $xml , $class_name); switch ($fuc) { case 'GetClinicItem': // 调用函数 $result_xml = $soap->__soapCall($fuc, []);//调用方式2 logMessage('【SOAP返回:】' . $result_xml->GetClinicItemResult, $class_name); return $result_xml->GetClinicItemResult; break; case 'GetClinicItemDetail': // 调用函数 $result_xml = $soap->__soapCall($fuc, $data);//调用方式2 logMessage('【SOAP返回:】' . $result_xml->GetClinicItemDetailResult, $class_name); return $result_xml->GetClinicItemDetailResult; break; } } catch (\SoapFault $fault) { logMessage('【SoapFault:】' . $fault->getMessage(), $class_name); return false; } catch (\Exception $exception) { logMessage('【SOAP报错:】' . $exception->getMessage(), $class_name); return false; } }调用此方法 $xml =<<<XML <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"> <soapenv:Header/> <soapenv:Body> <tem:GetClinicItem/> </soapenv:Body> </soapenv:Envelope> XML; $result_xml = $this->sendSoap([webservice地址], $xml,[方法名],[传参]);踩坑传参是个二位数组 例如:$data=[['节点名称'=>'val']];有莫名其秒的报错时,可以加一下这两个配置在请求前ini_set("soap.wsdl_cache_enabled", 0); libxml_disable_entity_loader(false);
2022年02月28日
266 阅读
0 评论
0 点赞
2021-11-13
laravel-admin 资源访问强制https
修改 admin.php https配置为trueconfig/admin.php 'https' => true
2021年11月13日
252 阅读
0 评论
0 点赞
2021-11-13
laravel分页 | 笔记
$page = $request->get('page')?$request->get('page'):1; //页数 $show = $request->get('show')?$request->get('show'):15; // 每页显示 $res = DB::table(self::$table) ->where("", '', ) ->offset(($page-1)*$show)->limit($show)->get();
2021年11月13日
108 阅读
0 评论
0 点赞
2021-11-13
EasyWechat 微信小程序接入微信支付|笔记
环境要求{callout color="#f0ad4e"} PHP >= 7.4 PHP cURL 扩展 PHP OpenSSL 扩展 PHP SimpleXML 扩展 PHP fileinfo 拓展{/callout}安装$ composer require overtrue/wechat:~5.0 -vvv使用use EasyWeChat\Factory; // ------------------------ $config = [ // 必要配置 'app_id' => 'xxxx', //小程序ID 'mch_id' => 'your-mch-id', //商家ID 'key' => 'key-for-signature', // API 密钥 // 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书) 'cert_path' => 'path/to/your/cert.pem', // XXX: 绝对路径!!!! 'key_path' => 'path/to/your/key', // XXX: 绝对路径!!!! 'notify_url' => '默认的订单回调地址', // 你也可以在下单时单独设置来想覆盖它 ]; // ------------------------ $app = Factory::payment($config); $res = $app->order->unify([ 'body' => $desc, //商品简介 'out_trade_no' => $order_code, //订单号 'total_fee' => floatval($info->pay_fee * 100), //价格 单位为分 'spbill_create_ip' => $_SERVER['REMOTE_ADDR'], // 可选,如不传该参数,SDK 将会自动获取相应 IP 地址 'notify_url' => $wx_config['notify_url'], // 支付结果通知网址,如果不设置则会使用配置里的默认地址 'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型 'openid' => $user_info->openid, //用户的openid ]); // ------------------------ if ($res['return_code'] == 'FAIL') return $this->error_back(-1, '预支付请求失败' . $res['return_msg'], []); // ------------------------ $pay_time = time(); $appId = $res['appid']; $nonceStr = $res['nonce_str']; $prepay_id = $res['prepay_id']; $timeStamp = $pay_time; $key = $wx_config['md5_key']; // ------------------------ $paySign = md5("appId=$appId&nonceStr=$nonceStr&package=prepay_id=$prepay_id&signType=MD5&timeStamp=$timeStamp&key=$key"); // 这个地方就是我所说的二次签名! // ------------------------ // 返回给小程序 $re = []; $re['nonceStr'] = $nonceStr; $re['timeStamp'] = strval($timeStamp); // 小程序支付的timeStamp参数,必须使用这个 timeStamp,因为已经计算到了paySign中 $re['package'] = "prepay_id=" . $prepay_id; $re['paySign'] = $paySign; $re['signType'] = 'MD5'; // ------------------------ //自己的操作逻辑部分--- 然后返回给前端 // ------------------------ return $this->success_back(200, 'success', $re); 回调 /** * * 支付回调地址 */ public function NotifyPayApi(Request $request) { $wx_config = config("app.wx_pay"); $config = [ // 必要配置 'app_id' => $wx_config['app_id'], 'mch_id' => $wx_config['mch_id'], 'key' => $wx_config['md5_key'], // API 密钥 // 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书) 'cert_path' => '', // XXX: 绝对路径!!!! 'key_path' => '', // XXX: 绝对路径!!!! 'notify_url' => $wx_config['notify_url'], // 你也可以在下单时单独设置来想覆盖它 ]; $app = Factory::payment($config); $response = $app->handlePaidNotify(function ($message, $fail) { if ($message['result_code'] == 'SUCCESS' && $message['return_code'] == 'SUCCESS') { $order_sn = $message['out_trade_no']; // 订单单号 $openid = $message['openid']; // 付款人openID $total_fee = ($message['total_fee']) / 100; // 付款金额 $transaction_id = $message['transaction_id']; // 微信支付流水号 $order_info = $this->FindOrderByOrderCode($order_sn); if (empty($order_info)) return false; // 更新订单 try { DB::beginTransaction(); //数据库逻辑 //插入流水 DB::commit(); return true; } catch (\Exception $e) { Db::rollBack(); return false; } } else { return false; } }); return $response; }就这么简单踩坑的地方就是拿到了 prepay_id 之后居然还要二次签名最后附上EasyWechat的官方地址 https://www.easywechat.com/5.x/payment/
2021年11月13日
359 阅读
0 评论
0 点赞
2021-09-05
笔记 | 深入浅出索引(下)
覆盖索引【举栗】mysql> create table T ( ID int primary key, k int NOT NULL DEFAULT 0, s varchar(16) NOT NULL DEFAULT '', index k(k)) engine=InnoDB;insert into T values(100,1, 'aa'),(200,2,'bb'),(300,3,'cc'),(500,5,'ee'),(600,6,'ff'),(700,7,'gg');执行 select * from T where k between 3 and 5在 k 索引树上找到 k=3 的记录,取得 ID = 300;再到 ID 索引树查到 ID=300 对应的 R3;在 k 索引树取下一个值 k=5,取得 ID=500;再回到 ID 索引树查到 ID=500 对应的 R4;在 k 索引树取下一个值 k=6,不满足条件,循环结束。在这个过程中,回到主键索引树搜索的过程,我们称为回表。执行 select ID from T where k between 3 and 5这时只需要查 ID 的值,而 ID 的值已经在 k 索引树上了,因此可以直接提供查询结果,不需要回表。也就是说,在这个查询里面,索引 k 已经“覆盖了”我们的查询需求,我们称为覆盖索引二级索引查询结果仅仅是主键 此时不需要回表查主键索引 称为覆盖索引由于覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段。最左前缀原则(name,age)索引示意图索引项是按照索引定义里面出现的字段顺序排序的联合索引(A, B)意味着不需要建立A的索引了,因为这个联合索引意味着建立了(A,B)和(A)这两种索引如果单使用age作为条件,索引是不会生效的,除非单独建立一个age索引,因为它遵循最左原则索引下推mysql> select * from tuser where name like '张%' and age=10 and ismale=1;MySQL 5.6 引入的索引下推优化(index condition pushdown), 可以在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。无索引下推执行流程索引下推执行流程
2021年09月05日
103 阅读
0 评论
0 点赞
1
...
10
11
12