十、Laravel使用支付宝支付接口

看官方文档经过各种必要操作直接上手,下载demo和sdk,laravel扩展包很多,
推荐OmniPay-laravel,星星数也很多,但这里我们用官方原生sdk,这是是demo下载地址,下载后运行index.php,发现有挺多功能,,还有sdk下载地址,下载好了后我们开始动手。
1、在app/新建libs文件夹,将SDK包放在该目录下(我把SDK和Demo包都一起)
在这里插入图片描述
2、在composer.json文件,添加如下配置:

 "autoload": {  
        "classmap": [  
            "database",  
            "app/libs/alipay" //这里是自定义包的文件位置,我将我项目中的该SDK包命名为alipay 
        ],  
        "psr-4": {  
            "App\\": "app/"  
        }  
    },  

3、执行以下命令

composer dump-autoload     //当在包中加入新的类,需要更新autoloader  

4、设置/引入命名空间
AlipayTradeWapPayContentBuilder.php和AlipayTradeService.php设置命名空间

namespace App\libs\alipay\wappay\buildermodel;
namespace App\libs\alipay\wappay\service;

对alipay/aop/request/AlipayTradeWapPayRequest.php和alipay/aop/AopClient.php设置命名空间,我设置的是:

namespace App\libs\alipay\aop\request;
namespace App\libs\alipay\aop;

在需要用到的服务(AlipayTradeService.php)中引入上面两个命名空间:

use App\libs\alipay\aop\request\AlipayTradeWapPayRequest;
use App\libs\alipay\aop\AopClient;

将AlipayTradeService.php中的下面代码注释:

// require_once dirname ( __FILE__ ).DIRECTORY_SEPARATOR.'./../../AopSdk.php';
// require dirname ( __FILE__ ).DIRECTORY_SEPARATOR.'./../../config.php';

5、在laravel项目目录下的config目录新建一个alipay.php

return [

            //应用ID,您的APPID。
        'app_id' => "",

        //商户私钥,您的原始格式RSA私钥
        'merchant_private_key' => "",
        
        //异步通知地址
        'notify_url' => "",
        //http://工程公网访问地址/alipay.trade.wap.pay-PHP-UTF-8/notify_url.php

        //同步跳转
        'return_url' => "",
        //http://mitsein.com/alipay.trade.wap.pay-PHP-UTF-8/return_url.php
        // jk.mrwangqi.com

        //编码格式
        'charset' => "UTF-8",

        //签名方式
        'sign_type'=>"RSA2",

        //支付宝网关
        'gatewayUrl' => "https://openapi.alipay.com/gateway.do",

        //支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
        'alipay_public_key' => "",
];

6、定义接口

<?php
/**
 * Created by PhpStorm.
 * User: LXD
 * Date: 2020/2/29
 * Time: 22:43
 */

namespace App\libs\alipay;
require ('AopSdk.php');
use App\libs\alipay\wappay\buildermodel\AlipayTradeWapPayContentBuilder;
use App\libs\alipay\wappay\service\AlipayTradeService;
class alipay
{
    public static function alipays($data)
    {

        if (!$data)
        {
            exit('param is numm');
        }
        $out_trade_no = '111';

        //订单名称,必填
        $subject = $data['order_name'];

        //付款金额,必填
        $total_amount = $data['total_num'];

        //商品描述,可空
        $body = $data['body'];

        //超时时间
        $timeout_express="1m";

        $payRequestBuilder = new AlipayTradeWapPayContentBuilder();
        $payRequestBuilder->setBody($body);
        $payRequestBuilder->setSubject($subject);
        $payRequestBuilder->setOutTradeNo($out_trade_no);
        $payRequestBuilder->setTotalAmount($total_amount);
        $payRequestBuilder->setTimeExpress($timeout_express);

        $config = config('alipay');
        $payResponse = new AlipayTradeService($config);
        $result=$payResponse->wapPay($payRequestBuilder,$config['return_url'],$config['notify_url']);

        return ;
    }
}

7、要注意的一点是同步路由是GET形式调用,而异步路由是POST形式调用,在调用支付接口的时候会出现CSRF错误,现在最简单的方法是利用laravel的中间件避免CSRF,在app/Http/Middleware/VerifyCsrfToken.php中增加路由 protected

$except = [
        //
        'alipay/pay',
        'alipay/return',
        'alipay/notify'
    ];

修改冲突

Cannot redeclare Encrypt() (previously declared in .../vendor/laravel/lumen-framework/src/helpers.php:126)
//或:
Cannot redeclare Decrypt() (previously declared in .../vendor/laravel/lumen-framework/src/helpers.php:126)

这是因为Laravel 5使用Alipay SDK时,Laravel内带的加密解密函数Encrypt()/Decrypt()函数和Alipay SDK中的加密解密函数Encrypt()/Decrypt()函数命名冲突

解决方法:只需修改Alipay SDK中定义的函数名称,修改引用的函数名称。

修改步骤:

在Alipay SDK中,一共有需要修改三个文件的内容:

aop/AopEncrypt.php
aop/AopClient.php
lotusphp_runtime/Cookie/Cookie.php
在文件中查找encrypt/decrypt替换为alipayEncrypt/alipayDecrypt即可。
后续出现其他问题百度可以解决
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,以下是一个使用 Laravel 框架编写接口的示例: 1. 首先,在命令行中使用 composer 创建一个新的 Laravel 项目: ``` composer create-project --prefer-dist laravel/laravel your-project-name ``` 2. 创建一个控制器来处理接口请求。在命令行中运行以下命令: ``` php artisan make:controller ApiController ``` 这将在 app/Http/Controllers 目录下创建一个名为 ApiController 的控制器。 3. 在 ApiController 中添加方法来处理接口请求。例如,以下是一个返回所有用户信息的方法: ```php public function getAllUsers() { $users = User::all(); return response()->json($users); } ``` 这个方法将使用 Eloquent ORM 从数据库中获取所有用户,并将其转换为 JSON 格式返回给客户端。 4. 在 routes/api.php 文件中定义路由来调用 ApiController 中的方法。例如,以下是一个调用 getAllUsers 方法的路由: ```php Route::get('/users', 'ApiController@getAllUsers'); ``` 这将在应用程序的 /api/users 路径上创建一个 GET 请求,并将其发送到 ApiController 的 getAllUsers 方法。 5. 运行应用程序并测试接口。在命令行中运行以下命令来启动 Laravel 开发服务器: ``` php artisan serve ``` 现在,您可以使用任何 HTTP 客户端发送请求来测试您的接口。例如,您可以使用 cURL 命令来获取所有用户信息: ``` curl http://localhost:8000/api/users ``` 这应该返回一个包含所有用户信息的 JSON 对象。 希望这个示例可以帮助你开始编写 Laravel 接口

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值