技术分享

PHP之银联手机控件支付

Stephen/文

先说一个题外话: 银联支付接起来,相对有点麻烦,尤其是网上关于银联手机控件支付PHP后端的DEMO少之又少,今天接入银联手机空间支付发起请求的时候,报了个一个错误 {"Invalid request.":""} 一直找不到问题原因,打印请求参数,才发现证书ID certId为null,但接入方法都是用的SDK上的DEMO,证书路径也都配对了,certId怎么会是null呢,一直找不到问题,后咨询了客服,客服给我发了一个图片,提示用错证书,我还再三向客服确认了是不是那几个证书,确认了问题,也知道报错原因后,决定自己研究SDK代码,后来终于找到了,我犯了一个很傻的错误,由于我用的是docker环境,证书路径居然是用的宿主机的证书路径,然后我把证书路径改为docker容器路径后,终于请求并验签成功了。 银联手机控件支付PHP端接入方法: 1.将下载的PHP SDK代码的sdk目录(PHP Versio

后端开发 03/18 0

MySQL计算经纬度并按距离排序

Stephen/文

很多时候,我们需要通过MySQL查询附近的数据并实现分页 赋值当前用户经纬度 $lng = "";//经度 $lat = "";//纬度 MySQL语句查询 select *,round(ACOS(SIN(({$lat} * 3.1415) / 180 ) *SIN((lat * 3.1415) / 180 ) +COS(({$lat} * 3.1415) / 180 ) * COS((lat * 3.1415) / 180 ) *COS(({$lng} * 3.1415) / 180 - (lng * 3.1415) / 180 ) ) * 6380, 2) distance from user order by distance asc limit 1,10 注: {$lng}:经度 {$lat}:纬度

后端开发 03/18 0

PHP之极光推送DEMO并解决异常报错终止程序的问题

Stephen/文

在写API的时候,经常需要给客户端发送通知,这时候我们需要接入极光推送,后端发送请求到极光,极光再根据服务端发送的数据,推送到相应的设备。 安装方法: composer require jpush/jpush 代码封装: /** * 极光推送 * @param string $title 推送标题 * @param string $message 推送消息 * @param string $users 要推送的用户,[]全推 * @param string $tag tag,客户端用于区分的页面 * @param string $extras 传递给客户端的扩展参数 */ if(!function_exists('jPush')){ function jPush($title, $message, $users=[], $tag=1, array $extras=[]){ if(!$title || !$message || !$users){ return false; } //是否全推,al

后端开发 03/16 0

PHP之alipay SDK命名空间与类重复声明的问题解决

Stephen/文

将支付宝的SDK引入到项目目录后,报类重复声明的错误:Cannot declare class,支付宝 SDK PHP 是没有命名空间的,最后研究了很久,在网上找到了网友的解决方法,抱着一试的态度,终于解决了这个问题,现在我将这个问题分享记录一下,实现自动引入。 下载的支付宝SDK有两个目录,aop和lotusphp_runtime,还有一个PHP文件AopSdk.php 在vendor目录下新建alipay目录,将aop目录复制到alipay目录下(lotusphp_runtime和AopSdk.php不要),打开composer.json,在autoload节点新增: "classmap": [ "vendor/alipay/aop" ] 运行命令行: composer dump-autoload 然后在控制器中编写代码: $aop = new \AopClient(); $request = new \AlipayTradeAppPayRequest(); $request->setBizContent(json_encode($conten

后端开发 03/15 0

PHP之phpQuery爬虫

Stephen/文

用phpQuery简单实现网页内容爬虫 安装方法: composer require jaeger/querylist 用法: $phpQuery = \phpQuery::newDocumentFile($url); $result = \phpQuery::pq('.art_content', $phpQuery);//.art_content 节点 $string = $result->text();//节点文本内容 $html = $result->html();//节点HTML代码 可以通过这个方法实现一个简单的网页爬虫,抓取HTML节点代码 以简书为例,爬取一篇文章内容 $phpQuery = \phpQuery::newDocumentFile("https://www.jianshu.com/p/0c856519824d"); $title = \phpQuery::pq('title', $phpQuery)->text();//网页title $content = \phpQuery::pq('.show-content', $phpQuery)->html();//文章内容节点

后端开发 03/14 1

crontab秒级定时任务

Stephen/文

前段时间用Yii2做股票项目,股票项目对实时数据要求比较高,需要用到定时任务,每一秒都会请求新郎股票数据,但crontab定时任务最小单位是分,那如果需要实现秒级定时任务,需要写60次crontab,对于有强迫症的我是不能忍受的,我们可以用脚本实现秒级定时任务。 1.Yii2中定时任务控制器是写在console模块里 2.新建定时脚本crontab.sh #!/bin/bash step=1 for ((i = 0;i<60;i=(i+step)));do $(/www/server/php/56/bin/php '/www/wwwroot/a617/yii' 'init/gather') sleep $step done exit 0 $(/www/server/php/56/bin/php '/www/wwwroot/a617/yii' 'init/gather')解释: /www/server/php/56/bin/php:PHP路径 /www/wwwroot/a617/yii:项目目录/yii init/gather:conso

运维技术 03/13 0

解决composer require/composer install错误

Stephen/文

在composer require或者composer install命令中报错了,无法正常下载安装包,报错如下: Your requirements could not be resolved to an installable set of packages. Problem 1 - phpunit/php-code-coverage 4.0.8 requires ext-dom * -> the requested PHP extension dom is missing from your system. - phpunit/php-code-coverage 4.0.8 requires ext-dom * -> the requested PHP extension dom is missing from your system. - phpunit/php-code-coverage 4.0.8 requires ext-dom * -> the requested PHP extension dom is missing from your system. - Installation request for phpunit/php-code-coverage (

后端开发 03/12 0

Docker学写一个简单的Python程序

Stephen/文

前不久刚接触了docker神器,工作上,都是在docker上进行开发,特别好用,有种相识恨晚的感觉。我就以python为例,写一个简单的博客(技术很菜,运维大佬请绕道) 拉取docker远程镜像 docker pull python 启动一个python容器 docker run -it -d --name python -p 82:80 -v /data/www/python/:/usr/src/myapp/ python bash 解释: --name python 容器名字 -p 82:80 映射端口 -v /data/www/python/:/usr/src/myapp/ 映射目录,容器目录/usr/src/myapp/持久化到宿主机/data/www/python/目录 然后在宿主机编写一个hello.py文件,然后进入容器 docker exec -it python bash 进容器里运行 python /usr/src/myapp/hello.py

运维技术 03/08 0

Linux下root用户启动google浏览器

Stephen/文

平时喜欢用google浏览器,就在centos上装了个google浏览器,但在root用户下无法启动,切换为其他帐号可正常打开浏览器,原因是google浏览器不允许root用户启动,但我平时都是用root帐号,以下是root用户下解决办法: vim /opt/google/chrome/google-chrome 找到最后一行修改为: exec -a "$0" "$HERE/chrome" "$@" --no-sandbox 然后:w保存,就能正常启动google浏览器了

运维技术 02/18 2

Vue解决audio音乐不能播放的问题

Stephen/文

最近刚开始学Vue.js,感觉上手挺容易的,就用Vue写了个小demo---音乐播放器,代码量比js少了好多。 Html: <audio :src="'./music/'+music_src" id="audio"></audio> audio标签的src是用vue动态绑定的: var audio = document.getElementById("audio"); new Vue({ el: "#music", data: { music: [……], music_src: '', }, methods: { play: function(index){ this.music_src = this.music[index].src; audio.play(); } } }); 最后发现src是动态绑定进去了,但 audio.play(); 并不能播放,最后把这句去掉后,在audio标签里面加上autoplay属性,音乐就能动态加载播放了。 <audio :src="'./music/'+music_src" id="audio" au

Web前端 09/13 0

PHP两行代码实现更简便的二维数组排序

Stephen/文

百度搜索PHP二位数组排序,得到的方法,千篇一律,都是使用array_multisort方法排序,这个方法是先将需要排序的字段放在一个一维数组里面,然后再使用array_multisort进行排序,但其实PHP有一种更简单的方法,可以对二位数组进行排序: usort($list, function($a, $b){ return strcmp($a['created'], $b['created'])*-1;// -1:降序,1:升序 }); 只用了两三行代码就轻松实现了二位数组排序

后端开发 09/10 1

CORS Access-Control-Allow-Origin解决跨域的问题

Stephen/文

浏览器跨域是我们在开发过程中经常遇到的问题,常用的方法有jsonp,但jsonp只支持get方式,我们可以使用CORS解决浏览器跨域的问题。 照网上的方法,在PHP代码里面设置头消息,我用的是ThinkPHP框架,写在了action里面,但仍旧报跨域错误。 header('content-type:application:json;charset=utf8'); header("Access-Control-Allow-Origin:http://127.0.0.1");//允许访问的域名 header('Access-Control-Allow-Methods:POST');//跨域请求方式 header('Access-Control-Allow-Headers:x-requested-with,content-type'); 后来,我把它放到class之前,命名空间之后,便解决了使用CORS浏览器跨域的问题。

后端开发 09/10 0