技术分享 / 后端开发

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

解决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

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

Linux下PHP Redis扩展安装

Stephen/文

一、安装 phpize 和 php-config yum install php-devel 安装后可用 which phpize 和 which php-config 查看安装的路径 二、下载 phpredis wget https://github.com/phpredis/phpredis/archive/develop.zip 三、扩展安装 1.解压缩 develop.zip unzip develop.zip 2.生成使用configure工具 cd phpredis-develop/ phpize ./configure -with-php-config=/usr/bin/php-config 3.编译 make make install 4.修改 php.ini 启用 redis 扩展 php --ini vim /etc/php.ini 在最后一行添加: extension=redis.so 然后保存退出,使用 php -m 命令查看已安装的扩展,有 redis 表示扩展安装成功

后端开发 06/05 0

网站如何使用Google两步验证

Stephen/文

什么是两步验证? 谷歌两步验证是Google的一种开源技术,给网站提供额外的保护,每次登录账户时,在登录后需要输入Google Authenticator给你生成的6位验证码。 怎么使用? 用法很简单,只需要几行代码就可以轻松实现两步验证 <?php require_once './GoogleAuthenticator.php'; $auth = new GoogleAuthenticator; $secret = $auth->createSecret();//生成密钥 //$auth->getCode();//生成二维码,次方法需要翻墙,我们建议用qrcode生成二维码 $code = $_POST['code'];//接收用户输入的验证码 if($auth->verifyCode($secret, $code)){ echo "验证成功"; } ?> 验证步骤 1.手机上下载安装APP:Google Authenticator 2.打开APP,扫描二维码(安卓手机需要安装Googl

后端开发 01/05 1

Yii2 ActiveForm使用方法及样式修改

Stephen/文

\yii\widgets\ActiveForm类提供了Bootstrap3的表单域,但在Yii2默认表单控件中,它的样式就没有那么美观了,那我们怎么在不修改其表单方法下,修改表单的样式呢?我们可以在ActiveForm::begin中给他一个模板参数“template”,就可以直接修改了表单样式。 <?php $form = ActiveForm::begin([ 'id' => 'msg-form', 'options' => ['class'=>'form-horizontal'], 'fieldConfig' => [ 'template' => "{label}\n<div class=\"col-lg-3\">{input}</div>\n<div class=\"col-lg-8\">{error}</div>", 'labelOptions' => ['class' => 'col-lg-1 control-label'], ] ]); 这是基于Bootstrap3的网格系统设置的

后端开发 09/28 0

Yii2使用gii生成代码

Stephen/文

gii可谓是Yii2中一个神奇的扩展,可以快速帮你生成Model类、CRUD、Module模块、Form表单等,可以在开发上节约很大的时间。 1、在 config/web.php 中配置 if (YII_ENV_DEV) { $config['bootstrap'][] = 'gii'; $config['modules']['gii'] = 'yiigiiModule'; } 2、在入口文件配置,设置为开发环境 defined('YII_ENV') or define('YII_ENV', 'dev'); 3、浏览器打开 http://127.0.0.1/index.php?r=gii 4、点击Model Generator,填写Table Name(表名)和Model Class(类名)快速生成Model类 5、然后,点击下方的preview,会列出要生成的模型,确认没问题后,点击Generate生成 6、点击Crud Generator,填写Model Class(已生成的类名,包括命名空间)、Search Model Class(需要生成的

后端开发 09/25 0