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实现微信小程序的支付功能,主要介绍了微信小程序内 ...
随机推荐
- js中的cookie
cookie就是一个存放数据的东西,存储量很小4kb,存放在客户端上和应用设备上. 应用场景 用户注册,用户登录,购物车. Chrome浏览器在计算机中存放cookie的位置 C:\Users\Adm ...
- 【RL-TCPnet网络教程】第29章 NTP网络时间协议基础知识
第29章 NTP网络时间协议基础知识 本章节为大家讲解NTP (Network Time Protocol,网络时间协议)和SNTP(简单网络时间协议,Simple Network Time ...
- Java高并发缓存架构,缓存雪崩、缓存穿透之谜
面试题 了解什么是 redis 的雪崩.穿透和击穿?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透? 面试官心理分析 其实这是问到缓存必问的,因为缓存雪崩和穿透,是 ...
- 微软跨平台ORM框架之EFCore
EFCore是微软推出的跨平台ORM框架,想较于EF6.X版本,更加轻量级.EFCore目前已经更新到2.x. 接下来用CodeFirst的方式来使用EFCore. 1.创建控制台程序 2.引入EFC ...
- [Swift]LeetCode384. 打乱数组 | Shuffle an Array
Shuffle a set of numbers without duplicates. Example: // Init an array with set 1, 2, and 3. int[] n ...
- [Swift]LeetCode620. 有趣的电影 | Not Boring Movies
SQL架构 Create table If Not Exists cinema (id ), description varchar(), rating , )) Truncate table cin ...
- python高级-迭代器(18)
一.什么是迭代器 迭代是访问集合元素的⼀种⽅式. 迭代器是⼀个可以记住遍历的位置的对象. 迭代器对象从集合的第⼀个元素开始访问,直到所有的元素被访问完结束. 迭代器只能往前不会后退 二.可迭代对象 直 ...
- 【Kafka专栏】-Kafka从初始到搭建到应用
一.前述 Kafka是一个分布式的消息队列系统(Message Queue). kafka集群有多个Broker服务器组成,每个类型的消息被定义为topic. 同一topic内部的消息按照一定的key ...
- SpringCloud(7)---网关概念、Zuul项目搭建
SpringCloud(7)---网关概念.Zuul项目搭建 一.网关概念 1.什么是路由网关 网关是系统的唯一对外的入口,介于客户端和服务器端之间的中间层,处理非业务功能 提供路由请求.鉴权.监控. ...
- Vuex的模块化、优点
前言:如果说我们的vuex的仓库代码量巨大,我们要不要采用就像后端与一样的分层,要不然一吨的代码放在main里,呵呵.所以我们要采用模块化! 看这篇文章的时候,一定要看看上一篇的vuex入门精讲:Vu ...