{"id":13722369,"url":"https://github.com/helei112g/payment","last_synced_at":"2025-05-14T04:07:40.227Z","repository":{"id":37382243,"uuid":"61171677","full_name":"helei112g/payment","owner":"helei112g","description":"Payment是php版本的支付聚合第三方sdk，集成了微信支付、支付宝支付、招商一网通支付。提供统一的调用接口，方便快速接入各种支付、查询、退款、转账能力。服务端接入支付功能，方便、快捷。","archived":false,"fork":false,"pushed_at":"2022-12-01T18:05:12.000Z","size":1358,"stargazers_count":2353,"open_issues_count":39,"forks_count":672,"subscribers_count":162,"default_branch":"master","last_synced_at":"2025-04-10T22:35:04.775Z","etag":null,"topics":["alipay","alipaysdk","cmb","payment","wechat-pay","weixin-pay"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/helei112g.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-06-15T02:36:05.000Z","updated_at":"2025-04-10T16:15:31.000Z","dependencies_parsed_at":"2023-01-23T04:30:28.403Z","dependency_job_id":null,"html_url":"https://github.com/helei112g/payment","commit_stats":null,"previous_names":[],"tags_count":45,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/helei112g%2Fpayment","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/helei112g%2Fpayment/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/helei112g%2Fpayment/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/helei112g%2Fpayment/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/helei112g","download_url":"https://codeload.github.com/helei112g/payment/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254069220,"owners_count":22009513,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alipay","alipaysdk","cmb","payment","wechat-pay","weixin-pay"],"created_at":"2024-08-03T01:01:27.909Z","updated_at":"2025-05-14T04:07:40.168Z","avatar_url":"https://github.com/helei112g.png","language":"PHP","funding_links":[],"categories":["聚合支付包（库）","PHP","类库"],"sub_categories":["加解密","未归类"],"readme":"\u003ch1 align=\"center\"\u003ePayment使用文档\u003c/h1\u003e\n\n\n# JetBrains OS licenses\n\n`payment` had been being developed with PhpStorm under the free JetBrains Open Source license(s) granted by JetBrains s.r.o., hence I would like to express by thanks here.\n\n[![Stargazers over time](./jetbrains-variant-4.svg)](https://www.jetbrains.com/?from=ABC)\n\n\n[![Software license][ico-license]](LICENSE)\n[![Latest development][ico-version-dev]][link-packagist]\n[![Monthly installs][ico-downloads-monthly]][link-downloads]\n\n老版本文档：http://helei112g.github.io/payment\n\n新版本文档如下\n\n\n## Stargazers over time\n\n[![Stargazers over time][starchart-cc]](https://starchart.cc/helei112g/payment)\n\n-----\n\n# 联系\u0026打赏\n\n[打赏名单](SUPPORT.md)\n\n请大家使用时根据示例代码来，有bug直接提交 `issue`；**提供付费技术支持**。\n\n\u003cdiv style=\"margin:0 auto;\"\u003e\n    \u003cp align=\"center\" style=\"margin:0px;\"\u003e\u003cimg width=\"60%\" src=\"https://dayutalk.cn/img/pub-qr.jpeg?v=123\"\u003e\u003c/p\u003e\n    \u003cp align=\"center\" style=\"margin:0px;\"\u003e\u003cimg width=\"60%\" src=\"https://dayutalk.cn/img/pay-qr.jpeg\"\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n\n# 目录\n\n- [公告](#公告)\n    - [重要通知](#重要通知)\n    - [计划](#计划)\n- [Payment解决什么问题](#Payment解决什么问题)\n- [如何使用](#如何使用)\n    - [安装](#安装)\n    - [项目集成](#项目集成)\n    - [设计支付系统](#设计支付系统)\n    - [支持的接口](#支持的接口)\n- [贡献指南](#贡献指南)\n    - [代码设计](#代码设计)\n    - [接入支付指南](#接入支付指南)\n- [第三方文档](#第三方文档)\n- [License](#License)\n\n# 公告\n\n第三方支付的一些重要更新提示，以及项目相关的计划信息。\n\n## 重要通知\n\n1. 2019-04: **提醒：微信CA证书进行了更新，请更新项目到最新版本。否则5月29日后，将无法支付**\n\u003e 官方公告： https://pay.weixin.qq.com/index.php/public/cms/content_detail?lang=zh\u0026id=56602\n\n## 计划\n\n1. 2019/3/28 开始重构整个项目，doing... ...\n\u003e 重构后的项目与 `4.x` 以前的版本不兼容，请使用者注意！\n\n# Payment解决什么问题\n\n`Payment` 的目的是简化大家在对接主流第三方时需要频繁去阅读第三方文档，还经常遇到各种问题。`Payment` 将所有第三方的接口进行了合理的建模分类，对大家提供统一的接入入口，大家只需要关注自身业务并且支付系统设计上。\n\n目前已经集成：支付宝、微信、招商绝大部分功能。也欢迎各位贡献代码。 [贡献指南](#贡献指南)\n\n\n# 如何使用\n\n## 安装\n\n当前 `Payment` 项目仅支持 `PHP version \u003e 7.0` 的版本，并且仅支持通过 `composer` 进行安装。\n\n**需要 `PHP` 安装以下扩展：**\n\n```txt\n- ext-curl\n- ext-mbstring\n- ext-bcmath\n- package-Guzzle\n```\n\n**composer安装方式：**\n\n直接在命令行下安装：\n\n```bash\ncomposer require \"riverslei/payment:*\"\n```\n\n通过项目配置文件方式安装：\n\n```yaml\n\"require\": {\n    \"riverslei/payment\": \"*\"\n}\n```\n\n\n## 项目集成\n\n按照上面的步骤完成安装后，即可在项目中使用。\n\n对于整个过程，提供了唯一的入口类 `\\Payment\\Client`，每一个渠道，均只介绍 `APP支付` 与 `异步/同步通知` 该如何接入。会重点说明每个请求支持的参数。\n\n**APP支付demo**\n\n```php\n$config = [\n    // 配置信息，各个渠道的配置模板见对应子目录\n];\n\n// 请求参数，完整参数见具体表格\n$payData = [\n    'body'         =\u003e 'test body',\n    'subject'      =\u003e 'test subject',\n    'trade_no'     =\u003e 'trade no',// 自己实现生成\n    'time_expire'  =\u003e time() + 600, // 表示必须 600s 内付款\n    'amount'       =\u003e '5.52', // 微信沙箱模式，需要金额固定为3.01\n    'return_param' =\u003e '123',\n    'client_ip'    =\u003e isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '127.0.0.1', // 客户地址\n];``\n\n// 使用\ntry {\n    $client = new \\Payment\\Client(\\Payment\\Client::WECHAT, $wxConfig);\n    $res    = $client-\u003epay(\\Payment\\Client::WX_CHANNEL_APP, $payData);\n} catch (InvalidArgumentException $e) {\n    echo $e-\u003egetMessage();\n    exit;\n} catch (\\Payment\\Exceptions\\GatewayException $e) {\n    echo $e-\u003egetMessage();\n    var_dump($e-\u003egetRaw());\n    exit;\n} catch (\\Payment\\Exceptions\\ClassNotFoundException $e) {\n    echo $e-\u003egetMessage();\n    exit;\n} catch (Exception $e) {\n    echo $e-\u003egetMessage();\n    exit;\n}\n\n```\n\n\n**异步/同步通知**\n\n```php\n// 自己实现一个类，继承该接口\nclass TestNotify implements \\Payment\\Contracts\\IPayNotify\n{\n    /**\n     * 处理自己的业务逻辑，如更新交易状态、保存通知数据等等\n     * @param string $channel 通知的渠道，如：支付宝、微信、招商\n     * @param string $notifyType 通知的类型，如：支付、退款\n     * @param string $notifyWay 通知的方式，如：异步 async，同步 sync\n     * @param array $notifyData 通知的数据\n     * @return bool\n     */\n    public function handle(\n        string $channel,\n        string $notifyType,\n        string $notifyWay,\n        array $notifyData\n    ) {\n        //var_dump($channel, $notifyType, $notifyWay, $notifyData);exit;\n        return true;\n    }\n}\n\n$config = [\n    // 配置信息，各个渠道的配置模板见对应子目录\n];\n\n// 实例化继承了接口的类\n$callback = new TestNotify();\n\ntry {\n    $client = new \\Payment\\Client(\\Payment\\Client::ALIPAY, $config);\n    $xml = $client-\u003enotify($callback);\n} catch (InvalidArgumentException $e) {\n    echo $e-\u003egetMessage();\n    exit;\n} catch (\\Payment\\Exceptions\\GatewayException $e) {\n    echo $e-\u003egetMessage();\n    exit;\n} catch (\\Payment\\Exceptions\\ClassNotFoundException $e) {\n    echo $e-\u003egetMessage();\n    exit;\n} catch (Exception $e) {\n     echo $e-\u003egetMessage();\n     exit;\n }\n\n```\n\n从上面的例子简单总结下，所有的支持的能力，通过 `\\Payment\\Client` 对外暴露方法；所有需要的常量也在这个类中进行了定义。其次需要一个 `$config`，关于config的模板，在每个渠道下面去看。最后一个传入请求的参数，完整的参数会在每个渠道中列出来，需要说明的是这些参数名字根据第三方文档部分进行了改写。在使用的时候请注意。\n\n\n参数选项说明：\n\n- Y: 必须\n- N: 非必须\n\n### 支付宝\n\n**配置文件模板**\n\n```php\n$config = [\n    'use_sandbox' =\u003e true, // 是否使用沙盒模式\n\n    'app_id'    =\u003e '2016073100130857',\n    'sign_type' =\u003e 'RSA2', // RSA  RSA2\n\n\n    // 支付宝公钥字符串\n    'ali_public_key' =\u003e '',\n\n    // 自己生成的密钥字符串\n    'rsa_private_key' =\u003e '',\n\n    'limit_pay' =\u003e [\n        //'balance',// 余额\n        //'moneyFund',// 余额宝\n        //'debitCardExpress',// \t借记卡快捷\n        //'creditCard',//信用卡\n        //'creditCardExpress',// 信用卡快捷\n        //'creditCardCartoon',//信用卡卡通\n        //'credit_group',// 信用支付类型（包含信用卡卡通、信用卡快捷、花呗、花呗分期）\n    ], // 用户不可用指定渠道支付当有多个渠道时用“,”分隔\n\n    // 与业务相关参数\n    'notify_url' =\u003e 'https://dayutalk.cn/notify/ali',\n    'return_url' =\u003e 'https://dayutalk.cn',\n];\n\n\n```\n\n#### APP支付请求参数\n\n\u003e 对应channel： \\Payment\\Client::ALI_CHANNEL_APP\n\n字段 | 解释 | 必须\n---|---|---\namount | 订单总金额，单位为元，精确到小数点后两位，取值范围[0.01,100000000] | Y\ngoods_type | 商品主类型 :0-虚拟类商品,1-实物类商品 | Y\nbody | 对一笔交易的具体描述信息。如果是多种商品，请将商品描述字符串累加传给body。 | Y\nsubject | 商品的标题/交易标题/订单标题/订单关键字等。 | Y\nproduct_code | 销售产品码，商家和支付宝签约的产品码 | N\ntrade_no | 商户网站唯一订单号 | N\npromo_params | 优惠参数 注：仅与支付宝协商后可用 | N\nreturn_params | 公用回传参数，如果请求时传递了该参数，则返回给商户时会回传该参数。 | N\nextend_params | 业务扩展参数 | N\nstore_id | 商户门店编号 | N\next_user_info | 外部指定买家 | N\nbusiness_params | 商户传入业务信息，具体值要和支付宝约定，应用于安全，营销等参数直传场景，格式为json格式 | N\ntime_expire | 该笔订单允许的最晚付款时间，逾期将关闭交易。时间戳 | N\n\n#### 条码支付请求参数\n\n\u003e 对应channel： \\Payment\\Client::ALI_CHANNEL_BAR\n\n字段 | 解释 | 必须\n---|---|---\ntrade_no | 商户订单号,64个字符以内、可包含字母、数字、下划线；需保证在商户端不重复 | Y\nauth_code | 支付授权码，25~30开头的长度为16~24位的数字，实际字符串长度以开发者获取的付款码长度为准 | Y\namount | 订单总金额，单位为元 | Y\nsubject | 订单标题 | Y\nbody | 订单描述 | Y\nscene | 支付场景 条码支付，取值：bar_code（默认）；声波支付，取值：wave_code | N\nproduct_code | 销售产品码 | N\nbuyer_id | 买家的支付宝用户 id，如果为空，会从传入的码值信息中获取买家 ID | N\nseller_id | 如果该值为空，则默认为商户签约账号对应的支付宝用户ID | N\nsettle_currency | 商户指定的结算币种，默认：CNY | N\ndiscountable_amount | 参与优惠计算的金额，单位为元 | N\ngoods_detail | 订单包含的商品列表信息，json格式，其它说明详见商品明细说明 | N\noperator_id | 商户操作员编号 | N\nstore_id | 商户门店编号 | N\nterminal_id | 商户机具终端编号 | N\nextend_params | 业务扩展参数 | N\ntime_expire | 该笔订单允许的最晚付款时间，逾期将关闭交易 | N\nauth_confirm_mode | 预授权确认模式，授权转交易请求中传入，适用于预授权转交易业务使用，目前只支持PRE_AUTH(预授权产品码) | N\nterminal_params | 商户传入终端设备相关信息，具体值要和支付宝约定 | N\npromo_params | 优惠明细参数，通过此属性补充营销参数 | N\nadvance_payment_type | 支付模式类型,若值为ENJOY_PAY_V2表示当前交易允许走先享后付2.0垫资 | N\n\n#### 查询对账单请求参数\n\n字段 | 解释 | 必须\n---|---|---\nbill_type | 账单类型，默认是 trade | N\nbill_date | 账单时间：日账单格式为yyyy-MM-dd | Y\n\n\n#### 扫码支付请求参数\n\n\u003e 对应channel： \\Payment\\Client::ALI_CHANNEL_QR\n\n字段 | 解释 | 必须\n---|---|---\ntrade_no | 商户订单号,64个字符以内、可包含字母、数字、下划线；需保证在商户端不重复 | Y\nseller_id | 如果该值为空，则默认为商户签约账号对应的支付宝用户ID | N\namount | 订单总金额，单位为元 | Y\ndiscountable_amount | 参与优惠计算的金额，单位为元 | N\nsubject | 订单标题 | Y\ngoods_detail | 订单包含的商品列表信息，json格式，其它说明详见商品明细说明 | N\nbody | 订单描述 | Y\noperator_id | 商户操作员编号 | N\nstore_id | 商户门店编号 | N\nterminal_id | 商户机具终端编号 | N\nextend_params | 业务扩展参数 | N\ntime_expire | 该笔订单允许的最晚付款时间，逾期将关闭交易 | N\nsettle_info | 描述结算信息，json格式，详见结算参数说明 | N\nmerchant_order_no | 商户原始订单号，最大长度限制32位 | N\nbusiness_params | 商户传入业务信息，具体值要和支付宝约定，应用于安全，营销等参数直传场景，格式为json格式 | N\n\n\n#### 手机网站支付请求参数\n\n\u003e 对应channel： \\Payment\\Client::ALI_CHANNEL_WAP\n\n字段 | 解释 | 必须\n---|---|---\nbody | 对一笔交易的具体描述信息。如果是多种商品，请将商品描述字符串累加传给body。 | Y\nsubject | 商品的标题/交易标题/订单标题/订单关键字等。 | Y\ntrade_no | 商户网站唯一订单号 | Y\ntime_expire | 该笔订单允许的最晚付款时间，逾期将关闭交易，时间戳 | N\namount | 订单总金额，单位为元，精确到小数点后两位，取值范围[0.01,100000000] | N\nauth_token | 针对用户授权接口，获取用户相关数据时，用于标识用户授权关系注：若不属于支付宝业务经理提供签约服务的商户，暂不对外提供该功能，该参数使用无效 | N\ngoods_type | 商品主类型：0—虚拟类商品，1—实物类商品 | Y\nreturn_params | 公用回传参数，如果请求时传递了该参数，则返回给商户时会回传该参数 | N\nquit_url | 添加该参数后在h5支付收银台会出现返回按钮，可用于用户付款中途退出并返回到该参数指定的商户网站地址。 | N\npromo_params | 优惠参数注：仅与支付宝协商后可用 | N\nextend_params | 业务扩展参数，详见下表的“业务扩展参数说明” | N\nstore_id | 商户门店编号 | N\nspecified_channel | 指定渠道，目前仅支持传入pcredit若由于用户原因渠道不可用，用户可选择是否用其他渠道支付。 | N\nbusiness_params | 商户传入业务信息，具体值要和支付宝约定，应用于安全，营销等参数直传场景，格式为json格式 | N\next_user_info | 外部指定买家 | N\n\n#### 电脑网站支付请求参数\n\n\u003e 对应channel： \\Payment\\Client::ALI_CHANNEL_WEB\n\n字段 | 解释 | 必须\n---|---|---\ntrade_no | 商户网站唯一订单号 | Y\namount | 订单总金额，单位为元，精确到小数点后两位，取值范围[0.01,100000000] | N\nbody | 对一笔交易的具体描述信息。如果是多种商品，请将商品描述字符串累加传给body。 | Y\nsubject | 商品的标题/交易标题/订单标题/订单关键字等。 | Y\ntime_expire | 该笔订单允许的最晚付款时间，逾期将关闭交易，时间戳 | N\ngoods_detail\nreturn_params | 公用回传参数，如果请求时传递了该参数，则返回给商户时会回传该参数 | N\nextend_params | 业务扩展参数，详见下表的“业务扩展参数说明” | N\ngoods_type | 商品主类型：0—虚拟类商品，1—实物类商品 | Y\npromo_params | 优惠参数注：仅与支付宝协商后可用 | N\nroyalty_info | 描述分账信息，json格式，详见分账参数说明 | N\nsub_merchant | 间连受理商户信息体，当前只对特殊银行机构特定场景下使用此字段 | N\nstore_id | 商户门店编号 | N\nqr_pay_mode | PC扫码支付的方式，支持前置模式和，默认是2 | N\nqrcode_width | 商户自定义二维码宽度 | N\nsettle_info | 描述结算信息，json格式，详见结算参数说明 | N\ninvoice_info | 开票信息 | N\nagreement_sign_params | 签约参数，支付后签约场景使用 | N\nintegration_type | 请求后页面的集成方式 | N\nrequest_from_url | 请求来源地址。如果使用ALIAPP的集成方式，用户中途取消支付会返回该地址。 | N\nbusiness_params | 商户传入业务信息，具体值要和支付宝约定，应用于安全，营销等参数直传场景，格式为json格式 | N\next_user_info | 外部指定买家 | N\n\n#### 交易查询请求参数\n\n字段 | 解释 | 必须\n---|---|---\ntrade_no | 订单支付时传入的商户订单号,和支付宝交易号不能同时为空。trade_no,transaction_id如果同时存在优先取transaction_id | Y\ntransaction_id | 支付宝交易号，和商户订单号不能同时为空 | Y\nquery_options | 查询选项，商户通过上送该字段来定制查询返回信息 | N\norg_pid | 银行间联模式下有用，其它场景请不要使用 | N\n\n#### 退款请求参数\n\n字段 | 解释 | 必须\n---|---|---\ntrade_no | 订单支付时传入的商户订单号,和支付宝交易号不能同时为空。trade_no,transaction_id如果同时存在优先取transaction_id | Y\ntransaction_id | 支付宝交易号，和商户订单号不能同时为空 | Y\nrefund_fee | 需要退款的金额，该金额不能大于订单金额,单位为元，支持两位小数 | Y\nrefund_currency | 订单退款币种信息，默认 CNY | N\nreason | 退款的原因说明 | N\nrefund_no | 标识一次退款请求，同一笔交易多次退款需要保证唯一，如需部分退款，则此参数必传。 | Y\noperator_id | 商户的操作员编号 | N\nstore_id | 商户的门店编号 | N\nterminal_id | 商户的终端编号 | N\ngoods_detail | 退款包含的商品列表信息，Json格式。其它说明详见：“商品明细说明” | N\nrefund_royalty_parameters | 退分账明细信息 | N\norg_pid | 银行间联模式下有用，其它场景请不要使用 |N\n\n\n#### 退款查询请求参数\n\n字段 | 解释 | 必须\n---|---|---\ntrade_no | 订单支付时传入的商户订单号,和支付宝交易号不能同时为空。trade_no,transaction_id如果同时存在优先取transaction_id | Y\ntransaction_id | 支付宝交易号，和商户订单号不能同时为空 | Y\nrefund_no | 请求退款接口时，传入的退款请求号，如果在退款请求时未传入，则该值为创建交易时的外部交易号 | Y\norg_pid | 银行间联模式下有用，其它场景请不要使用 | N\n\n#### 关闭交易请求参数\n\n字段 | 解释 | 必须\n---|---|---\ntrade_no | 订单支付时传入的商户订单号,和支付宝交易号不能同时为空 | Y\ntransaction_id | 该交易在支付宝系统中的交易流水号。最短 16 位，最长 64 位。和transaction_id不能同时为空，如果同时传了 transaction_id和 trade_no，则以 transaction_id为准 | Y\noperator_id | 卖家端自定义的的操作员 ID | N\n\n#### 取消交易请求参数\n\n字段 | 解释 | 必须\n---|---|---\ntrade_no | 订单支付时传入的商户订单号,和支付宝交易号不能同时为空 | Y\ntransaction_id | 该交易在支付宝系统中的交易流水号。最短 16 位，最长 64 位。和transaction_id不能同时为空，如果同时传了 transaction_id和 trade_no，则以 transaction_id为准 | Y\n\n\u003e 这个接口与 关闭交易 测试了一下，效果是一样的。具体场景不太清楚，但是官方文档描述是在当面付的时候使用\n\n#### 转账到支付宝请求参数\n\n字段 | 解释 | 必须\n---|---|---\ntrans_no | 商户转账唯一订单号 | Y\npayee_type | 收款方账户类型。默认：ALIPAY_LOGONID [详见](https://docs.open.alipay.com/api_28/alipay.fund.trans.toaccount.transfer) | Y\npayee_account | 收款方账户。与payee_type配合使用 | Y\namount | 转账金额，单位：元。 | Y\npayer_show_name | 付款方姓名 | N\npayee_real_name | 收款方真实姓名 | N\nremark | 转账备注 | N\n\n\n#### 查询转账到支付宝请求参数\n\n字段 | 解释 | 必须\n---|---|---\ntrans_no | 商户转账唯一订单号 | Y\ntransaction_id | 支付宝转账单据号：和商户转账唯一订单号不能同时为空。当和商户转账唯一订单号同时提供时，将用本参数进行查询，忽略商户转账唯一订单号。 | Y\n\n\n### 微信\n\n对于每一个微信支持的能力，并不是所有参数都支持了，有些参数绝大多数场景并不需要用到。如果确实需要请自行对源码进行修改。\n\n**配置文件模板**\n\n```php\n\n$config = [\n    'use_sandbox' =\u003e false, // 是否使用 微信支付仿真测试系统\n\n    'app_id'       =\u003e 'wxxxxxxxx',  // 公众账号ID\n    'sub_appid'    =\u003e 'wxxxxxxxx',  // 公众子商户账号ID\n    'mch_id'       =\u003e '123123123', // 商户id\n    'sub_mch_id'   =\u003e '123123123', // 子商户id\n    'md5_key'      =\u003e '23423423dsaddasdas', // md5 秘钥\n    'app_cert_pem' =\u003e 'apiclient_cert.pem',\n    'app_key_pem'  =\u003e 'apiclient_key.pem',\n    'sign_type'    =\u003e 'MD5', // MD5  HMAC-SHA256\n    'limit_pay'    =\u003e [\n        //'no_credit',\n    ], // 指定不能使用信用卡支付   不传入，则均可使用\n    'fee_type' =\u003e 'CNY', // 货币类型  当前仅支持该字段\n\n    'notify_url' =\u003e 'https://dayutalk.cn/v1/notify/wx',\n\n    'redirect_url' =\u003e 'https://dayutalk.cn/', // 如果是h5支付，可以设置该值，返回到指定页面\n];\n```\n\n#### 支付请求参数\n\n\u003e 对应channel： \\Payment\\Client::WX_CHANNEL_APP、WX_CHANNEL_BAR、WX_CHANNEL_LITE、WX_CHANNEL_PUB、WX_CHANNEL_QR、WX_CHANNEL_WAP\n\n字段 | 解释 | 必须\n---|---|---\nsubject | 商品简单描述，该字段须严格按照规范传递，具体请见[参数规定](https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=4_2) | Y\nbody | 单品优惠字段(暂未上线) | Y\ntrade_no | 商户系统内部的订单号,32个字符内、可包含字母, 其他说明见[商户订单号](https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=4_2) | Y\namount | 订单总金额，单位为元 | Y\nclient_ip | 必须传正确的用户端IP,支持ipv4、ipv6格式，获取方式详见[获取用户ip指引](https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_5) | Y\ndevice_info | 终端设备号(门店号或收银设备ID)，注意：PC网页或公众号内支付请传\"WEB\" | N\nreturn_param | 附加数据，在查询API和支付通知中原样返回，该字段主要用于商户携带订单的自定义数据 | N\ntime_expire | 订单失效时间，时间戳 | N\ngoods_tag | 商品标记，代金券或立减优惠功能的参数，说明详见[代金券或立减优惠](https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_1) | N\nscene_info | 该字段用于上报支付的场景信息，具体见微信文档 | N\n\n使用时，自行使用上面的字段构建好一个数组，并传入到 `\\Payment\\Client` 实例对应的方法中。后面均是相同，不在重复。\n\n#### 账单请求参数\n\n字段 | 解释 | 必须\n---|---|---\nbill_date | 对账单日期 | Y\nbill_type | ALL（默认值），返回当日所有订单信息（不含充值退款订单）SUCCESS，返回当日成功支付的订单（不含充值退款订单）REFUND，返回当日退款订单（不含充值退款订单） RECHARGE_REFUND，返回当日充值退款订单  | N\n\n#### 关闭交易请求参数\n\n字段 | 解释 | 必须\n---|---|---\ntrade_no | 商户系统内部订单号，要求32个字符内，且在同一个商户号下唯一。 | Y\n\n#### 撤销交易请求参数\n\n字段 | 解释 | 必须\n---|---|---\ntrade_no | 商户系统内部的订单号,transaction_id、trade_no二选一，如果同时存在优先级：transaction_id\u003e trade_no | Y\ntransaction_id | 微信的订单号，优先使用 | Y\n\n#### 退款请求参数\n\n字段 | 解释 | 必须\n---|---|---\ntransaction_id | 微信生成的订单号，在支付通知中有返回 | Y\ntrade_no | 商户系统内部订单号，要求32个字符内，且在同一个商户号下唯一。transaction_id、trade_no二选一，如果同时存在优先级：transaction_id\u003e trade_no | Y\nrefund_no | 商户系统内部的退款单号，商户系统内部唯一 ，同一退款单号多次请求只退一笔。 | Y\ntotal_fee | 订单总金额，单位为元 | Y\nrefund_fee | 退款总金额，订单总金额，单位为元 | Y \nrefund_desc | 若商户传入，会在下发给用户的退款消息中体现退款原因 | N\nrefund_account | 仅针对老资金流商户使用 | N\n\n#### 退款查询请求参数\n\n字段 | 解释 | 必须\n---|---|---\ntransaction_id | 微信订单号查询的优先级是： refund_id \u003e refund_no \u003e transaction_id \u003e trade_no | Y\ntrade_no | 商户系统内部订单号，要求32个字符内 ，且在同一个商户号下唯一。 | Y\nrefund_no | 商户系统内部的退款单号，商户系统内部唯一，同一退款单号多次请求只退一笔。 | Y\nrefund_id | 微信生成的退款单号，在申请退款接口有返回 | Y\noffset | 偏移量，当部分退款次数超过10次时可使用，表示返回的查询结果从这个偏移量开始取记录 | N\n\n#### 资金账单请求参数\n\n字段 | 解释 | 必须\n---|---|---\nbill_date | 下载对账单的日期，格式：20140603 | Y\nbill_type | 账单的资金来源账户：Basic  基本账户 Operation 运营账户 Fees 手续费账户 | Y\n\n\n#### 交易查询请求参数\n\n字段 | 解释 | 必须\n---|---|---\ntransaction_id | 微信的订单号，建议优先使用 | Y\ntrade_no | 商户系统内部订单号，要求32个字符内 ，且在同一个商户号下唯一 | Y\n\n\n#### 付款到零钱请求参数\n\n字段 | 解释 | 必须\n---|---|---\nchannel | 付款的渠道 bank:付款到银行；account:付款到账号 | Y\ndevice_info | 微信支付分配的终端设备号 | N\ntrans_no | 商户订单号，需保持唯一性(只能是字母或者数字，不能包含有其它字符) | Y\nopenid | 商户appid下，某用户的openid | Y\ncheck_name | NO_CHECK：不校验真实姓名;FORCE_CHECK：强校验真实姓名 | Y\nre_user_name | 收款用户真实姓名。如果check_name设置为FORCE_CHECK，则必填用户真实姓名 | Y\namount | 企业付款金额，单位为元 | Y\ndesc | 企业付款备注，必填。注意：备注中的敏感词会被转成字符* | Y\nclient_ip | 该IP同在商户平台设置的IP白名单中的IP没有关联，该IP可传用户端或者服务端的IP。 | Y\n\n#### 付款到银行请求参数\n\n字段 | 解释 | 必须\n---|---|---\nchannel | 付款的渠道 bank:付款到银行；account:付款到账号 | Y\ntrans_no | 商户订单号，需保持唯一性(只能是字母或者数字，不能包含有其它字符) | Y\nenc_bank_no | 收款方银行卡号（采用标准RSA算法，公钥由微信侧提供）,详见[获取RSA加密公钥API](https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_7) | Y\nenc_true_name | 收款方用户名（采用标准RSA算法，公钥由微信侧提供） | Y\nbank_code | 银行卡所在开户行编号,详见[银行编号列表](https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_4) | Y\namount | 企业付款金额，单位为元 | Y\ndesc | 企业付款到银行卡付款说明,即订单备注 | N\n\n#### 付款到零钱/银行查询请求参数\n\n字段 | 解释 | 必须\n---|---|---\ntrans_no | 商户订单号，需保持唯一（只允许数字[0~9]或字母[A~Z]和[a~z]最短8位，最长32位） | Y\n\n\n### 招商银行\n\n**配置文件模板**\n\n```php\n\n$config = [\n    'use_sandbox' =\u003e true, // 是否使用 招商测试系统\n\n    'branch_no' =\u003e 'xxx',  // 商户分行号，4位数字\n    'mch_id'    =\u003e 'xxxx', // 商户号，6位数字\n    'mer_key'   =\u003e 'xxxxxx', // 秘钥16位，包含大小写字母 数字\n\n    // 招商的公钥，建议每天凌晨2:15发起查询招行公钥请求更新公钥。\n    'cmb_pub_key' =\u003e 'xxxxx',\n\n    'op_pwd'    =\u003e 'xxxxx', // 操作员登录密码。\n    'sign_type' =\u003e 'SHA-256', // 签名算法,固定为“SHA-256”\n    'limit_pay' =\u003e 'A', // 允许支付的卡类型,默认对支付卡种不做限制，储蓄卡和信用卡均可支付   A:储蓄卡支付，即禁止信用卡支付\n\n    'notify_url' =\u003e 'https://dayutalk.cn/notify/cmb', // 支付成功的回调\n\n    'sign_notify_url' =\u003e 'https://dayutalk.cn/notify/cmb', // 成功签约结果通知地址\n    'sign_return_url' =\u003e 'https://dayutalk.cn', // 成功签约结果通知地址\n\n    'return_url' =\u003e 'https://dayutalk.cn', // 如果是h5支付，可以设置该值，返回到指定页面\n];\n```\n\n#### 支付请求参数\n\n字段 | 解释 | 必须\n---|---|---\ndate | 订单的日期，时间戳 | Y\ntrade_no | 订单号,6-32位的数字和字母组合，由商户生成 | Y\namount | 格式：xxxx.xx 固定两位小数，最大11位整数 | Y\ntime_expire | 过期时候的时间戳 | Y\nreturn_param | 发送成功支付结果通知时，将原样返回商户 | N\nbody | 显示在PC端扫码支付页面，pc支付才需要该参数 | N\nclient_ip | 商户取得的客户IP，如果有多个IP用逗号”,”分隔。 | N\nsub_mch_id | 当前订单为商户的二级商户的订单时需要传送 | N\nsub_mch_name | 当前订单为商户的二级商户的订单时需要传送 | N\nsub_mch_tp_code | 当前订单为商户的二级商户的订单时需要传送；必须为数字或字母 | N\nsub_mch_tp_name | 当前订单为商户的二级商户的订单时需要传送 | N\nmode_type | 默认不设限制，允许微信支付。 | N\nagr_no | 客户协议号 | N\nmerchant_serial_no | 协议开通请求流水号，开通协议时必填。 | N\nuser_id | 用于标识商户用户的唯一ID | N\nmobile | 手机号码 | N\nlon | 经度 | N\nlat | 纬度 | N\nrisk_level | 用户在商户系统内风险等级标识 | N\n\n#### 查询公钥请求参数\n\n\u003e 不需要参数，直接条用即可\n\n\n#### 退款请求参数\n\n字段 | 解释 | 必须\n---|---|---\ndate | 商户订单日期，支付时的订单日期 格式：yyyyMMdd | Y\ntrade_no | 商户订单号，支付时的订单号 | Y\nrefund_no | 退款流水号,商户生成，同一笔订单内，同一退款流水号只能退款一次。可用于防重复退款。 | Y\nrefund_fee | 退款金额,格式xxxx.xx，单位元 | Y\nreason | 退款描述 | N\noperator_id | 商户结账系统的操作员号，选填，若填了则会对操作员号和密码进行校验，若不填则不校验。 | N\n\n\n#### 查询订单请求参数\n\n字段 | 解释 | 必须\n---|---|---\ntype | 查询类型，A：按银行订单流水号查询（默认） B：按商户订单日期和订单号查询 | N\ntransaction_id | 银行订单流水号,type=A时必填 | Y\ndate | 商户订单日期，格式：yyyyMMdd | Y\ntrade_no | type=B时必填商户订单号 | N\noperator_id | 商户结账系统的操作员号 | N\n\n#### 已结账单请求参数\n\n字段 | 解释 | 必须\n---|---|---\nmode | 查询模式， bank：按照银行日期查询，默认； mch：按照商户日期查询 | Y\nstart_time | 开始日期，时间戳 | Y\nend_time | 结束日期，时间戳 | Y\noperator_id | 操作员号,商户结账系统的操作员号 | Y\nnext_key_value | 续传键值,长度只能为0或40；首次查询填“空”；后续查询，按应答报文中返回的nextKeyValue值原样传入。 | N\n\n#### 退款查询请求参数\n\n字段 | 解释 | 必须\n---|---|---\ntype | 查询类型 A：按银行退款流水号查单笔（默认） B：按商户订单号+商户退款流水号查单笔 C: 按商户订单号查退款 | Y\ntrade_no | \t商户订单号 | Y\ndate | 商户订单日期，时间戳 | Y\nrefund_no | 商户退款流水号长度不超过20位 | Y\nbank_serial_no | 银行退款流水号长度不超过20位 | Y\n\n#### 对账单查询请求参数\n\n字段 | 解释 | 必须\n---|---|---\ndate | 商户订单日期，时间戳 | Y\nmessage_key | 交易流水，合作方内部唯一流水 | Y\n\n\n## 设计支付系统\n\n`Payment` 解决了对接第三方渠道的各种问题，但是一个合理的支付完整系统该如何设计？估计大家还有很多疑问。关于支付系统的设计大家可以参考该项目：https://github.com/skr-shop/manuals\n\n这是我与小伙伴开源的另外一个关于电商的项目，里边对电商的各个模块设计进行了详细的描述。\n\n## 支持的接口\n\n对应到第三方的具体接口\n\n### 支付宝\n\n- [条码支付](https://docs.open.alipay.com/194/106039/)\n- [扫码支付](https://docs.open.alipay.com/194/106078/)\n- [APP支付](https://docs.open.alipay.com/204/105297/)\n- [H5支付](https://docs.open.alipay.com/203/105285/)\n- [电脑网站支付](https://docs.open.alipay.com/270/105899/)\n- [退款](https://docs.open.alipay.com/api_1/alipay.trade.refund)\n- [关闭交易](https://docs.open.alipay.com/api_1/alipay.trade.close)\n- [撤销交易](https://docs.open.alipay.com/api_1/alipay.trade.cancel) 条码/扫码支付会用到\n- [交易查询](https://docs.open.alipay.com/api_1/alipay.trade.query)\n- [退款查询](https://docs.open.alipay.com/api_1/alipay.trade.fastpay.refund.query)\n- [下载对账单](https://docs.open.alipay.com/api_15/alipay.data.dataservice.bill.downloadurl.query)\n- [转账到支付宝](https://docs.open.alipay.com/api_28/alipay.fund.trans.toaccount.transfer)\n- [支付宝转账查询](https://docs.open.alipay.com/api_28/alipay.fund.trans.order.query/)\n- [交易创建](https://docs.open.alipay.com/api_1/alipay.trade.create) 条码/扫码支付会用到\n\n### 微信\n\n支持 `普通商户与服务商两个版本`\n\n- [付款码支付](https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20\u0026index=1)\n- [JSAPI支付](https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20\u0026index=1)\n- [Native支付](https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20\u0026index=1)\n- [APP支付](https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20\u0026index=1)\n- [H5支付](https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20\u0026index=1)\n- [小程序支付](https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20\u0026index=1)\n- [退款](https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_4\u0026index=4)\n- [关闭交易](https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_3\u0026index=3)\n- [撤销交易](https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_11\u0026index=3)\n- [交易查询](https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_2\u0026index=2)\n- [退款查询](https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_5\u0026index=5)\n- [下载对账单](https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_6\u0026index=6)\n- [下载资金账单](https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_18\u0026index=7)\n- [转账到银行卡](https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_2) 该接口还有些问题待处理\n- [转账到微信零钱](https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2)\n- [银行转账查询](https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_3)\n- [微信转账查询](https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_3)\n\n\n### 招商\n\n- [APP支付](http://openhome.cmbchina.com/PayNew/pay/doc/cell/app/SDKPayAPI)\n- [H5支付](http://openhome.cmbchina.com/PayNew/pay/doc/cell/H5/OneCardPayAPI)\n- [PC扫码支付](http://openhome.cmbchina.com/PayNew/pay/doc/cell/pc/GeneratePayPageAPI)\n- [二维码支付](http://openhome.cmbchina.com/PayNew/pay/doc/cell/QRcode/QRcodePayAPI)\n- [退款](http://openhome.cmbchina.com/PayNew/pay/doc/cell/QRcode/RefundAPI)\n- [交易查询](http://openhome.cmbchina.com/PayNew/pay/doc/cell/QRcode/QuerySingleOrderAPI)\n- [退款查询](http://openhome.cmbchina.com/PayNew/pay/doc/cell/QRcode/QuerySettledRefund)\n- [查询协议](http://openhome.cmbchina.com/PayNew/pay/doc/cell/app/QueryProtocolAPI)\n- [取消协议](http://openhome.cmbchina.com/PayNew/pay/doc/cell/app/CancelProtocolAPI)\n- [查询入账明细](http://openhome.cmbchina.com/PayNew/pay/doc/cell/app/RecordedDetailsAPI)\n- [下载退款对账单](http://openhome.cmbchina.com/PayNew/pay/doc/cell/QRcode/RefundQueryAPI)\n- [下载已结账单for商户](http://openhome.cmbchina.com/PayNew/pay/doc/cell/QRcode/QuerySettledOrderByMerchantDat)\n- [下载已结账单for银行](http://openhome.cmbchina.com/PayNew/pay/doc/cell/QRcode/QuerySettledOrderByBankDate)\n- [下载对账单](http://openhome.cmbchina.com/PayNew/pay/doc/cell/QRcode/DownloadRecordedDetails)\n- [查询招行公钥](http://openhome.cmbchina.com/PayNew/pay/doc/cell/QRcode/QueryKeyAPI)\n\n# 贡献指南\n\n## 代码设计\n\n整个代码结构的设计，待补充\n\n## 开发指南\n\n接入一个新的能力该如何操作，待补充\n\n# 第三方文档\n\n- [支付宝](https://docs.open.alipay.com/api_1)\n- [微信](https://pay.weixin.qq.com/wiki/doc/api/index.html)\n- [招商银行](http://openhome.cmbchina.com/paynew/pay/Home)\n\n# License\n\nThe code for Payment is distributed under the terms of the MIT license (see [LICENSE](LICENSE)).\n\n\n[ico-license]: https://img.shields.io/github/license/helei112g/payment.svg\n[ico-version-dev]: https://img.shields.io/packagist/vpre/riverslei/payment.svg\n[ico-downloads-monthly]: https://img.shields.io/packagist/dm/riverslei/payment.svg?style=flat-square\n\n[link-packagist]: https://packagist.org/packages/riverslei/payment\n[link-downloads]: https://packagist.org/packages/riverslei/payment/stats\n[starchart-cc]: https://starchart.cc/helei112g/payment.svg\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhelei112g%2Fpayment","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhelei112g%2Fpayment","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhelei112g%2Fpayment/lists"}