首页
工具导航
友情链接
关于
Search
1
layui+php多文件列表,多图上传,包含表单修改,可适用于laravel框架和tp框架
3,555 阅读
2
设置邮箱头像方法,gravatar头像设置
1,967 阅读
3
百度工具DNS无法解析IP
1,712 阅读
4
在复制codepen代码时踩得坑,three.js实现的特效
1,610 阅读
5
关于本地larvael项目部署到服务器报错Whoops, looks like something went wrong.的问题
1,477 阅读
东扯西扯
网站建站
SEO优化
公众号开发
登录
Search
标签搜索
php
css
laravel
宝塔面板
jQuery
mysql
js
vscode
layui
thinkphp
navicat
轻量应用服务器
seo
gravatar头像
腾讯云
html
多图上传
插件
鼠标指针
网站收录
EzraYes
累计撰写
104
篇文章
累计收到
92
条评论
首页
栏目
东扯西扯
网站建站
SEO优化
公众号开发
页面
工具导航
友情链接
关于
搜索到
7
篇与
公众号开发
的结果
2021-08-13
sql查询优化,二分法得到的灵感
最近公司有一个项目进行二开,涉及到百万级sql数据查询,每个设备每分钟插入一条数据,仅仅过了几个月数据量就达到了500万,之前写的数据查询接口速度已经近乎瘫痪,一个接口需要8分钟才将其调完,在尝试升级RDS数据库配置后,得到了改善(39秒)但仍不理想,然后想到之前大学读到过二分法查找数据,思来想去为什么二分查找法不能用在MySQL呢?经过上网查阅资料,利用此原则对接口进行了改造使得接口降低效率大大提升相应数据响应速度低至3.4秒.下面开始实战:由于插入的数据都会有一个自增的主键,那么在查找条件的语句中加入id >= xxx,xxx代表你第一个查询的数据的id,这样会使你的sql查询不会从第一条开始查会节省很大一部分时间!//id大于xxx是指数据从id=xxx开始查,会显著提升查询效果 return Data::where('id','>',$aa)->whereBetween('created_at',[$arr['start_time'],$arr['end_time']])->where('mach_number',$mach_number)->get();
2021年08月13日
225 阅读
0 评论
0 点赞
2021-06-16
PHP微信扫码支付V3接口开发过程!!坑很多更新中
最近公司又一个项目需要微信扫码支付,之前没做过这种东西所以我先去看了文档,先说明一下本人只是一个菜鸟,遇事直接百度的那种,于是这次我像往常一样打开百度搜索微信扫码支付。此时我发现了一丝不对劲,怎么百度搜到的文档和微信官方的文档不一样呢?一个是用xml传递参数一个是用json传递参数,这一下给我搞蒙了,于是我去微信开放社区问了问,结果是微信支付有V2和V3之分,有没有V1我不清楚,用xml传参的是V2用json传参的是V3。建议我用V3,不过这个看个人喜好,也有人说V2更好。但是对比了两个文档后我还是选择了V3,因为文档看起来要传的参数少。。。。。。(只是看起来)首先贴个文档: 微信支付-开发者文档 然后在贴个图这个图是业务流程图自己看看理解,因为是扫码支付所以我需要用户下单后获取code_url然后使用code_url来生成二维码看起来很简单是吧,然后这个是文档中给出的参数{ "mchid": "1900006XXX", "out_trade_no": "native12177525012014070332333", "appid": "wxdace645e0bc2cXXX", "description": "Image形象店-深圳腾大-QQ公仔", "notify_url": "https://weixin.qq.com/", "amount": { "total": 1, "currency": "CNY" } }看起来也很少,但是如果我按照文档中写得发出请求呢?答案是会报错: 400 "Http头缺少Accept或User-Agent" ,ok,因为我在写这块代码的时候公众号并没有申请下来,所以我觉得很正常,但是后来一想不对劲,没申请下来应该报的是 appid和mch_id不匹配 才对啊,于是我在请求里又加了accept和user-agent,然后报 401 Http头Authorization值格式错误,请参考《微信支付商户REST API签名规则》 我当时直接黑人问号,这是个什么东西啊?于是我又去微信开发社区问,结果是V3接口在调用的时候需要签名。好家伙刚说完你V3接口简单,结果你偷摸藏了个规则关于签名的文档在这: 签名生成 要签名就必须要申请证书,方法在上面这个文档里,写得更详细,下载好证书之后保存好,之后就可以进行我们的开发了接下来我就直接上代码了public function xiadan(Request $request){//测试下单哦,根据需要自己改 $data=[]; $data['mchid']=''; $data['out_trade_no']='pai1234567'; $data['appid']=''; $data['description']='商品描述:测试用'; $data['notify_url']='';//通知地址 $data['amount']['total']=1;//订单总金额,单位为分。 $data['amount']['currency']='CNY'; $url="https://api.mch.weixin.qq.com/v3/pay/transactions/native"; $data_string=json_encode($data); $qianming=$this->qianming('POST',$url,$data_string); $code=$this->http_post_data($url,$data_string,$qianming); // dd($qianming); return $code; // return json_encode($data); } public function qianming($http_method,$url,$body){ // Authorization: <schema> <token> //获取HTTP请求的方法(GET,POST,PUT等)$http_method //获取请求的绝对URL $url_parts = parse_url($url); $canonical_url = ($url_parts['path'] . (!empty($url_parts['query']) ? "?${url_parts['query']}" : "")); //时间戳 $timestamp=time(); //生成随机串 $nonce=$this->createNoncestr(); $message = $http_method."\n". $canonical_url."\n". $timestamp."\n". $nonce."\n". $body."\n"; $mch_private_key=$this->getPrivateKey(); openssl_sign($message, $raw_sign, $mch_private_key, 'sha256WithRSAEncryption'); $sign = base64_encode($raw_sign);//计算签名 $schema = 'WECHATPAY2-SHA256-RSA2048'; //serial_no为商户证书序列号 $serial_no = '你商户证书的序列号'; $merchant_id = $this->mch_id; $token = sprintf('mchid="%s",nonce_str="%s",timestamp="%d",serial_no="%s",signature="%s"', $merchant_id, $nonce, $timestamp, $serial_no, $sign); $msg['schema']=$schema; $msg['token']=$token; return $msg['schema'].' '.$token;; } /** * 作用:产生随机字符串,不长于32位 */ public function createNoncestr( $length = 32 ) { $chars = "abcdefghijklmnopqrstuvwxyz0123456789"; $str =""; for ( $i = 0; $i < $length; $i++ ) { $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1); } return $str; } //查看证书序列号 public static function getCertificate($filepath="apiclient_cert.pem") {//改成自己的地址哦 // return file_get_contents($filepath);die; $str = openssl_x509_parse(file_get_contents($filepath)); return $str['serialNumberHex']; // return openssl_x509_read(file_get_contents($filepath)); } //获取私钥 public static function getPrivateKey($filepath="apiclient_key.pem") {//改成自己的地址哦 $private_key=openssl_get_privatekey(file_get_contents($filepath)); return $private_key; } /** * 发送数据 */ public function http_post_data($url,$data_string,$qianming) { $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36', 'Accept:*/*', 'Authorization:' ."$qianming", 'Content-Type: application/json; charset=utf-8', 'Content-Length: ' . strlen($data_string)) ); ob_start(); curl_exec($ch); $return_content = ob_get_contents(); ob_end_clean(); $return_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); return array($return_code, $return_content); }这样起码报错是 appid和mch_id不匹配 了,之后可能有更新,但感觉悬哈哈
2021年06月16日
652 阅读
0 评论
0 点赞
2021-06-07
微信网页应用开发扫码登录和小程序通过unionid打通账号(更新中)
首先微信网页应用开发需要去微信开放平台去注册,而小程序则需要去微信公众平台注册,这时候要注意虽然我们想做账号打通将两个东西用一个微信号就可以登录,但是注册微信开放平台和注册微信公众平台的注册邮箱却不能一样,我们只需要保持这两个东西的主体一样就可以了.如图,这就是微信公平台里的样子,此时我们将要打通账号的微信小程序添加进来首先扫码登录参照文档 微信开放平台开发文档第一步请求code https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html参数是否必须说明appid是应用唯一标识redirect_uri是请使用urlEncode对链接进行处理response_type是应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_loginscope是应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_loginstate否用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验因为我是网页移动开发所以以我为例, appid 就填你网站应用的appid, redirect_uri 这里有点坑很容易报redirect_uri参数错误,除了你的域名不是授权回调域以外还有可能是因为redirect_uri需要做urlEncode处理,百度一下urlEncode将你的地址处理了就好了,此外还有很多人说不加http或https,这个看情况我做的时候就是没有带http所以报错了建议都试试。后边三个参数一般不用管默认的就行,不过还是要看具体的开发情况第二步通过code获取到access_token https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code参数是否必须说明appid是应用唯一标识secret是应用密钥AppSecret,在微信开放平台提交应用审核通过后获得code是第一步获取的codegrant_type是填authorization_code这样我们就可以获取到unionid了,unionid在之后的打通账号中非常重要然后可以根据openid和access_token进一步获取用户信息https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID{ "openid":"OPENID", "nickname":"NICKNAME", "sex":1, "province":"PROVINCE", "city":"CITY", "country":"COUNTRY", "headimgurl": "https://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0", "privilege":[ "PRIVILEGE1", "PRIVILEGE2" ], "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL" }小程序部分 参考文档 首先小程序调起登录接口生成code返回给后台,然后返回给后台,后台再向微信请求到openid,unionid需要小程序绑定到微信开放平台,否则是获取不到的
2021年06月07日
176 阅读
0 评论
0 点赞
2021-05-26
laravel视频上传到腾讯云cos对象存储,Phar方式实现开发
申请产品创建存储桶获取访问秘钥访问秘钥在个人信息里的访问管理设置而并非在产品的控制台里根据文档进行sdk开发,下载cos的sdk这一步是我进行开发中遇到的最大的坑,首先我根据官方文档的方式去用composer的方式去下载可是始终下不下来,来来回回折腾了一上午都没搞定,不过文档中还有一个方法: Phar方法根据官方文档下载下来之后把他放在你项目里面,然后用到它的时候引一下就可以了require '/path/to/cos-sdk-v5.phar';我是用laravel进行的开发所以贴出我的代码<?php namespace App\Http\Controllers\Web; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use App\Models\User; use App\Traits\BaseFun; use Qcloud\Cos\Client; class UploadController extends Controller { public function __construct( ) { } private $secretId = "你的密钥"; //"云 API 密钥 SecretId"; private $secretKey = "你的SecretKey"; //"云 API 密钥 SecretKey"; private $region = "默认的存储桶地域"; //设置一个默认的存储桶地域 private $bucket = "你的存储桶"; //存储桶名称 格式:BucketName-APPID private function __cosClient(){ require 'cos/cos-sdk-v5.phar';//你刚才下载的phar路径 return $cosClient = new Client( array( 'schema' => 'http', //协议头部,默认为http 'region' => $this->region, 'credentials'=> array( 'secretId' => $this->secretId , 'secretKey' => $this->secretKey ) ) ); } public function upload(Request $request) { //获取上传的文件 $file = request()->file('file'); //获取储存桶对象 $cosClient = $this->__cosClient(); // dd($file->getRealPath()); //上传 try { $bucket = $this->bucket; //存储桶名称 格式:BucketName-APPID $key = 'video/'."abc".".".$file->getClientOriginalExtension(); //此处的 key 为对象键,对象键是对象在存储桶中的唯一标识 $srcPath = $file->getRealPath();//本地文件绝对路径 $file = fopen($srcPath, 'rb'); if ($file) { $result = $cosClient->Upload( $bucket = $bucket, $key = $key, $body = $file); } // print_r($result); echo $result['Location']; } catch (\Exception $e) { echo "$e\n"; } } } 最后注意你上传的文件权限都是继承的存储桶的权限,如果你的存储桶权限是私有的,那么上传后并不能被别人看见
2021年05月26日
479 阅读
0 评论
0 点赞
2021-04-02
小计:公众号开发的大致流程
1.申请公众号2.配置IP白名单3.配置服务器4.设置回调域名5.获取access_token并保存到服务器,存在数据库或者文件都可以,两个小时有效期6.开发7.调用微信接口请求获取用户信息,成功后返回接口中自己设置的回调地址8.回调地址中调用微信接口获取用户信息,存起来
2021年04月02日
185 阅读
0 评论
0 点赞
1
2