Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Pay Laravel Package

yansongda/pay

A popular PHP payment library for Laravel and other frameworks, integrating Alipay and WeChat Pay with a clean API. Supports common payment flows, refunds, queries, callbacks/notifications, and flexible configuration for multi-app and sandbox use.

View on GitHub
Deep Wiki
Context7
v3.8.0-beta.8

[v3.8.0-beta.8] - 2026-10-13

Added

  • Apple(苹果支付)Provider 全新接入(#597):

    • Pay::apple() 快捷入口:payToken(支付令牌本地验签解密:PKCS#7 证书链 + ECDH + AES-256-GCM,零新增依赖)、merchantSession(Apple Pay 网页商户验证代理,TLS 双向认证经 _http 透传)、query(_action:transaction/history/subscriptions)、refund(退款历史查询——Apple 无服务端主动退款)、callback(App Store Server Notifications V2 JWS x5c 验签 + 内嵌交易 JWS 二级解码);cancel/close 无对等接口,调用时抛出异常
    • App Store Server API 认证:App Store Connect ES256 JWT(issuer_id/bundle_id/api_key_id/api_private_key)
    • 内置 Apple 公开证书(src/Certificate/AppleRootCA-G3.pem、AppleAAICAG3.pem),未配置时默认生效,支持 apple_root_ca/apple_intermediate_ca 覆盖
    • 回调验签含归属校验(bundleId/environment 与配置匹配,对齐 Apple 官方库)与证书有效期检查;merchantSession 的 initiative_context 必填校验;订阅查询 _status 白名单(SubscriptionStatus 枚举或 1-5 的整数,src/Enum/Apple/)
    • RSA_v1 令牌解密需 PHP ≥ 8.5(OAEP-SHA256 参数限制;EC_v1 无版本要求)
    • 异常码:PARAMS_APPLE_URL_MISSING(9234)、PARAMS_APPLE_TOKEN_INVALID(9235)、CONFIG_APPLE_INVALID(9413)、DECRYPT_APPLE_FAILED(9612)
    • 文档:web/docs/v3/apple/ 提供支付/查询/退款/回调/应答/插件页面,侧边栏已挂载
    • 内部结构:AppleTrait 仅保留门面(URL/ES256 JWT/密码学入口),实现下沉至 src/Crypto/Apple/(Cryptor 通用工具 / TokenVerifier 令牌验签解密 / JwsVerifier JWS 验签),对外调用方式不变
  • 枚举化(src/Enum/,沿用 Apple SubscriptionStatus 风格;全部为新增能力,默认行为与报文逐字节不变):

    • 新增 PayMode(配置项 mode):'mode' => PayMode::SANDBOX,同时兼容历史 int 写法(0/1/2);$config->getMode() 返回 PayMode,插件内 Pay::MODE_* === $config->getMode() 统一收口为 $config->getMode()->isService()/isNormal()/isSandbox();toArray()['mode'] 同步为枚举(toJson()/json_encode() 仍输出 0/1/2)
    • 微信:新增 AppType(_type:mp/mini/app)、PapayScene(委托代扣 _type 场景:mp/mini/app/scan/h5)、ReceiverType(分账接收方 type:MERCHANT_ID/PERSONAL_OPENID/PERSONAL_SUB_OPENID)、VirtualPayEnv(虚拟支付 env:0/1);_type 未知值仍按 MP 处理、分账未知 type 仍透传、env 未知值仍按正式环境处理(均为历史行为)
    • 支付宝:新增 ProductCode(biz_content.product_code)与 BizCode(数字身份/人脸 biz_content.biz_code),插件内字面量统一改为枚举取值
    • 文档:web/docs/v3/wechat/pay.md、web/docs/v3/wechat/virtual.md、web/docs/v3/quick-start/init.md 补充枚举用法

Changed

  • ProviderConfigInterface::getMode() 返回类型由 int 变更为 PayMode 枚举,AbstractConfig 统一实现 $mode / setMode() / getMode()(各 Provider Config 不再重复声明),AbstractConfig::getModeEnum() 移除;对外 $config->getMode() === 1 这类与 int 的比较恒为 false,请改用 $config->getMode()->isSandbox() / isService()(#1221)

Removed

  • 删除 Pay::MODE_NORMAL / Pay::MODE_SANDBOX / Pay::MODE_SERVICE 常量,请改用 PayMode::NORMAL / PayMode::SANDBOX / PayMode::SERVICE(use Yansongda\Pay\Enum\PayMode;);配置项 mode 仍兼容历史 int 写法(#1221)
v3.8.0-beta.4

[v3.8.0-beta.4] - 2026-08-25

Added

  • 微信虚拟支付服务端 API 支持自动获取 access_token(配置 virtual_pay.app_secret 启用,stable_token 接口)(#1186、#1179)
  • 微信虚拟支付客户端签名自动对 signData 做字典序排序,并在返回结果中提供与签名逐字节一致的 signData JSON 字符串(#1181)

Changed

  • 重构各 Provider Config 的必填参数校验:提取 AbstractConfig::validateNotEmpty() 公共方法,必填项仅需声明属性名列表(snake_case 键名由 Str::snake() 推导),除 Airwallex 外所有异常消息保持不变
  • 统一 Airwallex 必填配置缺失时的异常消息格式,与其他 Provider 对齐:配置错误: Airwallex 配置缺少 [client_id] -> 配置异常: 缺少 Airwallex 配置 -- [client_id]
  • 各 Provider 配置校验时机从 Pay::config() 推迟到实际使用该 Provider 时;客户端签名返回字段顺序变为字典序(已按返回字段顺序集成的前端零改动)

Fixed

  • 修复仅使用单一 Provider 时其余已传入 Provider 的不完整配置导致 Pay::config() 抛出配置异常的问题(#1186)

Removed

  • 移除 WechatConfig::validateForV2()/validateForMp()/validateForMini() 方法(仅存在于 v3.8.0-beta 版本,SDK 内部无调用)
v3.8.0-beta.3

[v3.8.0-beta.3] - 2026-08-11

Changed

  • 统一所有 Provider 的 _url payload 字段为前导 / 格式,base URL 常量去掉尾部 /

Fixed

  • 修复微信虚拟支付服务端 API 签名 uri 缺少前导 / 导致微信验签失败的问题(#1182)
v3.8.0-beta.2

v3.8.0-beta.2 - 2026-07-01

Added

  • 新增微信小程序虚拟支付支持 (#1172)
    • 新增 WechatConfigVirtualPay 配置类(appKey、sandboxAppKey、offerId、encodingAesKey、callbackToken)
    • 新增虚拟支付插件:PayPlugin、CallbackPlugin、AddPayloadSignaturePlugin、VerifySignaturePlugin
    • 新增业务插件:Currency(代币)、Goods(商品)、Order(订单)、Subscribe(订阅)、Withdraw(提现)
    • 新增 VirtualShortcut 用于客户端签名场景
    • 新增 WechatTrait::getWechatVirtualPaySignature() 和 getWechatVirtualSessionSignature() 方法
    • Wechat::success() 支持 ['_action' => 'virtual'] 参数返回虚拟支付成功响应
    • 新增 Wechat::URL_VIRTUAL 常量(https://api.weixin.qq.com)

Changed

  • 移除所有 Provider 中未使用的 mergeCommonPlugins 方法 (#1173)

Fixed

  • 修复 VirtualShortcut 插件数组包含非 PluginInterface 实现的问题
  • 修复虚拟支付测试用例缺少 access_token 参数的问题
  • 移除测试文件中不必要的 [@internal](https://github.com/internal) 和 [@coversNothing](https://github.com/coversNothing) 注解
v3.8.0-beta.0

v3.8.0-beta.0 - 2026-05-08

Added

  • 增加 PHP 8.5 支持 (#1139)
  • 新增 Yansongda\Pay\Service\AbstractServiceProvider 基类 (#1142)
  • 新增 Yansongda\Pay\CertManager 类用于证书缓存管理 (#1142)
  • 新增 Trait 系统替代 Functions.php (#1142, #1143, #1144)
    • AlipayTrait - 支付宝相关方法
    • WechatTrait - 微信相关方法
    • UnipayTrait - 银联相关方法
    • DouyinTrait - 抖音相关方法
    • PaypalTrait - PayPal 相关方法
    • JsbTrait - 江苏银行相关方法
    • StripeTrait - Stripe 相关方法
    • ProviderConfigTrait - Provider 配置方法
    • SupportServiceProviderTrait - ServiceProvider 支持方法
  • 新增空中云汇 (Airwallex) 支付支持 (#1140)
  • 新增 AirwallexConfig 类型化配置 (#1140, #1155)
  • 新增 EdgeCase 边界测试覆盖 (#1157)

Changed

  • 最低 PHP 版本要求从 8.0 升级到 8.2 (#1139)
  • Yansongda\Pay\Plugin\Wechat\V3\Marketing\MchTransfer\* 重命名为 Yansongda\Pay\Plugin\Wechat\V3\Marketing\Transfer\* (#1139)
  • 所有 Plugin 已迁移使用 Trait 方法代替 Functions.php 函数调用 (#1142, #1143, #1144)
  • 所有 ServiceProvider 继承 AbstractServiceProvider 基类 (#1145)
  • 所有 Provider 完成 typed config runtime migration (#1153, #1155)
  • 证书逻辑集中到 CertManager (#1163)
  • 规范化 CertManager 方法命名和错误码 (#1160)
  • 代码质量优化 - PHPStan 清理、异常扩展、CertManager 重构 (#1157)
  • 提取开发规范到 dev-guide Skill (#1164)
  • 修正 Config.php 错误码误用 & Pay::config() 去重 (#1162)
  • 修复 Trait 静态方法调用的 deprecation warnings (#1147)
  • 更新 Scrutinizer 镜像以支持 PHP 8.2 (#1158)
  • 升级 dev 依赖到 PHPUnit 11 / Mockery 1.6 / Monolog 3 / Symfony 6.4 并修复 PHPStan 错误
  • 更新依赖到最新版本 (#1148)
  • 新增 pr-review-provider skill 用于 Provider PR 代码审查 (#1149)

Removed

  • src/Functions.php,所有辅助函数已迁移到对应的 Trait (#1142, #1143, #1144, #1145)
  • tests/FunctionTest.php,测试已迁移到 Trait 测试 (#1142, #1143, #1144, #1145)
  • src/Plugin/Wechat/StartPlugin.php,请使用 Yansongda\Artful\Plugin\StartPlugin 代替 (#1139)
  • src/Plugin/Wechat/V3/Marketing/Transfer/ 目录(因微信支付 API 变更)(#1139)
  • get_alipay_config()、get_wechat_config()、get_unipay_config() 函数,请使用 get_provider_config() 代替 (#1139)
  • WechatConfig 中未使用的证书相关方法 (#1159)
v3.7.20

added

  • feat: 新增 PayPal 支付 (#1127)
  • feat: 新增 Stripe 支付 (#1130)

fixed

  • fix: 修复 localhost 签名验证绕过漏洞 (GHSA-q938-ghwv-8gvc) (#1131)

Full Changelog: https://github.com/yansongda/pay/compare/v3.7.19...v3.7.20

v3.7.19

added

  • feat: 增加支付宝商品文件上传插件 (#1120)

New Contributors

Full Changelog: https://github.com/yansongda/pay/compare/v3.7.18...v3.7.19

v3.7.18

fixed

  • fix: 微信分账参数可能丢失的问题 (#1108)

Full Changelog: https://github.com/yansongda/pay/compare/v3.7.17...v3.7.18

v3.7.17

fixed

  • fix: 事件缺失与不生效的问题 (#1106)

Full Changelog: https://github.com/yansongda/pay/compare/v3.7.16...v3.7.17

v3.7.16

added

  • feat: 新增微信商户转账查询接口 Shortcut (#1099)
  • feat: 微信商家转账支持内置异步通知参数(#1100)

New Contributors

Full Changelog: https://github.com/yansongda/pay/compare/v3.7.15...v3.7.16

v3.7.15

added

  • feat: 新增最新版微信商户转账撤销接口(#1096)

Full Changelog: https://github.com/yansongda/pay/compare/v3.7.14...v3.7.15

v3.7.14

added

  • optimize: 优化私钥证书的字符串读取方式(#1081)
v3.7.13

added

  • feat: 新增支付宝APP同步回调验签 (#1061, #1064)

New Contributors

Full Changelog: https://github.com/yansongda/pay/compare/v3.7.12...v3.7.13

v3.7.12

added

  • feat: 支持最新版微信商户转账 (#1058)

Full Changelog: https://github.com/yansongda/pay/compare/v3.7.11...v3.7.12

v3.7.11

added

  • feat: 新增微信分账申请分账账单插件 (#1041)
v3.7.10

fixed

  • fix: 未配置微信证书时,自动获取证书后仍然使用之前的微信配置(#1026)

Full Changelog: https://github.com/yansongda/pay/compare/v3.7.9...v3.7.10

v3.7.9

added

  • feat: 新增抖音支付(#1014)

New Contributors

Full Changelog: https://github.com/yansongda/pay/compare/v3.7.8...v3.7.9

v3.7.8

added

  • feat: 新增 v3 付款码服务商模式(#1010)

New Contributors

Full Changelog: https://github.com/yansongda/pay/compare/v3.7.7...v3.7.8

v3.7.7

added

  • feat: 新增江苏银行e融支付(#1002)

New Contributors

Full Changelog: https://github.com/yansongda/pay/compare/v3.7.6...v3.7.7

v3.7.6

fixed

  • fix: 微信关闭订单报解包错误的问题(#1000, #1001)

Full Changelog: https://github.com/yansongda/pay/compare/v3.7.5...v3.7.6

v3.7.5

fixed

  • fix: 支付宝响应空签名时签名验证逻辑错误的问题(#998)

optimized

  • optimize: 优化微信 ResponsePlugin 插件去除不必要的返回参数(#996)

deprecated

  • deprecate: 微信 StartPlugin 改为使用 yansongda/artful 中的插件(#993)
  • deprecate: get_wechat_config, get_alipay_config, get_unipay_config 方法已废弃,使用 get_provider_config 方法代替(#994)

New Contributors

Full Changelog: https://github.com/yansongda/pay/compare/v3.7.4...v3.7.5

v3.7.4

optimized

  • optimize: 使用 is_file 代替字符串结尾判断(#982)

New Contributors

Full Changelog: https://github.com/yansongda/pay/compare/v3.7.3...v3.7.4

v3.7.3

fixed

  • fix: 修复商家转账参数缺失的问题(#977)

New Contributors

Full Changelog: https://github.com/yansongda/pay/compare/v3.7.2...v3.7.3

v3.7.2

added

  • feat: 微信V2版本支持普通红包(#973)

chore

  • chore: 升级 yansongda/artful 到最新版解决 http 配置不生效的问题(#974)

New Contributors

Full Changelog: https://github.com/yansongda/pay/compare/v3.7.1...v3.7.2

v3.7.1

fixed

  • fix: 修复微信付款码 shortcut 支付插件执行顺序错误(#972)

New Contributors

Full Changelog: https://github.com/yansongda/pay/compare/v3.7.0...v3.7.1

v3.7.0

added

  • feat: 支持微信 v3 版付款码支付(#969)

changed

  • changed: 微信付款码支付更改为 v3 版(#969)

Full Changelog: https://github.com/yansongda/pay/compare/v3.6.5...v3.7.0

v3.6.5

added

  • feat: 支付宝根证书配置支持直接配置内容(#959)

New Contributors

Full Changelog: https://github.com/yansongda/pay/compare/v3.6.4...v3.6.5

v3.6.4

fixed

  • fix: 修复支付宝授权访问令牌插件参数问题(#954)

Full Changelog: https://github.com/yansongda/pay/compare/v3.6.3...v3.6.4

v3.6.3

optimized

  • optimize: 优化微信错误响应时的处理逻辑(#944)

Full Changelog: https://github.com/yansongda/pay/compare/v3.6.2...v3.6.3

v3.6.2

fixed

  • fix: 修复微信 App 支付参数异常问题(#941)

Full Changelog: https://github.com/yansongda/pay/compare/v3.6.1...v3.6.2

v3.6.1

chore

  • chore: 升级 yansongda/artful 到 v1.0.9 修复 JsonPacker 为空时 packer 错误的问题(#937)

Full Changelog: https://github.com/yansongda/pay/compare/v3.6.0...v3.6.1

v3.6.0

added

  • feat: 新增 InvalidSignException(#903)
  • feat: 新增 DecryptException(#906)
  • feat: 新增 decrypt_wechat_contents 解密微信加密内容(#912)
  • feat: \Yansongda\Pay\Plugin\Wechat\Extend\Complaints\QueryDetailPlugin 自动解密用户手机号(#912)
  • feat: 支持 微信/支付宝 多版本(#918)
  • feat: 增加 HttpClientFactoryInterface 方法用于工厂模式创建 http client(#921)
  • feat: 增加银联 条码支付综合前置平台-被扫支付 刷卡支付插件(#922)
  • feat: 增加小程序虚拟支付签名、用户签名方法(#924)
  • feat: 增加微信发票插件(#927)

changed

  • change: 查询API方法由 find 改为 query,同时参数只支持 array(#897)
  • change: cancel/close 的 API 参数只支持 array,不再支持 string(#900, #901)
  • change: 微信合单支付去掉独立的 combine_app_id,combine_mch_id 配置,复用其它配置(#909)
  • change: 手机网站支付快捷方式由 wap 改为 h5(#911, #915, #916, #934)
  • change: Pay 类对外方法由所改变,如果您有自行扩展相关插件,请检查(#926)
  • change(internal): 按场景对 支付宝/微信/银联 插件进行分类 && 插件代码优化(#894, #909, #913, #922)
  • change(internal): 将 支付/微信/银联 shortcut 从 plugin 文件夹独立出来(#895, #904, #905, #933)
  • change(internal): shortcut 完整标明各个插件,不使用 commonPlugin(#886)
  • change(internal): DirectionInterface 方法由 parse 改为 guide(#896)
  • change(internal): 错误代码 const 命名规则统一(#902, #903, #906, #909, #926)
  • change(internal): 调整 ProviderInterface 的返回参数,增加了 Rocket 返回(#909)
  • change(internal): 将 call() 方法重命名为 shortcut()(#914)
  • change(internal): mergeCommonPlugins 不再作为 AbstractProvider 的方法(#918)
  • change(internal): AbstractProvider 默认使用 HttpClientFactoryInterface 创建 http client(#921)
  • change(internal): 调整 银联 插件文件夹结构(#923)
  • change(internal): 替换为 artful API 请求框架(#926)
  • change(internal): 调整微信代金券插件文件结构(#928)

Full Changelog: https://github.com/yansongda/pay/compare/v3.5.3...v3.6.0

v3.6.0-beta.1

added

  • feat: 新增 InvalidSignException(#903)
  • feat: 新增 DecryptException(#906)
  • feat: 新增 decrypt_wechat_contents 解密微信加密内容(#912)
  • feat: \Yansongda\Pay\Plugin\Wechat\Extend\Complaints\QueryDetailPlugin 自动解密用户手机号(#912)
  • feat: 支持 微信/支付宝 多版本(#918)
  • feat: 增加 HttpClientFactoryInterface 方法用于工厂模式创建 http client(#921)
  • feat: 增加银联 条码支付综合前置平台-被扫支付 刷卡支付插件(#922)
  • feat: 增加小程序虚拟支付签名、用户签名方法(#924)
  • feat: 增加微信发票插件(#927)

changed

  • change: 查询API方法由 find 改为 query,同时参数只支持 array(#897)
  • change: cancel/close 的 API 参数只支持 array,不再支持 string(#900, #901)
  • change: 微信合单支付去掉独立的 combine_app_id,combine_mch_id 配置,复用其它配置(#909)
  • change: 手机网站支付快捷方式由 wap 改为 h5(#911, #915, #916, #934)
  • change: Pay 类对外方法由所改变,如果您有自行扩展相关插件,请检查(#926)
  • change(internal): 按场景对 支付宝/微信/银联 插件进行分类 && 插件代码优化(#894, #909, #913, #922)
  • change(internal): 将 支付/微信/银联 shortcut 从 plugin 文件夹独立出来(#895, #904, #905, #933)
  • change(internal): shortcut 完整标明各个插件,不使用 commonPlugin(#886)
  • change(internal): DirectionInterface 方法由 parse 改为 guide(#896)
  • change(internal): 错误代码 const 命名规则统一(#902, #903, #906, #909, #926)
  • change(internal): 调整 ProviderInterface 的返回参数,增加了 Rocket 返回(#909)
  • change(internal): 将 call() 方法重命名为 shortcut()(#914)
  • change(internal): mergeCommonPlugins 不再作为 AbstractProvider 的方法(#918)
  • change(internal): AbstractProvider 默认使用 HttpClientFactoryInterface 创建 http client(#921)
  • change(internal): 调整 银联 插件文件夹结构(#923)
  • change(internal): 替换为 artful API 请求框架(#926)
  • change(internal): 调整微信代金券插件文件结构(#928)

Full Changelog: https://github.com/yansongda/pay/compare/v3.6.0-beta.0...v3.6.0-beta.1

v3.6.0-beta.0

added

  • feat: 新增 InvalidSignException(#903)
  • feat: 新增 DecryptException(#906)
  • feat: 新增 decrypt_wechat_contents 解密微信加密内容(#912)
  • feat: \Yansongda\Pay\Plugin\Wechat\Extend\Complaints\QueryDetailPlugin 自动解密用户手机号(#912)
  • feat: 支持 微信/支付宝 多版本(#918)
  • feat: 增加 HttpClientFactoryInterface 方法用于工厂模式创建 http client(#921)
  • feat: 增加银联 条码支付综合前置平台-被扫支付 刷卡支付插件(#922)
  • feat: 增加小程序虚拟支付签名、用户签名方法(#924)
  • feat: 增加微信发票插件(#927)

changed

  • change: 查询API方法由 find 改为 query,同时参数只支持 array(#897)
  • change: cancel/close 的 API 参数只支持 array,不再支持 string(#900, #901)
  • change: 微信合单支付去掉独立的 combine_app_id,combine_mch_id 配置,复用其它配置(#909)
  • change: 手机网站支付快捷方式由 wap 改为 h5(#911, #915, #916)
  • change: Pay 类对外方法由所改变,如果您有自行扩展相关插件,请检查(#926)
  • change(internal): 按场景对 支付宝/微信/银联 插件进行分类 && 插件代码优化(#894, #909, #913, #922)
  • change(internal): 将 支付/微信/银联 shortcut 从 plugin 文件夹独立出来(#895, #904, #905)
  • change(internal): shortcut 完整标明各个插件,不使用 commonPlugin(#886)
  • change(internal): DirectionInterface 方法由 parse 改为 guide(#896)
  • change(internal): 错误代码 const 命名规则统一(#902, #903, #906, #909, #926)
  • change(internal): 调整 ProviderInterface 的返回参数,增加了 Rocket 返回(#909)
  • change(internal): 将 call() 方法重命名为 shortcut()(#914)
  • change(internal): mergeCommonPlugins 不再作为 AbstractProvider 的方法(#918)
  • change(internal): AbstractProvider 默认使用 HttpClientFactoryInterface 创建 http client(#921)
  • change(internal): 调整 银联 插件文件夹结构(#923)
  • change(internal): 替换为 artful API 请求框架(#926)
  • change(internal): 调整微信代金券插件文件结构(#928)v

Full Changelog: https://github.com/yansongda/pay/compare/v3.5.3...v3.6.0-beta.0

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
roundly-consulting/kubernetes-api-for-laravel
roundly-consulting/plausible-for-laravel
gvp/gvp-laravel-template
metasyncsite/laravel-metasync-client
roundly-consulting/onboarding-for-laravel
andydefer/laravel-notification
adachsoft/cli-process-tester
jhaskell13/laraflow
sebastienheyd/boilerplate-media-manager
ccast/tagixo-primix
pretendtrue/laravel-builder
sawmainek/laravel-scout-tntsearch-driver
tomshaw/laravel-calendar-table
dibakar/laravel-ownership
steadrun/laravel-monitor
labyrinthe/connect-laravel
elmogy/layan
drewdan/sentinel-client
dskripchenko/laravel-llm
fatryst/nuonuo