的支付沙箱配置完成后报Missing Alipay Config -- [app_public_cert_path]或者Factory\HttpFoundationFactory’ Not Found的解决方案

由于自己用的环境不是教程约定的 Homestead 环境,安装扩展包时提示部分包不支持安装 2.10.2 版本,所以直接安装了最新 3.2 版本
以下是本人出现的问题以及解决方法

1、Missing Alipay Config – [app_public_cert_path]#

由于版本问题,在 3.2 的最新版本需要引入证书路径
由于版本问题,在 3.2 的最新版本需要引入证书路径
由于版本问题,在 3.2 的最新版本需要引入证书路径
解决方法:在 Config 下创建 Pay 文件夹,将证书放入文件夹后,修改配置文件
‘app_public_cert_path’ => ‘/Pay/appPublicCert.crt’
其他的证书也是这样修改,仅供参考,每个项目有自己的规划,按自己的需求修改路径

3.2 版本配置如下

代码已被折叠,点此展开

config 设置完成后仍然报错,开始在插件里找错误原因

Yansongda\pay\src\Functions.php 文件

if (!function_exists('get_alipay_config')) {
    /**
     * @throws \Yansongda\Pay\Exception\ContainerException
     * @throws \Yansongda\Pay\Exception\ServiceNotFoundException
     */
    function get_alipay_config(array $params = []): Config
    {
        $alipay = Pay::get(ConfigInterface::class)->get('alipay');
        $config = $params['_config'] ?? 'default';
        return new Config($alipay[$config] ?? []);
    }
}

此处获取不到配置信息,判断是 Laravel 出现的传参问题,修改了

App\Providers\AppServiceProvider.php 传参方式

        //往服务容器中注入一个名为alipay的单例对象
        $this->app->singleton('alipay',function(){
            //此处$config = config('pay.alipay');
            $config = config('pay');
            //判断当前项目运行环境是否为线上环境
            if(app()->environment() !== 'production'){
                //修改此处$config['mode'] = 'dev';
                $config['alipay']['default']['mode']  = 1;
                $config['logger']['level'] = Logger::DEBUG;
            }else{
                $config['logger']['level'] = Logger::WARNING;
            }
            //调用Yansongda\Pay来创建一个支付宝支付对象
            return Pay::alipay($config);
        });

2、Class ‘Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory’ Not Found#

解决方案:composer require symfony/psr-http-message-bridge

3、模型数据#

./vendor/yansongda/pay/src/Provider/Alipay.php 文件介绍了三种模型对应的 URL

    public const URL = [
        Pay::MODE_NORMAL => 'https://openapi.alipay.com/gateway.do?charset=utf-8',
        Pay::MODE_SANDBOX => 'https://openapi.alipaydev.com/gateway.do?charset=utf-8',
        Pay::MODE_SERVICE => 'https://openapi.alipay.com/gateway.do?charset=utf-8',
    ];

./vendor/yansongda/pay/src/Pay.php 介绍了每个模型对应的类型

// 正常模式.
public  const MODE_NORMAL = 0;
//沙箱模式.
public  const MODE_SANDBOX = 1;
// 服务商模式.
public  const MODE_SERVICE = 2;

搞定!

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 15

我也遇到你这个问题了,按照你说的这个报错解决了,不过又有个新的问题出现 Class "Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory" not found

2年前 评论
heaker (作者) 2年前
zhuifeng9102 (楼主) 2年前

我的改完还是报 Yansongda\Pay\Exception\InvalidConfigException: Missing Alipay Config -- [app_public_cert_path] in file 这个错误啊

2年前 评论
zhuifeng9102 (楼主) 2年前
xianYu_010 (作者) 2年前

'app_public_cert_path' => config_path('/Pay/appPublicCert.crt'),

2年前 评论

按照你的操作,报以下错误: 调试错误,请回到请求来源地,重新发起请求。 错误代码 invalid-app-id 错误原因:无效的 AppID 参数

请问楼主是用的 沙箱应用么 'mode' => Pay::MODE_SANDBOX,

1年前 评论
DogLoML 1年前
zhuifeng9102 (楼主) 1年前
strong_man_go_go-come_back_no_no (作者) 1年前

是的,我直接用的最新版 改的地址

1年前 评论

file

我配置了证书路径

file

这里 config 打印出来参数也正确, 但是就是报错:

Missing Alipay Config -- [app_public_cert_path]

使用的版本是 3.5, 大佬帮忙看看是什么问题

1年前 评论
zhuifeng9102 (楼主) 1年前
maonini (作者) 1年前