laravel支付宝支付
本文目录
- 一、支付功能
- 1.1 支付宝支付安装配置
- 1.2 创建支付控制器
- 1.3 创建支付路由
- 1.4 内网穿透
- 1.5 创建支付完成回调路由
- 1.6 测试效果
一、支付功能
1.1 支付宝支付安装配置
然后支付宝扫码登陆。因为个人号是没法去申请支付密钥,所以我们使用它的沙箱环境。
沙箱环境下我们这边都可以随便充值金额。
同样的在laravel
中开发可以使用第三方包,来加快我们开发的进度,以及非常简便的使用。
运行命令composer require yansongda/laravel-pay
:
运行命令php artisan vendor:publish --provider="Yansongda\LaravelPay\PayServiceProvider" --tag=laravel-pay
配置文件:
接着按照文档。生成公钥证书,
下载安装文档指定生成即可。
将下载的证书放到code
文件夹下:
我是将3个证书文件放到自己新建文件夹cert
下。
接着修改配置:
'alipay' => ['default' => [// 支付宝分配的 app_id 沙箱测试就有'app_id' => '2021000118617661',// 应用私钥'app_secret_cert' => '', // 你申请的证书密钥// 应用公钥证书 路径'app_public_cert_path' => '/home/vagrant/code/cert/appCertPublicKey_2021000118617661.crt',// 支付宝公钥证书 路径'alipay_public_cert_path' => '/home/vagrant/code/cert/alipayCertPublicKey_RSA2.crt',// 支付宝根证书 路径 'alipay_root_cert_path' => '/home/vagrant/code/cert/alipayRootCert.crt',// 支付成功后同步通知地址'return_url' => '',// 异步通知地址'notify_url' => 'http://8bee-211-97-129-32.ngrok.io/api/pay/notify/aliyun', // 你的支付完成回调地址处理路由,这边采用了内网穿透的方式,在本章第4小节有说到配置'mode' => Pay::MODE_SANDBOX, // 沙箱环境,由于我们没有商户号,所以采用沙箱环境配置// 'mode' => Pay::MODE_NORMAL, // 正式环境],],
1.2 创建支付控制器
运行命令php artisan make:controller Web/PayController
写入支付时的方法,以及支付完成时的回调方法:
<?phpnamespace App\Http\Controllers\Web;use App\Http\Controllers\Controller;
use App\Models\Order;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Yansongda\LaravelPay\Facades\Pay;class PayController extends Controller
{// 支付public function pay(Request $request, Order $order){$request->validate(['type' => 'required|in:aliyun,wechat',], ['type.required' => '支付类型不能为空','type.in' => '支付类型只能是支付宝或者微信支付']);// 如果订单状态不是1,直接返回if ($order->status != 1) {return $this->response->errorBadRequest('订单状态异常,请重新下单!');}if ($request->input('type') == 'aliyun') {$order = ['out_trade_no' => $order->order_no,'total_amount' => $order->amount/100,'subject' => $order->goods()->first()->title.' 等 '.$order->goods()->count() .'件商品',];return Pay::alipay()->scan($order);}if ($request->input('type') == 'wechat') {}}/*** 支付宝支付成功之后的回调*/public function notifyAliyun(Request $request) {$alipay = Pay::alipay();try{$data = $alipay->callback(); // 是的,验签就这么简单!// 请自行对 trade_status 进行判断及其它逻辑进行判断,在支付宝的业务通知中,只有交易通知状态为 TRADE_SUCCESS 或 TRADE_FINISHED 时,支付宝才会认定为买家付款成功。// 1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号;// 2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额);// 3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email);// 4、验证app_id是否为该商户本身。// 5、其它业务逻辑情况// 判断支付状态 成功的状态if ($data->trade_status == 'TRADE_SUCCESS' || $data->trade_status == 'TRADE_FINISHED') {// 查询订单$order = Order::where('order_no', $data->out_trade_no)->first();// 更新订单数据 (简单的写,如果要完整的要按照以上5点去写)$order->update(['status' => 2, // 支付完成'pay_time' => $data->gmt_payment, // 支付的时间'pay_type' => '支付宝', // 支付的类型'trade_no' => $data->trade_no, // 支付宝的单号 在写的退款的时候会用到]);}// Log::info($data); 打印log知道回调都给了什么字段 Log::debug('Alipay notify', $data->all()); // 打印log知道回调都给了什么字段 } catch (\Exception $e) {// $e->getMessage();}return $alipay->success();}
}
我们在支付回调时候插入的数据,所以Order.php
需要增加可允许批量赋值的字段:
1.3 创建支付路由
/*** 支付*/$api->get('orders/{order}/pay', [PayController::class, 'pay']);
1.4 内网穿透
由于我们使用的是本地的域名,外网是访问不到,这个支付宝的回调函数它就请求不到,所以我们这边需要配置内网穿透:
运行命令share shopprojectapi.com
(shopprojectapi.com是你自己配置的域名
)
会出现报错:-bash: /usr/local/bin/ngrok: cannot execute binary file: Exec format error
原因很简单,却弄了几个小时,是因为我的电脑是m1 arm64
架构的,而homestead
中ngrok
估计不是,所以我们去官网下载ngrok
的linux
下载完解压后将虚拟机上这个路径/usr/local/bin/ngrok
的ngrok
替换,可以使用工具FileZilla
。
替换之后,接着运行命令share shopprojectapi.com
,可以看到:
接着访问它给我们的域名,可以看到外网已经可以访问到我们的内网项目了:
1.5 创建支付完成回调路由
需要注意的是这个回调路由是不需要登陆的,所以放在需要登陆中间件的外面。
/*** 回调*/ // 支付宝支付成功之后的回调$api->any('pay/notify/aliyun', [PayController::class, 'notifyAliyun']);
1.6 测试效果
支付接口
生成链接,我们将链接通过该网址转为二维码,下载沙箱测试的支付宝版本
然后扫描生成的二维码,然后点击支付,支付成功后,我们查看订单是否有数据插入:
可以看到我们这条订单就是状态2了,并且也有支付宝的订单号。至此我们支付宝支付的功能已经相当完善了。
微信支付的话也是一样的申请商户号,配置方法逻辑和支付宝类似。
在学习的php的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。
laravel支付宝支付相关推荐
- laravel框架 APP 支付宝支付
首先去 支付宝 下载sdk 我下载的SDK放在第三方vendor中如下: 放入地址以后给alipay权限: sudo chmod -R 777 alipay 放入vendor以后在composer.j ...
- 阿里支付,支付宝支付, laravel5, laravel,sdk
本人封装的支付宝支付sdk https://github.com/hyperbolaa/Alipay composer require hyperbolaa/alipay dev-master
- TP5 实现微信支付和支付宝支付
1.微信支付 1.1.安装依赖包 我这里使用 EasyWeChat 实现微信支付,另外我附上之前我封装的微信类. 详细操作里面写的比较清楚,请先看这个:https://www.jianshu.com/ ...
- 支付宝支付同步回调url中携带参数的两种方法
我的个人博客:逐步前行STEP 1. 如果要传递的参数是my_data,可以先将该参数添加到回调的url上: $return_url = "http://abcdefg.com/return ...
- PHP对接支付宝支付APP端
1.登录支付宝开放平台--控制台--新建自研应用--网页&移动应用 1.1.添加能力--APP支付,等待审核 1.2.设置接口加签方式,使用公私钥方式,不是证书 2.下载SDK,看文档 lar ...
- laravel 支付宝流程
1. 引入支付库 yansongda/pay 这个库封装了支付宝和微信支付的接口,通过这个库我们就不需要去关注不同支付平台的接口差异,使用相同的方法.参数来完成支付功能,节省开发时间. 首先通过 co ...
- 介绍一个支付组件riverslei/payment及本地如何进行支付宝支付测试
payment是一款集成了阿里支付.微信支付的组件.它对php的版本要求很低,大于等于5.6. 但是个人认为其文档做的不很完善,特别是异步通知并没有文档,所以有必要将一些细节分享给大家.下面介绍的是l ...
- laravel5.5实现支付宝支付
起因 前段时间因为项目中需要实现支付宝手机网站支付功能,所以写下这篇文章以作记录,不足之处,欢迎指教. 后端框架:Laravel 5.5 业务功能 适用于商家在移动端网页应用中集成支付宝支付功能.商家 ...
- AndroidSDK结合SpringBoot实现支付宝支付功能
开发者注册: 1. 创建应用,获取AppID:开发者可在沙箱中完成. 沙箱应用网址:https://openhome.alipay.com/platform/appDaily.htm 2. 在支付宝助 ...
最新文章
- 【教程】【FLEX】#004 反射机制
- php随机数、时间、字符串函数,正则,数组函数
- 超详细解读:神经语义解析的结构化表示学习 | 附代码分析
- Unix传奇(下篇)
- 使用ABAP和JavaScript代码生成PDF文件的几种方式
- localhost 已拒绝连接_【Python】MongoDB数据库的连接和操作
- Python flask 特殊装饰器 @app.before_request 和 @app.after_request 以及@app.errorhandler介绍
- 二本院校学生的命运,是中国最基本的底色
- java hook全局钩子,牛逼骚操作:Java 虚拟机关闭钩子(Shutdown Hook)!
- 三星5nm产品开发进度出问题,高通紧急向台积电求援
- 2008服务器操作系统安装,Windows server2008服务器安装图文教程
- 「 博客迁移声明 」迫于想折腾个人博客
- php 量 高并发 nosql,nosql - 高并发下Apache+mongodb的php驱动不稳定
- python循环5次_Python入门五:循环
- 网页怎么退出全屏,网页退出全屏有哪些快捷键?
- 借助Granimjs制作绚丽的流体动画
- 保护个人信息,才能享受大数据的时代成果
- DNS的工作原理及解析
- 【微服】单体、SOA、微服务
- Opencv之cvtColor
热门文章
- MKVToolNix 修改电影默认音轨
- 网易2021暑期实习 游戏开发 一面
- 2014 junior T1 珠心算测试 题解
- ERR_UNSAFE_PORT 非安全端口
- 黑*头条_第12章_ 热点文章处理
- 反掌娱乐创始人姜越 获第五届博鳌企业论坛 “行业领军人物”
- 【每日早报】2020/02/15
- 用QQ邮箱注册到MSN live 账号
- tensorflow with求导_tensorflow求导和梯度计算实例
- 学历教育如何做快手广告投放?快手广告投放的展现量介绍