laravel5集成支付宝alipay扫码支付流程(Laravel 支付解决方案)
首先我们来探讨如何在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 支付解决方案)的更多相关文章
- 【支付宝支付】扫码付和app支付,回调验证签名失败问题
在检查了参数排序,编码解码,文件编码等问题后,发现还是签名失败,最后找出原因: 扫码付和app支付采用的支付宝公钥不一样 Pid和公钥管理里面: 开放平台密钥界面和开放平台应用界面的密钥应该一 ...
- python支付宝页面扫码支付
一.介绍 基于网上一个支付宝pay.py封装了支付宝API的文件进行的,以下代码只支持网页扫码支付,手机端会提示调用支付宝支付 #pay文件代码 from datetime import dateti ...
- 微信支付v3开发(5) 扫码并输入金额支付
关键字:微信支付 微信支付v3 动态native支付 统一支付 Native支付 prepay_id 作者:方倍工作室 本文介绍微信支付下的扫描二维码并输入自定义金额的支付的开发过程. 注意 微信支付 ...
- android蜂巢效果、环形菜单、Kotlin影视应用、简约时钟、查看导出App、支付宝AR扫码效果等源码
Android精选源码 一个蜂巢布局管理器,外观帅气外,动画效果也是很赞 一个基础 UI 框架项目,实现不同布局格式的混排 仿建行app效果,一个环形菜单的布局管理器源码 基于组件化实现的一款用Kot ...
- 支付宝支付之扫码支付(电脑网站支付)、H5支付(手机网站支付)相关业务流程分析总结
前言 在上一篇文章<微信支付之扫码支付.公众号支付.H5支付.小程序支付相关业务流程分析总结>中,分析和总结了微信支付相关支付类型的业务流程,这里作为与微信支付平起平坐不相伯仲的支付宝支付 ...
- ASP.NET Core 2.0 支付宝当面付之扫码支付
前言 自从微软更换了CEO以后,微软的战略方向有了相当大的变化,不再是那么封闭,开源了许多东西,拥抱开源社区,.NET实现跨平台,收购xamarin并免费提供给开发者等等.我本人是很喜欢.net的,并 ...
- Spring使用支付宝扫码支付
前一段一直在研究支付宝的扫码支付,不得不说,支付宝的文档写的真是一个烂(起码在下刚开始看的时候是mengbi的).文档上面的示例和demo里面的示例长的完全不一样.往往文档上面的例子很简单,而demo ...
- .NET Core2.0 环境下MVC模式的支付宝扫码支付接口-沙箱环境开发测试
所有配置以及相关信息均可以从PC支付中获取 使用的生成二维码的组件名为QRCoder,该组件引用了一个第三方实现的System.Drawing类库,和支付宝官网类似 当面付SDK为Alipay.Aop ...
- Win10环境前后端分离项目基于Vue.js+Django+Python3实现微信(wechat)扫码支付流程(2021年最新攻略)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_182 之前的一篇文章:mpvue1.0+python3.7+Django2.0.4实现微信小程序的支付功能,主要介绍了微信小程序内 ...
随机推荐
- mui项目实时更新
var wgtVer=null; function plusReady(){ // ...... // 获取本地应用资源版本号 plus.runtime.getProperty(plus.runtim ...
- Delphi 开发手机 App 与其他工具之间的比较分析
写在前头 关于各种手机App开发的工具,从2010年前后到现在已经在很多不同的场合介绍过,在元智大学.中台科技大学.德霖科技大学等不同学校的讲座.课程当中,都有类似的主题,所以对我来说,这个主题属于驾 ...
- Python学到什么程度就可以去找工作?掌握这4点足够了!
大家在学习Python的时候,有人会问“Python要学到什么程度才能出去找工作”,对于在Python培训机构学习Python的同学来说这都不是问题,因为按照Python课程大纲来,一般都不会有什么问 ...
- MySQL乐观锁为什么可以防止并发
问题引入 本文介绍的是最常用的也是mysql默认的innoDB引擎 Read committed隔离级别下事物的并发.这种情况下的事物特点是 读:在一个事物里面的select语句 不会受到其他事物(不 ...
- Node.js(day4)
一.一些小问题 1.文件操作路径和模块读取路径的问题 我们使用fs核心模块系统进行文件操作时一般这样书写路径 fs.readFile('./views/index.html');//读取views目录 ...
- [Swift]LeetCode67. 二进制求和 | Add Binary
Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...
- [Swift]LeetCode261.图验证树 $ Graph Valid Tree
Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), ...
- java中 try catch finally和return联合使用时,代码执行顺序的小细节
代码1测试 public static void main(String[] args) { aa(); } static int aa() { try { int a=4/0; } catch (E ...
- ASP.NET Core WebApi AspNetCoreRateLimit 限流中间件学习
AspNetCoreRateLimit介绍: AspNetCoreRateLimit是ASP.NET核心速率限制框架,能够对WebApi,Mvc中控制限流,AspNetCoreRateLimit包包含 ...
- 带着萌新看springboot源码05
上一节走了一遍从浏览器发出请求到得到向页面的流程,基本的功能是已经实现了.但是现在啊,我想自定义一个拦截器(拦截器可以做用户登录验证,如果登录了,就让你通过,如果没有登录,就重定向登录页面),这里就不 ...