您的位置:时间博客>PHP>在Swoole环境下 ​Yansongda/Pay V3版本的使用

在Swoole环境下 ​Yansongda/Pay V3版本的使用

Swoole环境下支付相关SDK可选择的不多,由于之前有用过Yansongda/Pay v2版本,使用体验还是不错; 所以在新项目里面采用V3版本;

Yansongda/Pay V3版本内部相比V2版本有很多地方考虑的不够完善,比如微信下单接口失败了,都没有 prepay_id; 却还将错误的返回值用于下一步逻辑的入参 等~

一路踩坑终于调通,在这里记录详细使用,希望对后来的童鞋有所帮助;


完整配置文件示例:

'alipay' => [
    'default' => [
        // 必填-支付宝分配的 app_id
        'app_id' => '',
        // 必填-应用私钥 [商户平台复制的字符串]
        'app_secret_cert' => 'xxxx',
        // 必填-应用公钥证书 [商户平台下载的 appCertPublicKey_xxxx.crt文件]
        'app_public_cert_path' => 'appCertPublicKey_2016082500309964.crt',
        // 必填-支付宝公钥证书 [商户平台下载的 alipayCertPublicKey_RSA2.crt文件]
        'alipay_public_cert_path' => 'alipayCertPublicKey_RSA2.crt',
        // 必填-支付宝根证书 [商户平台下载的 alipayRootCert.crt文件]
        'alipay_root_cert_path' => 'alipayRootCert.crt',
        'return_url' => '',
        'notify_url' => '',
        // 选填-服务商模式下的服务商 id,当 mode 为 Pay::MODE_SERVICE 时使用该参数
        'service_provider_id' => '',
        // 选填-默认为正常模式。可选为: MODE_NORMAL, MODE_SANDBOX, MODE_SERVICE
        'mode' => Pay::MODE_NORMAL,
    ],
],
'wechat' => [
    'default' => [
        // 必填-商户号,服务商模式下为服务商商户号
        'mch_id' => '',
        // 必填-商户秘钥 [商户平台设置的 APIV2 密钥或 APIV3 密钥]
        'mch_secret_key' => '',
        // 必填-商户私钥 [商户平台下载的证书压缩包内的 apiclient_key.pem文件]
        'mch_secret_cert' => 'apiclient_key.pem',
        // 必填-商户公钥证书 [商户平台下载的证书压缩包内的 apiclient_cert.pem文件]
        'mch_public_cert_path' => 'apiclient_cert.pem',
        // 必填
        'notify_url' => '',
        // 选填-公众号 的 app_id
        'mp_app_id' => '',
        // 选填-小程序 的 app_id
        'mini_app_id' => '',
        // 选填-app 的 app_id
        'app_id' => '',
        // 选填-合单 app_id
        'combine_app_id' => '',
        // 选填-合单商户号
        'combine_mch_id' => '',
        // 选填-服务商模式下,子公众号 的 app_id
        'sub_mp_app_id' => '',
        // 选填-服务商模式下,子 app 的 app_id
        'sub_app_id' => '',
        // 选填-服务商模式下,子小程序 的 app_id
        'sub_mini_app_id' => '',
        // 选填-服务商模式下,子商户id
        'sub_mch_id' => '',
        // 选填-微信公钥证书路径, optional,强烈建议 php-fpm 模式下配置此参数
        'wechat_public_cert_path' => [
            '' => '',
        ],
        // 选填-默认为正常模式。可选为: MODE_NORMAL, MODE_SERVICE
        'mode' => Pay::MODE_NORMAL,
    ],
],
'http' => [
    'timeout' => 5.0,
    'connect_timeout' => 5.0,
    'verify' => false,
],
'logger' => [
    'enable' => true, //如果不需要日志这里设置成false
    'file' => './runtime/logs/pay.log', // 请注意权限
    'level' => 'info', // 建议生产环境等级调整为 info,开发环境为 debug
    'type' => 'single', // optional, 可选 daily, daily 时将按时间自动划分文件.
    'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
],


Yansongda/Pay V3 支付宝回调处理示例:

\Yansongda\Pay\Pay::config($this->paymentService->getPayParamConfig());
$data = \Yansongda\Pay\Pay::alipay()->callback(ApplicationContext::getContainer()->get(ServerRequestInterface::class));
if ($data['trade_status'] == 'TRADE_SUCCESS' || $data['trade_status'] == 'TRADE_FINISHED') {
    // 支付成功的业务逻辑处理
    // $this->paymentService->pay($data['out_trade_no'], 2, $data['trade_no']);
}

Yansongda/Pay V3 微信V3回调处理示例:

\Yansongda\Pay\Pay::config($this->paymentService->getPayParamConfig());
$data = \Yansongda\Pay\Pay::wechat()->callback(ApplicationContext::getContainer()->get(ServerRequestInterface::class));
$cipherText = $data['resource']['ciphertext'];
if ($data['event_type'] == 'TRANSACTION.SUCCESS' && $cipherText['trade_state'] == 'SUCCESS') {
    // 支付成功的业务逻辑处理
    // $this->paymentService->pay($cipherText['out_trade_no'], 3, $cipherText['transaction_id']);
}

重点: ApplicationContext::getContainer()->get(ServerRequestInterface::class)

官方文档里面接收回调相关的例子写的很笼统,一不注意就将陷入验签失败大坑

6afcdaa42abdac9436e08ae9f52c509d.png


关于公钥证书模式下的应用私钥/公钥获取:

7d3041bed77fdb2a04a26a2832c870b7.png

转载请注明本文标题和链接:《 在Swoole环境下 ​Yansongda/Pay V3版本的使用

相关推荐

网友评论 1

未登陆 表情
Ctrl+Enter快速提交
  1. #1

    你好站长,小小参谋网已经更换域名了,麻烦您有时间调整一下,谢谢原域名zzzx.org   新域名eejj.net祝老朋友您生活愉快,身体健康

    what123456 1年前 (2023-03-04) 回复