laravel 支付宝支付接口调试

Alipay

  • 支付宝SDK在Laravel5/Lumen封装包。
  • 该拓展包想要达到在Laravel5/Lumen框架下,便捷使用支付宝的目的。

安装支付宝SDK扩展包

composer require latrell/alipay dev-master

配置及使用

  • 找到 config/app.php 配置文件中,key为 providers 的数组,在数组中添加服务提供者

     // 支付宝支付
     Latrell\Alipay\AlipayServiceProvider::class,
    

说明

  • 配置文件 config/latrell-alipay.php 为公共配置信息文件,
    config/latrell-alipay-web.php 为Web版支付宝SDK配置,
    config/latrell-alipay-mobile.php 为手机端支付宝SDK配置。
  • 运行 php artisan vendor:publish 命令,发布配置文件到你的项目中。

在bootstrap/app.php里注册服务。

$app->register(
    Latrell\Alipay\AlipayServiceProvider::class
);

代码例子

  • 网页

     // 创建支付单。
     $alipay = app('alipay.web');
     $alipay->setOutTradeNo('订单号');
     $alipay->setTotalFee('订单价格(元)');
     $alipay->setSubject('商品名称');
     $alipay->setBody('商品描述');
     $alipay->setQrPayMode('4'); //该设置为可选,添加该参数设置,支持二维码支付。
     // 跳转到支付页面。
     return redirect()->to($alipay->getPayLink());
    
  • 手机端

     // 创建支付单。
     $alipay = app('alipay.mobile');
     $alipay->setOutTradeNo('订单号');
     $alipay->setTotalFee('商品价格(元)');
     $alipay->setSubject('商品名称');
     $alipay->setBody('商品描述');
     // 返回签名后的支付参数给支付宝移动端的SDK。
     return $alipay->getPayPara();
    

结果通知

  • 网页

     /**
     * 异步通知
     */
     public function webNotify(Request $request)
     {
         // 验证请求。
         if (! app('alipay.web')->verify()) {
             // // 日志
             // Log::notice('Alipay notify post data verification fail.', [
             //  'data' => $request->getContent()
             // ]);
             return 'fail';
         }
    
         // 判断通知类型。
         switch ($request->trade_status) {
             case 'TRADE_SUCCESS':
             case 'TRADE_FINISHED':
             // TODO: 支付成功,取得订单号进行其它相关操作。
             // // 日志
             // Log::debug('Alipay notify post data verification success.', [
             //     'out_trade_no' => $request->out_trade_no,
             //     'trade_no' => $request->trade_no
             // ]);
             break;
         }
    
         return 'success';
     }
     
     /**
     * 同步通知
     */
     public function webReturn(Request $request)
     {
         // 验证请求。
         if (! app('alipay.web')->verify()) {
             // // 日志
             // Log::notice('Alipay return query data verification fail.', [
             //  'data' => $request->getContent()
             // ]);
             return ['alipay.fail'];
         }
    
         // 判断通知类型。
         switch ($request->trade_status) {
             case 'TRADE_SUCCESS':
             case 'TRADE_FINISHED':
             // TODO: 支付成功,取得订单号进行其它相关操作。
             // // 日志
             // Log::debug('Alipay notify get data verification success.', [
             //     'out_trade_no' => $request->out_trade_no,
             //     'trade_no' => $request->trade_no
             // ]);
             break;
         }
         return ['alipay.success'];
     }
    
  • 手机端

     /**
      * 支付宝异步通知
      */
     public function alipayNotify(Request $request)
     {
         // 验证请求。
         if (! app('alipay.mobile')->verify()) {
             // // 日志
             // Log::notice('Alipay notify post data verification fail.', [
             //  'data' => $request->getContent()
             // ]);
             return 'fail';
         }
    
         // 判断通知类型。
         switch ($request->trade_status) {
             case 'TRADE_SUCCESS':
             case 'TRADE_FINISHED':
                 // TODO: 支付成功,取得订单号进行其它相关操作。
                 // // 日志
                 // Log::debug('Alipay notify get data verification success.', [
                 //  'out_trade_no' => $request->out_trade_no,
                 //  'trade_no' => $request->trade_no
                 // ]);
             break;
         }
    
         return 'success';
     }
    

搭建视频流服务器

为了实现视频点播和直播,整了一天,看了好多资料,终于有了不小进展,在这里分享给大家。
什么是视频点播?可能你对这个名词不熟悉,但是爱奇艺,腾讯视频等这些视频播放软件想必你肯定知道。没错,视频点播就是在线观看某个视频。额,视频直播?这个就不解释了吧,美女直播,游戏直播等等,哈哈。

首先我们看如何实现视频点播,视频点播支持flv文件及H264编码视频,ACC编码音频的mp4文件:
第一步,创建单独的目录(因为软件较多,容易混乱),下载需要的软件:
我们需要下载nginx,pcre,zlib,openssl以及nginx-rtmp-module

mkdir ser_work

cd ser_work

wget http://nginx.org/download/nginx-1.10.3.tar.gz

wget http://zlib.net/zlib-1.2.11.tar.gz

wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz

wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz

wget https://github.com/arut/nginx-rtmp-module/archive/master.zip

第二步解压前四个文件

tar -zxvf 文件名

第三步 编译安装nginx:

./configure --prefix=/usr/local/nginx --with-debug --with-pcre=../pcre-8.40 --with-zlib=../zlib-1.2.11 --with-openssl=../openssl-1.0.2k --add-module=../nginx-rtmp-module-master
make
sudo make install

第四步,进入 /usr/local/nginx/conf,配置nginx.conf文件,在文件末尾添加如下内容:

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}

rtmp {
    server {
        listen 1935;
        chunk_size 4096;
        application hls {
            live on;
            hls on;
            hls_path /usr/local/nginx/html/hls;
            hls_fragment 3s;
            hls_playlist_length 6s;
        }
        #application rtmplive {
        #    live on;
        #    max_connections 1024;
        #    record off;
        #}
    }
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       8080;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
        # 网页直播地址设置
        location /hls {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root html;
            add_header Cache-Control no-cache;
        }
        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}   

视频推流

  • 使用推流工具OBS进行推流
  • 推流地址及秘钥
    rtmp://127.0.0.1:1935/hls
    7s3iodndk
  • 网页观看地址
    http://127.0.0.1:8080/hls/7s3iodndk.m3u8
    VLC观看地址:rtmp://127.0.0.1:1935/hls/7s3iodndk

WX20180611-112600@2x.png

WX20180611-112908@2x.png

Ubuntu 16.04下安装MySQL

简单分享Ubuntu 16.04下安装MySQL的过程。
首先执行下面三条命令:

sudo apt-get install mysql-server
sudo apt install mysql-client
sudo apt install libmysqlclient-dev

安装成功后可以通过下面的命令测试是否安装成功:

sudo netstat -tap | grep mysql

出现如下信息证明安装成功:
blog1.png

可以通过如下命令进入MySQL服务:

mysql -uroot -p你的密码

现在设置mysql允许远程访问,首先编辑文件/etc/mysql/mysql.conf.d/mysqld.cnf:

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

注释掉bind-address = 127.0.0.1:
blog2.png

保存退出,然后进入mysql服务,执行授权命令:

grant all on *.* to root@'%' identified by '你的密码' with grant option;
flush privileges;

然后执行quit命令退出mysql服务,执行如下命令重启mysql:

service mysql restart

现在在Mac Os下可以使用navicat远程连接Ubuntu下的MySQL服务:
WX20180611-105507@2x.png

CentOS操作系统防火墙添加例外端口

CentOS6与CentOS7添加防火墙例外端口的命令不用,需单独来说:

(1)CentOS6下添加防火墙例外端口

#vim/ets/sysconfig/iptables

在 -A INPUT -m state--state NEW -m tcp -p tcp --dport 22 -j ACCEPT

一行的后台添加类似的一行命令即可,如

# Firewall configuration written by system-config-firewall

# Manual customization of this file is not recommended.

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

然后重启防火墙服务:

#service iptables restart/start/stop

(2)CentOS7下添加防火墙例外端口

firewall-cmd --zone=public --add-port=8180/tcp --permanent #添加8180端口

firewall-cmd --reload #重新加载策略配置,以使新配置生效

注:禁止firewall开机启动为:systemctldisable firewalld.service

-A INPUT -m state --state NEW -m tcp -p tcp --dport 1216 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

Yearning SQL审核平台安装

相关依赖

  • python >= 3.6
  • node >= 6.10 (仅开发模式安装)
  • nginx
  • mysql >= 5.6
  • Inception

安装

注意

Yearning 采用的是动静分离架构,为了接口安全后端接口并不对全域开放。
所以存在跨域的问题,请仔细阅读以下 配置文件说明!如配置错误将无法正常登陆!
本文档只介绍Yearning相关安装配置,对于Inceotion相关配置需自行添加。如只配置了Yearning却没有配置Inception则    仍然无法正常工作。所以请确保自己已熟读inception相关文档

生产模式安装(推荐):

安装 nginx mysql python3.6 (nginx,mysql推荐yum安装。python3.6官方自行下载安装)
安装Inception(install目录下有已经编译好的Inception可以直接运行)
建立数据库 (库字符集必须为UTF8或utf8mb4,不然会有未知错误)
git clone https://github.com/cookieY/Yearning.git
编辑 Yearning/src/deploy.conf


[mysql]
db = 所创建的库名
address = 数据库地址
port = 数据库端口
password = 数据库密码
username = 数据库用户

[host]
ipaddress = 服务器ip地址:端口 (涉及跨域十分重要!!设置不正确将无法登陆!!)
        例如 本机地址为192.168.1.2 nginx端口为80(端口可自己定义,定义什么端口就填写什么端口)
        则应填写为 192.168.1.2:80 之后只能通过该地址访问平台其他地址一概无效!
        注意!访问的是nginx的端口不是后端8000端口!

[Inception]
ip = Inception地址
port = Inception端口
user = Inception用户名
password  = Inception密码
backupdb = 备份数据库地址
backupport = 备份数据库端口
backupuser = 备份数据库用户名
backuppassword = 备份数据库密码

[LDAP] LDAP相关设置
LDAP_SERVER = LDAP服务地址
LDAP_SCBASE = LDAP dc 设置 如 dc=xxx,dc=com
LDAP_DOMAIN = LDAP域名 如 xxx.com
LDAP_TYPE = 1  1 通过域名进行ldap认证  2 通过uid进行ldap认证 3 通过cn进行ldap认证

[email] 邮箱推送相关设置
username = 邮箱发件账号 如 xxxx@163.com
password = 邮箱发件账号密码
smtp_server = 邮箱stmp地址, 具体地址请咨询对应邮箱提供者

[sql]

limit = 100 查询最高的Limit数量

[webhook]

dingding =  权限提交,查询工单等其他非sql工单提交消息推送钉钉webhook

开始安装

pip3 install -r requirements.txt 安装相应python依赖库

python3 manage.py makemigrations core && python3 manage.py migrate core 初始化数据库

echo "from core.models import Account;Account.objects.create_user(username='admin',         password='Yearning_admin', group='admin',is_staff=1)" | python3 manage.py shell 添加初始化用户

echo "from core.models import grained;grained.objects.get_or_create(username='admin', permissions={'person': [], 'ddl': '1', 'ddlcon': [], 'dml': '1', 'dmlcon': [], 'dic': '1', 'diccon': [], 'dicedit': '0', 'user': '1', 'base': '1', 'dicexport': '0'})" | python3 manage.py     shell 初始化权限

注意: 对于v1.1.2以下的版本 permissions={}内还需添加'query': '1', 'querycon': []

cp -rf Yearning/webpage/dist/* $NGINX_HOME/html/   复制编译好的静态文件到nginx html目录下(如自行更改Nginx静态路径地址则将静态文件复制到对应静态文件目录下)

systemctl start nginx  启动nginx

python3 manage.py runserver 0.0.0.0:8000 启动django

访问deploy.conf 配置文件中ipaddress 填写的地址

默认账号: admin  密码:Yearning_admin

注意事项

  • 默认超级管理用户只拥有管理页面的访问权限,其他的权限需自行增加!详情请查看使用说明用户管理
  • 由于Inception 并不原生支持pymysql,所以需更改pymysql相关源码
  • 注: 在install 文件夹下有已经修改的connections.py 和 cursors.py 直接替换即可
  • 修改 $PYTHON_HOME/lib/python3.6/site-packages/pymysql下

connections.py 和 cursors.py 两个文件
找到 connections.py 1108行

if int(self.server_version.split('.', 1)[0]) >= 5:
        self.client_flag |= CLIENT.MULTI_RESULTS

更改为

try:
    if int(self.server_version.split('.', 1)[0]) >= 5:
        self.client_flag |= CLIENT.MULTI_RESULTS
except:
    if self.server_version.split('.', 1)[0] >= 'Inception2':
        self.client_flag |= CLIENT.MULTI_RESULTS

找到 cursors.py 345行

if self._result and (self._result.has_next or not self._result.warning_count):
    return

更改为

if self._result:
    return

Inception启动问题
如果启动失败报错如下:

libssl.so.10: cannot open shared object file: No such file or directory

解决办法:

  • 先下载安装一次openssl

  • 下载:https://www.openssl.org/source/old/1.0.1/openssl-1.0.1e.tar.gz

  • 执行./config shared zlib-dynamic 来生成Makefile文件。

  • 通过make来生成生成libssl.so.1.0.0和libcrypto.so.1.0.0

  • 将这2个文件拷贝到cd /usr/lib/,然后执行以下2条生成软连接解决。

     ln -s libssl.so.1.0.0          libssl.so.10
     ln -s libcrypto.so.1.0.0    libcrypto.so.10