本文目录

  • 一、支付功能
    • 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架构的,而homesteadngrok估计不是,所以我们去官网下载ngroklinux

下载完解压后将虚拟机上这个路径/usr/local/bin/ngrokngrok替换,可以使用工具FileZilla
替换之后,接着运行命令share shopprojectapi.com ,可以看到:

接着访问它给我们的域名,可以看到外网已经可以访问到我们的内网项目了:


1.5 创建支付完成回调路由

需要注意的是这个回调路由是不需要登陆的,所以放在需要登陆中间件的外面。

    /*** 回调*/ // 支付宝支付成功之后的回调$api->any('pay/notify/aliyun', [PayController::class, 'notifyAliyun']);


1.6 测试效果

支付接口

生成链接,我们将链接通过该网址转为二维码,下载沙箱测试的支付宝版本

然后扫描生成的二维码,然后点击支付,支付成功后,我们查看订单是否有数据插入:

可以看到我们这条订单就是状态2了,并且也有支付宝的订单号。至此我们支付宝支付的功能已经相当完善了。
微信支付的话也是一样的申请商户号,配置方法逻辑和支付宝类似。

在学习的php的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。

laravel支付宝支付相关推荐

  1. laravel框架 APP 支付宝支付

    首先去 支付宝 下载sdk 我下载的SDK放在第三方vendor中如下: 放入地址以后给alipay权限: sudo chmod -R 777 alipay 放入vendor以后在composer.j ...

  2. 阿里支付,支付宝支付, laravel5, laravel,sdk

    本人封装的支付宝支付sdk https://github.com/hyperbolaa/Alipay composer require hyperbolaa/alipay dev-master

  3. TP5 实现微信支付和支付宝支付

    1.微信支付 1.1.安装依赖包 我这里使用 EasyWeChat 实现微信支付,另外我附上之前我封装的微信类. 详细操作里面写的比较清楚,请先看这个:https://www.jianshu.com/ ...

  4. 支付宝支付同步回调url中携带参数的两种方法

    我的个人博客:逐步前行STEP 1. 如果要传递的参数是my_data,可以先将该参数添加到回调的url上: $return_url = "http://abcdefg.com/return ...

  5. PHP对接支付宝支付APP端

    1.登录支付宝开放平台--控制台--新建自研应用--网页&移动应用 1.1.添加能力--APP支付,等待审核 1.2.设置接口加签方式,使用公私钥方式,不是证书 2.下载SDK,看文档 lar ...

  6. laravel 支付宝流程

    1. 引入支付库 yansongda/pay 这个库封装了支付宝和微信支付的接口,通过这个库我们就不需要去关注不同支付平台的接口差异,使用相同的方法.参数来完成支付功能,节省开发时间. 首先通过 co ...

  7. 介绍一个支付组件riverslei/payment及本地如何进行支付宝支付测试

    payment是一款集成了阿里支付.微信支付的组件.它对php的版本要求很低,大于等于5.6. 但是个人认为其文档做的不很完善,特别是异步通知并没有文档,所以有必要将一些细节分享给大家.下面介绍的是l ...

  8. laravel5.5实现支付宝支付

    起因 前段时间因为项目中需要实现支付宝手机网站支付功能,所以写下这篇文章以作记录,不足之处,欢迎指教. 后端框架:Laravel 5.5 业务功能 适用于商家在移动端网页应用中集成支付宝支付功能.商家 ...

  9. AndroidSDK结合SpringBoot实现支付宝支付功能

    开发者注册: 1. 创建应用,获取AppID:开发者可在沙箱中完成. 沙箱应用网址:https://openhome.alipay.com/platform/appDaily.htm 2. 在支付宝助 ...

最新文章

  1. 【教程】【FLEX】#004 反射机制
  2. php随机数、时间、字符串函数,正则,数组函数
  3. 超详细解读:神经语义解析的结构化表示学习 | 附代码分析
  4. Unix传奇(下篇)
  5. 使用ABAP和JavaScript代码生成PDF文件的几种方式
  6. localhost 已拒绝连接_【Python】MongoDB数据库的连接和操作
  7. Python flask 特殊装饰器 @app.before_request 和 @app.after_request 以及@app.errorhandler介绍
  8. 二本院校学生的命运,是中国最基本的底色
  9. java hook全局钩子,牛逼骚操作:Java 虚拟机关闭钩子(Shutdown Hook)!
  10. 三星5nm产品开发进度出问题,高通紧急向台积电求援
  11. 2008服务器操作系统安装,Windows server2008服务器安装图文教程
  12. 「 博客迁移声明 」迫于想折腾个人博客
  13. php 量 高并发 nosql,nosql - 高并发下Apache+mongodb的php驱动不稳定
  14. python循环5次_Python入门五:循环
  15. 网页怎么退出全屏,网页退出全屏有哪些快捷键?
  16. 借助Granimjs制作绚丽的流体动画
  17. 保护个人信息,才能享受大数据的时代成果
  18. DNS的工作原理及解析
  19. 【微服】单体、SOA、微服务
  20. Opencv之cvtColor

热门文章

  1. MKVToolNix 修改电影默认音轨
  2. 网易2021暑期实习 游戏开发 一面
  3. 2014 junior T1 珠心算测试 题解
  4. ERR_UNSAFE_PORT 非安全端口
  5. 黑*头条_第12章_ 热点文章处理
  6. 反掌娱乐创始人姜越 获第五届博鳌企业论坛 “行业领军人物”
  7. 【每日早报】2020/02/15
  8. 用QQ邮箱注册到MSN live 账号
  9. tensorflow with求导_tensorflow求导和梯度计算实例
  10. 学历教育如何做快手广告投放?快手广告投放的展现量介绍