yansongda/pay实现支付宝PC网站支付的代码

知识技术 2022-05-01 18:46 1110
转载请务必注明: 来源:《建站管家》https://www.df81.com/news/333.html

1,支付宝实名认证的商家账号,签约电脑网站支付

2,登录蚂蚁金服开放平台,创建应用,添加签约产品(电脑网站支付,手机网站支付等)等待审核通过。





3,配置密钥和授权回调地址。授权回调地址就是你的notify方法的网址,注意前面要加http://

4,下载yansongda/pay支付组件通过composer命令

composer require yansongda/pay -vvv


5, laravel5.5的routes文件夹下的web.php加入

//支付宝支付处理路由
Route::get('alipay','AlipayController@Alipay');  // 发起支付请求
Route::any('notify','AlipayController@AliPayNotify'); //服务器异步通知页面路径
Route::any('return','AlipayController@AliPayReturn');  //页面跳转同步通知页面路径


6.在控制器里加入以下代码

<?php
namespace App\Http\Controllers;

use App\Http\Controllers;
use Illuminate\Http\Request;
//use Illuminate\Support\Facades\Log;
use Yansongda\Pay\Pay;
use Yansongda\Pay\Log;
class alipayController extends Controller{

    protected $config = [
        'app_id' => '',//你创建应用的APPID
        'notify_url' => '',//异步回调地址
        'return_url' => '',//同步回调地址
        'ali_public_key' => '',//是支付宝公钥,不是应用公钥,  公钥要写成一行,不要换行
        // 加密方式: **RSA2**
        'private_key' => '',//密钥,密钥要写成一行,不要换行
        'log' => [ // optional
            'file' => './logs/alipay.log',
            'level' => 'info', // 建议生产环境等级调整为 info,开发环境为 debug
            'type' => 'single', // optional, 可选 daily.
            'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
        ],
        'http' => [ // optional
            'timeout' => 5.0,
            'connect_timeout' => 5.0,
            // 更多配置项请参考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
        ],
        //'mode' => 'dev', // optional,设置此参数,将进入沙箱模式
    ];
    public function Alipay()
    {
        $order = [
            'out_trade_no' => time(),
            'total_amount' => '0.1',
            'subject' => 'test subject - 测试',
        ];

        $alipay = Pay::alipay($this->config)->web($order);

        return $alipay;// laravel 框架中请直接 `return $alipay`
    }

    public function AliPayReturn()
    {
        $data = Pay::alipay($this->config)->verify(); // 是的,验签就这么简单!

        // 订单号:$data->out_trade_no
        // 支付宝交易号:$data->trade_no
        // 订单总金额:$data->total_amount
    }

    public function AliPayNotify()
    {
        $alipay = Pay::alipay($this->config);

        try{
            $data = $alipay->verify(); // 是的,验签就这么简单!

            // 请自行对 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、其它业务逻辑情况

            Log::debug('Alipay notify', $data->all());
        } catch (\Exception $e) {
             //$e->getMessage();
        }

        return $alipay->success();// laravel 框架中请直接 `return $alipay->success()`
    }
}




将私钥文件里面的去除-----BEGIN RSA PRIVATE KEY-----与-----END RSA PRIVATE KEY-----,将剩下的内容合并为一行,需添加到配置文件中


7.以下是踩过的坑

如果你想更新yansongda/pay 支付组件,在本地composer下载后传上服务器的话一定要记得,把vendor文件夹一并传上服务器替换调以前的vendor文件夹,不然会报错 类找不到,因为你在本地composer更新的话,vendor文件夹下的composer文件夹也会发生变化,为以防万一应把vendor文件夹一并更新


如果遇到下面这个错误就是你没有屏蔽下面的代码,导致进入沙箱模式

 'mode' => 'dev', // optional,设置此参数,将进入沙箱模式


沙箱模式的支付宝网关 https://openapi.alipaydev.com/gateway.do

线上应用的支付宝网关 https://openapi.alipay.com/gateway.do



3) 如果出现以下的错误,是因为在控制器里的公钥或私钥不正确 注意公钥指的是支付宝公钥不是应用公钥,


点赞 (0)

收藏 (0)

本站部分信息来源网络,如有侵权,请联系QQ:1062129401删除。

上一篇: 《建站管家》二次开发文档

下一篇: 支付宝手机网站支付实例代码

请先登录后,再发表评论 ~ ~
发表评论
发表评论
发表帖子
广告位招租( ¥5 / 天 )
点击咨询
相关帖子

如果要判断文件是否存在,用函数 is_file(),如果要判断目录是否存在,用函数 is_dir()
用宝塔安装TP程序后,网站前台可以访问,后台无法访问,不是程序问题,而是web服务器环境配置问题(PHP配置),出现这种问题,一般是windows主机安装宝塔造成的,linux安装宝塔不会出现此错误
广告位招租( ¥3 / 天 )
点击咨询
广告位招租( ¥2 / 天 )
点击咨询
广告位招租( ¥1 / 天 )
点击咨询
最新帖子

小朋友,你爸爸是谁啊?这很单纯的,就像我们碰到别人会问:你吃过饭了吗?类似;许多人初次相识,经常会问:你是做什么的啊?你做什么,好像决定你收入的高低,你,资产的范围
1、升级框架到ThinkPHP8.0.3【要求PHP8.1+环境,推荐PHP8.1】 2、启用/禁用调试模式等小细节改进
后台点击生成站点地图 一直转圈圈没有反应,
在线客服