首先我们来探讨如何在Laravel应用中使用支付宝进行支付,对此,GitHub上有很多相关的包,其中最流行的两个包:Omnipay For Laravel 5 & Lumen 和 Laravel AliPay。这里使用的是Laravel AliPay来做案例说明:

准备工作 :支付宝账号 /蚂蚁金服开放平台账号---> 支付宝签约(即时到账)
到项目根目录执行命令安装包

composer require latrell/alipay dev-master

执行更新

composer update

执行更新后,到vendor目录里面看一下有没有latrell目录,如果有说明安装成功,反之没有。因为latrell目录下放的是alipay相关文件

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

'providers' => [
/*
* Laravel Framework Service Providers...
*/ 'Latrell\Alipay\AlipayServiceProvider',
]

执行命令,生成配置文件到config/目录下

php artisan vendor:publish

配置说明

配置文件 config/latrell-alipay.php 为公共配置信息文件

config/latrell-alipay-web.php 为Web版支付宝SDK配置

config/latrell-alipay-mobile.php 为手机端支付宝SDK配置

打开config/latrell-alipay-web.php,设置安全检验码与通知页面

<?php
return [ // 安全检验码,以数字和字母组成的32位字符。
'key' => 'a6cq60*****************zl', //签名方式
'sign_type' => 'MD5', // 服务器异步通知页面路径。根据自己项目路径做相应的修改
'notify_url' => 'http://web.wan.com/notify', // 页面跳转同步通知页面路径。根据自己项目路径做相应的修改
'return_url' => 'http://web.wan.com/return'
];

打开config/latrell-alipay.php,设置卖家支付宝帐户和合作身份者id

<?php
return [
//合作身份者id,以2088开头的16位纯数字。
'partner_id' => '2088************', //卖家支付宝帐户。
'seller_id' => '28*******4@qq.com'
];

设置支付请求路由

//支付宝支付处理路由
Route::get('alipay','Home\alipayController@Alipay'); // 发起支付请求
Route::any('notify','Home\alipayController@AliPayNotify'); //服务器异步通知页面路径
Route::any('return','Home\alipayController@AliPayReturn'); //页面跳转同步通知页面路径

支付宝扫码支付案例代码

<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2017/2/8
* Time: 20:19
*/ namespace App\Http\Controllers\Home; use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log; class alipayController extends Controller{ // 发起支付请求
public function Alipay(){
$alipay = app('alipay.web');
$alipay->setOutTradeNo('E0002332039');
$alipay->setTotalFee('0.01');
$alipay->setSubject('小米5s');
$alipay->setBody('商品:支付宝支付测试'); $alipay->setQrPayMode('5'); //该设置为可选1-5,添加该参数设置,支持二维码支付。 // 跳转到支付页面。
return redirect()->to($alipay->getPayLink());
} // 异步通知支付结果
public function AliPayNotify(Request $request){
// 验证请求。
if (!app('alipay.web')->verify()) {
Log::notice('Alipay notify post data verification fail.', [
'data' => $request->instance()->getContent()
]);
return 'fail';
}
// 判断通知类型。
switch ($request ->input('trade_status','')) {
case 'TRADE_SUCCESS':
case 'TRADE_FINISHED':
// TODO: 支付成功,取得订单号进行其它相关操作。
Log::debug('Alipay notify post data verification success.', [
'out_trade_no' => $request -> input('out_trade_no',''),
'trade_no' => $request -> input('trade_no','')
]);
break;
}
return 'success';
} // 同步通知支付结果
public function AliPayReturn(Request $request){
// 验证请求。
if (!app('alipay.web')->verify()) {
Log::notice('支付宝返回查询数据验证失败。', [
'data' => $request->getQueryString()
]);
return view('alipayfail');
}
// 判断通知类型。
switch ($request ->input('trade_status','')) {
case 'TRADE_SUCCESS':
case 'TRADE_FINISHED':
// TODO: 支付成功,取得订单号进行其它相关操作。
Log::debug('支付宝通知获得数据验证成功。', [
'out_trade_no' => $request ->input('out_trade_no',''),
'trade_no' => $request -> input('trade_no','')
]);
break;
}
return view('alipaysuccess');
}
}

支付宝支付手机端:

<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2017/2/8
* Time: 22:19
*/
namespace App\Http\Controllers\Home; use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log; class alipayController extends Controller{
// 发起支付请求
public function Alipay(){
$alipay = app('alipay.mobile');
$alipay->setOutTradeNo('E0002332039');
$alipay->setTotalFee('0.01');
$alipay->setSubject('小米5s');
$alipay->setBody('商品:支付宝支付测试'); // 返回签名后的支付参数给支付宝移动端的SDK。
return $alipay->getPayPara();
} // 支付宝异步通知支付结果
public function AliPayNotify(Request $request){
// 验证请求。
if (!app('alipay.mobile')->verify()) {
Log::notice('Alipay notify post data verification fail.', [
'data' => $request->instance()->getContent()
]);
return 'fail';
}
// 判断通知类型。
switch ($request ->input('trade_status','')) {
case 'TRADE_SUCCESS':
case 'TRADE_FINISHED':
// TODO: 支付成功,取得订单号进行其它相关操作。
Log::debug('Alipay notify post data verification success.', [
'out_trade_no' => $request -> input('out_trade_no',''),
'trade_no' => $request -> input('trade_no','')
]);
break;
}
return 'success';
}

AliPay。其GitHub项目地址是:https://github.com/Latrell/Alipay。该项目是中文版,使用说明GitHub上说的很清楚明白

laravel5集成支付宝alipay扫码支付流程(Laravel 支付解决方案)的更多相关文章

  1. 【支付宝支付】扫码付和app支付,回调验证签名失败问题

    在检查了参数排序,编码解码,文件编码等问题后,发现还是签名失败,最后找出原因: 扫码付和app支付采用的支付宝公钥不一样   Pid和公钥管理里面:   开放平台密钥界面和开放平台应用界面的密钥应该一 ...

  2. python支付宝页面扫码支付

    一.介绍 基于网上一个支付宝pay.py封装了支付宝API的文件进行的,以下代码只支持网页扫码支付,手机端会提示调用支付宝支付 #pay文件代码 from datetime import dateti ...

  3. 微信支付v3开发(5) 扫码并输入金额支付

    关键字:微信支付 微信支付v3 动态native支付 统一支付 Native支付 prepay_id 作者:方倍工作室 本文介绍微信支付下的扫描二维码并输入自定义金额的支付的开发过程. 注意 微信支付 ...

  4. android蜂巢效果、环形菜单、Kotlin影视应用、简约时钟、查看导出App、支付宝AR扫码效果等源码

    Android精选源码 一个蜂巢布局管理器,外观帅气外,动画效果也是很赞 一个基础 UI 框架项目,实现不同布局格式的混排 仿建行app效果,一个环形菜单的布局管理器源码 基于组件化实现的一款用Kot ...

  5. 支付宝支付之扫码支付(电脑网站支付)、H5支付(手机网站支付)相关业务流程分析总结

    前言 在上一篇文章<微信支付之扫码支付.公众号支付.H5支付.小程序支付相关业务流程分析总结>中,分析和总结了微信支付相关支付类型的业务流程,这里作为与微信支付平起平坐不相伯仲的支付宝支付 ...

  6. ASP.NET Core 2.0 支付宝当面付之扫码支付

    前言 自从微软更换了CEO以后,微软的战略方向有了相当大的变化,不再是那么封闭,开源了许多东西,拥抱开源社区,.NET实现跨平台,收购xamarin并免费提供给开发者等等.我本人是很喜欢.net的,并 ...

  7. Spring使用支付宝扫码支付

    前一段一直在研究支付宝的扫码支付,不得不说,支付宝的文档写的真是一个烂(起码在下刚开始看的时候是mengbi的).文档上面的示例和demo里面的示例长的完全不一样.往往文档上面的例子很简单,而demo ...

  8. .NET Core2.0 环境下MVC模式的支付宝扫码支付接口-沙箱环境开发测试

    所有配置以及相关信息均可以从PC支付中获取 使用的生成二维码的组件名为QRCoder,该组件引用了一个第三方实现的System.Drawing类库,和支付宝官网类似 当面付SDK为Alipay.Aop ...

  9. Win10环境前后端分离项目基于Vue.js+Django+Python3实现微信(wechat)扫码支付流程(2021年最新攻略)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_182 之前的一篇文章:mpvue1.0+python3.7+Django2.0.4实现微信小程序的支付功能,主要介绍了微信小程序内 ...

随机推荐

  1. 深入解析ConcurrentHashMap类

    以前写过介绍HashMap的文章,文中提到过HashMap在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容 ...

  2. JS关于Date函数的格式化输出

    // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占 ...

  3. Mysql索引最左匹配原则

    先来看个例子: 1. 示例1:假设有如下的一张表: DROP TABLE IF EXISTS testTable; CREATE TABLE testTable ( ID BIGINT NOT NUL ...

  4. idea 启动调试模式总提示端口58346被占用问题

    在开发的时候,莫名其妙没法用jrebel调试模式启动了tomcat了,最开始以为是后台端口占用问题,然而把后台java程序全部关了都没用.仔细排查,根据提示发现是端口58346被占用了, 于是便在 w ...

  5. jQuery ajax如何传多个值到后台页面,举例:

    一.js代码 <script type="text/JavaScript">$("#save_change_<{$aff.Id}>"). ...

  6. ansible基础-加密

    一 简介 注:本文demo使用ansible2.7稳定版 众所周知,ansible是很火的一个自动化部署工具,在ansible控制节点内,存放着当前环境服务的所有服务的配置信息,其中自然也包括一些敏感 ...

  7. 浏览器与服务端请求响应流程与HTTP协议

    浏览器与服务端请求响应流程图: 1.HTTP概要 1.1. 定义 HTTP(HyperText Transfer  Protocol,超文本传输协议)最早就是计算机与计算机之间沟通的一种标准协议,这种 ...

  8. 开发常用的 Android 函数库

    第三方函数库(译者注:包括第三方提供的 SDK,开源函数库)以惊人的方式助力着 Android 开发,借助这些其他开发人员辛勤工作的成果,我们开发起来更轻松和快捷.目前存在成千上万的函数库,如何选择正 ...

  9. logback.xml sql语句输出

    在使用springBoot框架之后,日志配置文件变成了logback.xml,输出sql语句的方法为: <!-- 打印sql语句 --> <logger name="com ...

  10. scala用ssh2连接Linux

    这个需要安装库: import ch.ethz.ssh2.{Connection, Session, StreamGobbler} 首先用 ip 和 post 创建连接: val conn: Conn ...