iboxs/payment

支付宝/微信支付/QQ钱包集成包

Installs: 379

Dependents: 0

Suggesters: 0

Security: 0

Stars: 6

Watchers: 1

Forks: 0

Open Issues: 3

Type:1

pkg:composer/iboxs/payment

3.0.0 2026-02-01 07:31 UTC

This package is auto-updated.

Last update: 2026-02-01 07:33:33 UTC


README

项目来历

  • 支付宝/微信支付调用一直是PHP开发者经常遇到的情况,各种接口,各种参数调用,SDK代码又太多,很多用不上,所以本项目应运而生,提供多种接口,难度很小,从启动支付到回调验签,都有函数一次性解决。代码量小,冗余低;
  • 本分支项目目前暂时仅直接支持Laravel、Thinkphp、IBoxs框架,其他框架使用需要手动进行配置,具体看下方具体说明。
  • 本分支功能将全面支持微信支付V3接口和支付宝刷脸支付等。
  • 很多接口尚未完善,若有需要的接口这里还没有的,可提issue。
  • 本版本暂时仅支持支付宝和微信支付,若需要QQ钱包支付和PayPal支付的,请使用旧版本,可根据情况需要在后续再次新增QQ钱包支付和PayPal支付。
  • 若需要接入其他支付接口的(例如云闪付等)可提issue,作者根据实际情况需要可考虑在后续版本中添加。
  • 具体的调用方法查看test文件夹下各个示例文件。
  • 完整代码请以github上发布的为准,国内码云上的只是同步项目,不一定是最新的。
  • 本项目要求PHP版本最低8.0,内部代码大部分开始使用强类型,必须在PHP8.0以上才可以运行,请注意版本问题。
  • 本项目微信支付全面使用微信支付V3接口(付款码支付接口除外,V3没有这个接口),请注意相关的接口处理。
  • 若你使用的微信回调验签方式是平台证书,请参阅https://pay.weixin.qq.com/doc/v3/merchant/4013053420 转为微信公钥文件,并在配置的publicKeySerial参数内填写平台证书序列号,如果你已经使用的微信公钥,那么可直接使用,并在publicKeySerial参数内填写公钥ID。
  • 更多的配置说明,请参考下方配置文件示例后的具体说明
  • 若有疑问或者bug,可提issue,或者联系QQ320587491 微信:itlattices

安装方法

  • 推荐使用composer
composer require iboxs/payment

更新注意

  • 如果你之前已在使用本组件,请注意,本组件3.0版本为破坏性更新,代码和结构被完全重构,若你之前的项目已跑的很好,不建议更新至3.0以上版本。
  • 如果你使用的PHP版本是8.0以下版本(不含8.0),可使用旧版本的本组件,调用方法不一致,请查看具体版本的文档。

配置

  • Laravel/ThinkPHP框架
    • 需要在config文件夹下创建一个文件payment.php文件,内容为:
<?php
return [
    'alipay'=>[
        'publicKey' =>"", //支付宝公钥
        'rsaPrivateKey' =>"", //应用私钥
        'appid' => "",  // 开放平台APPID
        'notify_url' => "",  //异步通知地址
        'return_url' => "",  //同步回调地址
        'charset' => "UTF-8",  //编码方式
        'sign_type'=>"RSA2",  //加密方式(本组件使用RSA2进行加密和回调验签)
        'gatewayUrl' =>"https://openapi.alipay.com/gateway.do",  //支付宝接口地址(若为沙箱环境的记得改为https://openapi.alipay.com/gateway.do)
        'has_mobile'=>true //是否已开通手机H5网页支付,若已开通,若用户为手机访问且调用网页支付接口时,会默认跳转手机端支付接口
    ],
    'wechat'=>[
        'host'=>'https://api.mch.weixin.qq.com',  //接入点(若出现异常可访问容灾接入点:https://api2.mch.weixin.qq.com)
        'mchid'=>'',  //商户号
        'appid'=>[  //需要先与商户号进行绑定()
            'default'=>'', //默认使用的APPID(例如Native支付、H5支付、商家转账时会用到,以下三种APPID任选一个填在这里即可,注意部分接口需要openid的,需要填写一个与openid对应的appid,请根据情况选择)
            'app'=> '', //【APP支付用,无就不设置即可】应用APPID(商户在微信开放平台(移动应用)
            'mp'=>'', //【公众号支付用,调用JS支付接口】公众号APPID
            'mini'=>'', //【小程序支付用,调用小程序支付接口】小程序APPID
        ],
        'apiKeyV3'=>'',  //商户APIV3秘钥(除了付款码接口外,其他接口均使用V3秘钥进行签名,请务必设置此参数)
        'apiKeyV2'=>'', //商户APIV2秘钥(付款码支付用,付款码支付仍然在使用V2接口,若无调用,则可以不设置)
        'notify_url'=>"",  //异步回调地址
        'return_url'=>"",  //同步回调地址(H5支付必须)
        'merchantPrivateKeyFilePath'=>'', //商户API私钥证书文件地址(绝对地址)
        'merchantCertificateSerial'=>'', //「商户API证书」的「证书序列号」
        'currency'=>'CNY',  //符合ISO 4217标准的三位字母代码,默认人民币:CNY
        'publicKeyPath'=>'', //微信支付平台公钥证书文件地址(绝对地址)[验签要用](这里注意,如果你使用的是平台证书,请参考https://pay.weixin.qq.com/doc/v3/merchant/4013053420将其导出为平台公钥后放在这里,并在下方参数使用平台证书序列号,如果你使用的已经是平台公钥,那么下面这个参数则使用平台公钥ID)
        'publicKeySerial'=>'' //微信支付平台公钥证书的公钥ID/序列号(使用平台证书的,这里填写证书序列号,使用微信平台公钥的,这里填公钥ID)
    ]
];
?>

请注意填写好内容,后续请求这里将作为全局配置使用。 若需要动态配置,可调用iboxs\payment\Payment::setConfig($config)配置进行载入,$config与上方配置文件内容一致。

  • 具体的调用方法和示例程序,请查阅test文件夹下的具体demo。
  • 注意:若在laravel/thinkphp框架下使用,则无需调用setConfig方法,可直接调用具体的接口,若在其他框架下使用的,也不想调用setConfig方法时,可将下列函数放入公共函数文件内即可:
// 这里只做示例,请根据实际情况调整
function config(string $key){
    return require("./config/config.php");  //修改为你的配置文件路径
}
  • 若发现报错,可调用在$r=$payment->run();之后的获得的支付结果对象的getRequestData方法获取原始请求参数(若直接返回false,则为请求失败或者参数配置问题,请检查你的网络和配置是否完整),以排查原因,例如:
$payment=Payment::wechatCloseTrade($out_trade_no);
$r=$payment->run();
if($r==false){
    var_dump('请求错误');
    exit;
}
if($r['code']!=0){
    $requestData=$r->getRequestData();  //这里可获得请求接口的完整的原始参数
}

回调验签

  • 支付宝支付
$notifyResult=Notify::Alipay();  //返回false为验签失败,成功将返回一个回调数据对象,便于后续处理
  • 微信支付
$notifyResult=Notify::Wechat();  //返回false为验签失败,成功将返回一个回调数据对象(已解密),便于后续处理
  • 具体的回调对象处理方法可查看test文件夹下相应的示例代码。