{"id":13704690,"url":"https://github.com/PingPlusPlus/pingpp-php","last_synced_at":"2025-05-05T10:30:49.729Z","repository":{"id":21311414,"uuid":"24627952","full_name":"PingPlusPlus/pingpp-php","owner":"PingPlusPlus","description":null,"archived":false,"fork":false,"pushed_at":"2023-05-04T09:22:24.000Z","size":638,"stargazers_count":378,"open_issues_count":5,"forks_count":182,"subscribers_count":50,"default_branch":"master","last_synced_at":"2024-04-15T00:04:40.913Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/PingPlusPlus.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2014-09-30T07:04:40.000Z","updated_at":"2024-03-31T17:30:30.000Z","dependencies_parsed_at":"2024-01-12T10:26:09.444Z","dependency_job_id":"73af6a05-7f85-48ed-b3cf-83d3d1eeb733","html_url":"https://github.com/PingPlusPlus/pingpp-php","commit_stats":{"total_commits":153,"total_committers":10,"mean_commits":15.3,"dds":"0.47058823529411764","last_synced_commit":"0fadd17f28cf2366b4da2f7539c4b97bfa3f6f21"},"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PingPlusPlus%2Fpingpp-php","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PingPlusPlus%2Fpingpp-php/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PingPlusPlus%2Fpingpp-php/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PingPlusPlus%2Fpingpp-php/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PingPlusPlus","download_url":"https://codeload.github.com/PingPlusPlus/pingpp-php/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224440051,"owners_count":17311580,"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":[],"created_at":"2024-08-02T21:01:18.235Z","updated_at":"2025-05-05T10:30:49.722Z","avatar_url":"https://github.com/PingPlusPlus.png","language":"PHP","funding_links":[],"categories":["配置 Configuration","PHP","PHP (184)","第三方API( Third Party APIs )"],"sub_categories":["第三方api Third Party APIs"],"readme":"# Pingpp PHP SDK\n\n## 简介\n\nlib 文件夹下是 PHP SDK 文件，  \nexample 文件夹里面是简单的接入示例，该示例仅供参考。\n\n## 版本要求\n\nPHP 版本 5.6 及以上  \n你可以执行目录下的环境检测脚本，来进行一些基本检测\n\n```bash\nphp PingppEnvInspect.php\n```\n\n## 安装\n\n### 使用 Composer\n\n执行\n\n```\ncomposer require pingplusplus/pingpp-php\n```\n\n使用 Composer 的 autoload 引入\n\n```php\nrequire_once('vendor/autoload.php');\n```\n\n### 手动引入\n\n```php\nrequire_once('/path/to/pingpp-php/init.php');\n```\n\n## 接入方法\n\n### 初始化\n\n```php\n\\Pingpp\\Pingpp::setApiKey('YOUR-KEY');\n```\n\n### 设置请求签名密钥\n\n密钥需要你自己生成，公钥请填写到 [Ping++ Dashboard](https://dashboard.pingxx.com)\n\n```php\n\\Pingpp\\Pingpp::setPrivateKeyPath('/path/to/your_rsa_private_key.pem');\n```\n\n### 设置自定义 CA 证书路径\n\n```php\n\\Pingpp\\Pingpp::$caBundle = '/path/to/cacert.pem';\n```\n\n不设置时，会默认使用 SDK 包含的 CA 证书。\n如果需要手动更新 CA 证书，可从 \u003chttps://curl.haxx.se/docs/caextract.html\u003e 下载，并使用此方法设置证书路径。\n\n### 支付\n\n```php\n$ch = \\Pingpp\\Charge::create([\n    'order_no'  =\u003e '123456789',\n    'app'       =\u003e ['id' =\u003e 'APP_ID'],\n    'channel'   =\u003e 'alipay',\n    'amount'    =\u003e 100,\n    'client_ip' =\u003e '127.0.0.1',\n    'currency'  =\u003e 'cny',\n    'subject'   =\u003e 'Your Subject',\n    'body'      =\u003e 'Your Body',\n    'extra'     =\u003e $extra,\n]);\n```\n\n### charge 查询\n\n```php\n\\Pingpp\\Charge::retrieve('CHARGE_ID');\n```\n\n```php\n\\Pingpp\\Charge::all(['limit' =\u003e 5, 'app' =\u003e ['id' =\u003e 'APP_ID']]);\n```\n\n### 退款\n\n```php\n$re = \\Pingpp\\Refund::create('ch_a9CmfHTGGaz1urHiL8m5OiX1', [\n    'amount' =\u003e 1,\n    'description' =\u003e 'Your Descripton',\n]);\n```\n\n### 退款查询\n\n```php\n\\Pingpp\\Refund::retrieve('CHARGE_ID', 'REFUND_ID');\n```\n\n### 退款列表查询\n\n```php\n\\Pingpp\\Refund::all('CHARGE_ID',[\n    'limit' =\u003e 5,\n]);\n```\n\n### 微信红包\n\n```php\n\\Pingpp\\RedEnvelope::create([\n    'order_no'  =\u003e '123456789',\n    'app'       =\u003e ['id' =\u003e 'APP_ID'],\n    'channel'   =\u003e 'wx_pub',\n    'amount'    =\u003e 100,\n    'currency'  =\u003e 'cny',\n    'subject'   =\u003e 'Your Subject',\n    'body'      =\u003e 'Your Body',\n    'extra'     =\u003e [\n        'nick_name' =\u003e 'Nick Name',\n        'send_name' =\u003e 'Send Name',\n    ],\n    'recipient'   =\u003e 'Openid',\n    'description' =\u003e 'Your Description',\n]);\n```\n\n### 查询指定微信红包\n\n```php\n\\Pingpp\\RedEnvelope::retrieve('RED_ID');\n```\n\n### 查询微信红包列表\n\n```php\n\\Pingpp\\RedEnvelope::all(['limit' =\u003e 5]);\n```\n\n### 微信公众号获取签名\n\n如果使用微信 JS-SDK 来调起支付，需要在创建 `charge` 后，获取签名（`signature`），传给 HTML5 SDK。\n\n```php\n$jsapi_ticket_arr = \\Pingpp\\WxpubOAuth::getJsapiTicket($wx_app_id, $wx_app_secret);\n$ticket = $jsapi_ticket_arr['ticket'];\n```\n\n**正常情况下，`jsapi_ticket` 的有效期为 7200 秒。由于获取 `jsapi_ticket` 的 api 调用次数非常有限，频繁刷新 `jsapi_ticket` 会导致 api 调用受限，影响自身业务，开发者必须在自己的服务器全局缓存 `jsapi_ticket`。**\n\n_下面方法中 `$url` 是当前网页的 URL，不包含 `#` 及其后面部分_\n\n```php\n$signature = \\Pingpp\\WxpubOauth::getSignature($charge, $ticket, $url);\n```\n\n然后在 HTML5 SDK 里调用\n\n```javascript\npingpp.createPayment(charge, callback, signature, false);\n```\n\n### event 查询\n\n```php\n\\Pingpp\\Event::retrieve('EVT_ID');\n```\n\n### event 列表查询\n\n```php\n\\Pingpp\\Event::all(['type' =\u003e 'charge.succeeded']);\n```\n\n**详细信息请参考 [API 文档](https://pingxx.com/document/api?php)。**\n\n### 微信企业付款\n\n```php\n\\Pingpp\\Transfer::create([\n    'amount' =\u003e 100,\n    'order_no' =\u003e '123456d7890',\n    'currency' =\u003e 'cny',\n    'channel' =\u003e 'wx_pub',\n    'app' =\u003e ['id' =\u003e 'APP_ID'],\n    'type' =\u003e 'b2c',\n    'recipient' =\u003e 'o9zpMs9jIaLynQY9N6yxcZ',\n    'description' =\u003e 'testing',\n    'extra' =\u003e ['user_name' =\u003e 'User Name', 'force_check' =\u003e true]\n]);\n```\n\n### 查询指定 transfer\n\n```php\n\\Pingpp\\Transfer::retrieve('TR_ID');\n```\n\n### 撤销指定 transfer\n\n```php\n\\Pingpp\\Transfer::reverse('TR_ID');\n```\n\n### 查询 transfer 列表\n\n```php\n\\Pingpp\\Transfer::all(['limit' =\u003e 5]);\n```\n\n### 身份证认证\n\n```php\n\\Pingpp\\Identification::identify([\n    'type' =\u003e 'id_card',\n    'app' =\u003e $app_id,\n    'data' =\u003e [\n        'id_name' =\u003e '张三', // 姓名\n        'id_number' =\u003e '310181198910107641' // 身份证号\n    ]\n]);\n```\n\n### 银行卡认证\n\n```php\n\\Pingpp\\Identification::identify([\n    'type' =\u003e 'bank_card',\n    'app' =\u003e $app_id,\n    'data' =\u003e [\n        'id_name' =\u003e '张三', // 姓名\n        'id_number' =\u003e '310181198910107641', // 身份证号,\n        'card_number' =\u003e '6201111122223333', // 银行卡号\n        'phone_number' =\u003e '18623234545' // 银行预留手机号，不支持 178 号段\n    ]\n]);\n```\n\n### 批量转账\n\n```php\n\\Pingpp\\BatchTransfer::create(\n    [\n        'amount'      =\u003e 8000,\n        'app'         =\u003e APP_ID,\n        'batch_no'    =\u003e uniqid('batch'),    // 批量退款批次号，3-24位，允许字母和英文\n        'channel'     =\u003e 'alipay',\n        'description' =\u003e 'Your Description', // 批量退款详情，最多 255 个 Unicode 字符\n        'recipients'  =\u003e [ // 需要退款的  charge id 列表，一次最多 100 个\n            [\n                'account' =\u003e 'account01@alipay.com',\n                'amount'  =\u003e 5000,\n                'name'    =\u003e '张三'\n            ],\n            [\n                'account' =\u003e 'account02@alipay.com',\n                'amount'  =\u003e 3000,\n                'name'    =\u003e '李四'\n            ]\n        ],\n        'type'      =\u003e 'b2c'\n    ]\n);\n```\n\n### 查询指定批量转账\n\n```php\n\\Pingpp\\BatchTransfer::retrieve('181611151506412852'); // 批量转账对象id ，由 Ping++ 生成\n```\n\n### 查询批量转账列表\n\n```php\n\\Pingpp\\BatchTransfer::all(['page' =\u003e 1]);\n```\n\n### 批量退款\n\n```php\n\\Pingpp\\BatchRefund::create(\n    [\n        'app'         =\u003e APP_ID,\n        'batch_no'    =\u003e uniqid('batch'),    // 批量退款批次号，3-24位，允许字母和英文\n        'description' =\u003e 'Your Description', // 批量退款详情，最多 255 个 Unicode 字符\n        'charges'     =\u003e [ // 需要退款的  charge id 列表，一次最多 100 个\n            'ch_qn5G8GH1SOCCvnv10S8mXTqP',\n            'ch_SijjXL8Ki1u1arL1S49q5ifL'\n        ]\n    ]\n);\n```\n\n### 查询指定批量退款\n\n```php\n\\Pingpp\\BatchRefund::retrieve('151611141520583238'); // 批量退款对象id ，由 Ping++ 生成\n```\n\n### 查询批量退款列表\n\n```php\n\\Pingpp\\BatchRefund::all(['page' =\u003e 1]);\n```\n\n### 报关\n\n```php\n\\Pingpp\\Customs::create(\n    [\n        'app'               =\u003e APP_ID,\n        'charge'            =\u003e 'ch_L8qn10mLmr1GS8e5OODmHaL4',\n        'channel'           =\u003e 'alipay',\n        'trade_no'          =\u003e '12332132131',         // 商户报关订单号，8~20位\n        'customs_code'      =\u003e 'GUANGZHOU',\n        'amount'            =\u003e 8000,\n        'transport_amount'  =\u003e 10,\n        'is_split'          =\u003e true,\n        'sub_order_no'      =\u003e '123456',\n        'extra'  =\u003e [\n            'pay_account'   =\u003e '1234567890',\n            'certif_type'   =\u003e '02',\n            'customer_name' =\u003e 'A Name',\n            'certif_id'     =\u003e 'ID Card No',\n            'tax_amount'    =\u003e '10',\n        ]\n    ]\n);\n```\n\n### 查询指定报关\n\n```php\n\\Pingpp\\Customs::retrieve('14201609281040220109'); // 报关对象 ID，由 Ping++ 生成\n```\n\n## 创建商品订单\n\n```php\n\\Pingpp\\Order::create([\n    \"amount\" =\u003e 100,\n    \"app\" =\u003e APP_ID,\n    \"merchant_order_no\" =\u003e \"88888888888\", //商户订单号\n    \"subject\" =\u003e \"subj{$order_no}\",\n    \"currency\" =\u003e \"cny\",\n    \"body\" =\u003e \"body{$order_no}\",\n    \"uid\" =\u003e \"test_user_001\",\n    \"client_ip\" =\u003e \"192.168.0.101\",\n]);\n```\n\n## 商品订单支付\n\n```php\n\\Pingpp\\Order::pay('2011611170000003651', [\n    'balance_amount'    =\u003e 0,\n    'charge_amount'     =\u003e 10,\n    'channel' =\u003e 'alipay',\n    'extra' =\u003e [\n        'key' =\u003e 'value',\n    ],\n]);\n```\n\n## 商品订单取消\n\n```php\n\\Pingpp\\Order::cancel('2011611170000003651'); // 订单对象 ID，由 Ping++ 生成\n```\n\n## 商品订单查询接口\n\n```php\n\\Pingpp\\Order::retrieve('2011611170000003651'); // 订单对象 ID，由 Ping++ 生成\n```\n\n## 商品订单列表\n\n```php\n$params = ['app' =\u003e APP_ID];\n\\Pingpp\\Order::all($params);\n```\n\n## 商品订单退款\n\n```php\n\\Pingpp\\OrderRefund::create('2011708070000007521', [\n    'description' =\u003e 'Your description', //退款附加说明。\n    'metadata' =\u003e [],\n    'refund_mode' =\u003e 'to_source',        //退款模式。原路退回：to_source，退至余额：to_balance。默认为原路返回。\n]);\n```\n\n## 商品订单退款查询\n\n```php\n\\Pingpp\\OrderRefund::retrieve('2011611160000343961', 're_OW1CSS8KCS0KvfzDu5jTerrH');\n```\n\n## 商品订单退款列表查询\n\n```php\n\\Pingpp\\OrderRefund::all('2011611160000343961');\n```\n\n## 用户充值\n\n```php\n\\Pingpp\\Recharge::create([\n    'user' =\u003e 'user_test_01',\n    'charge' =\u003e [\n        'amount' =\u003e 100,\n        'channel' =\u003e 'alipay_qr',\n        'order_no' =\u003e substr(md5(time()), 0, 10),\n        'subject' =\u003e 'Your subject',\n        'body' =\u003e 'Your recharge body',\n        'time_expire' =\u003e time()+ 3600,\n        'client_ip' =\u003e '127.0.0.1',\n        'extra' =\u003e [],\n    ],\n    'balance_bonus' =\u003e [\n        'amount' =\u003e 10,\n    ],\n    'from_user' =\u003e 'user_test_01',\n    'description' =\u003e 'Your description',\n    'metadata' =\u003e [],\n]);\n```\n\n## 用户充值查询\n\n```php\n\\Pingpp\\Recharge::retrieve('221170807730968330240000')\n```\n\n## 查询用户充值列表\n\n```php\n$params = [\n    'page' =\u003e 1,\n    'per_page' =\u003e 100,\n];\n\\Pingpp\\Recharge::all($params);\n```\n\n## 用户充值退款\n\n```php\n\\Pingpp\\Recharge::refund('221170807730968330240000', [\n    'description' =\u003e 'Rechage refund description',\n]);\n```\n\n## 查询用户充值退款\n\n```php\n\\Pingpp\\Recharge::refund_retrieve('221170807730968330240000', 're_iTqLaTe1WTmHvXjrv9i5C8G4')\n```\n\n## 查询用户充值退款列表\n\n```php\n\\Pingpp\\Recharge::refundList('221170807730968330240000')\n```\n\n## 创建用户\n\n```php\n \\Pingpp\\User::create([\n    'id' =\u003e uniqid('uid'), // 用户 ID ，由商户提供\n ]);\n```\n\n## 查询用户\n\n```php\n\\Pingpp\\User::retrieve('uid582d35283f628');\n```\n\n## 更新用户\n\n```php\n\\Pingpp\\User::update($uid, [\n    'address' =\u003e 'Shanghai',\n    'name' =\u003e 'User Name',\n    'metadata' =\u003e [\n        'key' =\u003e 'value'\n    ],\n]);\n```\n\n## 查询用户列表\n\n```php\n$users = \\Pingpp\\User::all([\n    'page' =\u003e 1,\n    'per_page' =\u003e 10,\n]);\n```\n\n## 创建优惠券模板\n\n```php\n\\Pingpp\\CouponTemplate::create([\n    'name'             =\u003e '25OFF', // 优惠券模板名称\n    'type'             =\u003e 2,       // 优惠券模板的类型 1：现金券；2：折扣券\n    'percent_off'      =\u003e 25,      // 折扣百分比, 如 20 表示 8 折, 100 表示免费\n    'amount_available' =\u003e 10000,   // 订单金额大于等于该值时，优惠券有效（适用于满减）；0 表示无限制\n    'max_circulation'  =\u003e 1000,    // 优惠券最大生成数量，当已生成数量达到最大值时，不能再生成优惠券；默认 null，表示可以无限生成\n    'metadata'         =\u003e [],      // metadata\n    'expiration'       =\u003e null,    // 优惠券模板过期策略\n]);\n```\n\n## 查询优惠券模板列表\n\n```php\n\\Pingpp\\CouponTemplate::all([\n    'page' =\u003e 1,\n    'per_page' =\u003e 10,\n]);\n```\n\n## 查询优惠券模板\n\n```php\n\\Pingpp\\CouponTemplate::retrieve('300116082415452100000700');\n```\n\n## 更新优惠券模板\n\n```php\n$ct = \\Pingpp\\CouponTemplate::update('300116082415452100000700', [\n    'metadata' =\u003e [\n        'keys' =\u003e 'value',\n    ]\n]);\n```\n\n## 删除优惠券模板\n\n```php\n\\Pingpp\\CouponTemplate::delete('300116082415452100000700');\n```\n\n## 批量创建优惠券\n\n```php\n$coupon_tmpl_id = '300216111711085500022401'; // Ping++ 返回的优惠券模板 ID\n$params = [\n    'users' =\u003e [\n        'uid582d1756b1650',\n        'uid582d1756b1651',\n    ],\n];\n\\Pingpp\\CouponTemplate::batchCreateCoupons($coupon_tmpl_id, $params);\n```\n\n## 查询优惠券模板下的优惠券列表\n\n```php\n\\Pingpp\\CouponTemplate::couponsList('300216111711085500022401'); //  Ping++ 返回的优惠券模板 ID\n```\n\n## 创建单个优惠券\n\n```php\n$user_id = 'uid582d1756b1650'; // 用户 ID\n$params = [\n    'coupon_template' =\u003e '300216111619300600019101', // 优惠券模版 ID\n];\n\\Pingpp\\Coupon::create($user_id, $params);\n```\n\n## 查询优惠券\n\n```php\n$user_id = 'uid582d1756b1650'; // 用户 ID\n$coupon_id = '300416111711463500023901'; // 优惠券 ID\n\\Pingpp\\Coupon::retrieve($user_id, $coupon_id);\n```\n\n## 更新优惠券\n\n```php\n// 更新 Coupon 对象\n$user_id = 'uid582d1756b1650'; // 用户 ID\n$coupon_id = '300416111711571500024101'; // 优惠券 ID\n$params = [\n    'metadata' =\u003e [\n        'key' =\u003e 'value',\n    ],\n];\n\\Pingpp\\Coupon::update($user_id, $coupon_id, $params);\n```\n\n## 删除优惠券\n\n```php\n$user_id = 'uid582d1756b1650'; // 用户 ID\n$coupon_id = '300416111711463500023901'; // 优惠券 ID\n\\Pingpp\\Coupon::delete($user_id, $coupon_id);\n```\n\n## 查询用户优惠券列表\n\n```php\n$user_id = 'uid582d1756b1650'; // 用户 ID\n$search_params = [ //搜索条件，此数组可以为空\n    'page' =\u003e 1, //页码，取值范围：1~1000000000；默认值为\"1\"\n    'per_page' =\u003e 2, //每页数量，取值范围：1～100；默认值为\"20\"\n];\n\\Pingpp\\Coupon::all($user_id, $search_params);\n```\n\n## 批量提现确认\n\n```php\n$params = [\n    'withdrawals' =\u003e [\n        '1701611150302360654',\n        '1701611151015078981',\n    ]\n];\n\\Pingpp\\BatchWithdrawal::confirm($params);\n```\n\n## 批量提现撤销\n\n```php\n$params = [\n    'withdrawals' =\u003e [\n        '1701611150302360654',\n        '1701611151015078981',\n    ]\n];\n\\Pingpp\\BatchWithdrawal::cancel($params);\n\n```\n\n## 批量提现查询\n\n```php\n\\Pingpp\\BatchWithdrawal::retrieve('1901611151015122025'); //批量提现对象 ID。\n```\n\n## 批量提现列表查询\n\n```php\n$params = [\n    'per_page' =\u003e 20,\n    'page' =\u003e 1\n];\n\\Pingpp\\BatchWithdrawal::all($params);\n```\n\n## 查询用户余额明细列表\n\n```php\n\\Pingpp\\BalanceTransaction::all([]);\n```\n\n## 查询用户余额明细\n\n```php\n\\Pingpp\\BalanceTransaction::retrieve('310216111501260200000601');\n```\n\n## 余额提现申请\n\n```php\n$params = [\n    \"user\" =\u003e 'u-s.e_r1479281694040', // 用户 ID\n    \"amount\" =\u003e 200, // 转账金额\n    \"channel\" =\u003e 'unionpay', // 提现使用渠道。银联：unionpay，支付宝：alipay，微信：wx\n    \"user_fee\" =\u003e 10, // 用户需要承担的手续费\n    \"description\" =\u003e \"test232description\",\n    \"order_no\" =\u003e time() . mt_rand(11111, 99999), // 提现订单号，为长度不大于 16 的数字\n    \"extra\" =\u003e [\n        \"card_number\" =\u003e \"6214888888888888\",\n        \"user_name\" =\u003e \"张三\",\n        \"open_bank_code\" =\u003e \"0102\",\n        \"prov\" =\u003e \"上海\",\n        \"city\" =\u003e \"上海\",\n    ],\n];\n\\Pingpp\\Withdrawal::create($params);\n```\n\n## 余额提现查询\n\n```php\n\\Pingpp\\Withdrawal::retrieve('1711611161932569404');\n```\n\n## 余额提现列表查询\n\n```php\n\\Pingpp\\Withdrawal::all([\n    'per_page' =\u003e 3\n]);\n```\n\n## 创建余额赠送\n\n```php\n\\Pingpp\\BalanceBonus::create([\n    'amount' =\u003e 10,\n    'description' =\u003e '余额赠送描述',\n    'user' =\u003e 'user_test_01',\n    'order_no' =\u003e substr(md5(time()), 0, 10),\n]);\n```\n\n## 查询用户赠送\n\n```php\n\\Pingpp\\BalanceBonus::retrieve('651170807590953932800000');\n```\n\n## 查询用户余额赠送列表\n\n```php\n\\Pingpp\\BalanceBonus::all()\n```\n\n## 创建余额转账\n\n```php\n\\Pingpp\\BalanceTransfer::create(\n    [\n        'amount' =\u003e 10,\n        'user_fee' =\u003e 0,\n        'user' =\u003e 'user_001',\n        'recipient' =\u003e '0',\n        'order_no' =\u003e substr(md5(random_bytes(64)), 0, 10),\n        'description' =\u003e 'Your description',\n        'metadata' =\u003e [],\n    ]\n);\n```\n\n## 查询用户余额转账\n\n```php\n\\Pingpp\\BalanceTransfer::retrieve('661170807435256330240000');\n```\n\n## 查询用户余额转账列表\n\n```php\n\\Pingpp\\BalanceTransfer::all()\n```\n\n## 创建子商户\n\n```php\n\\Pingpp\\SubApp::create([\n    'display_name' =\u003e 'sub_app_display_name',\n    'user' =\u003e 'user_102',\n    'metadata' =\u003e [\n        'key' =\u003e 'value',\n    ],\n]);\n```\n\n## 查询子商户\n\n```php\n\\Pingpp\\SubApp::retrieve('app_1Gqj58ynP0mHeX1q');\n```\n\n## 查询子商户列表\n\n```php\n\\Pingpp\\SubApp::all();\n```\n\n## 更新子商户\n\n```php\n$sub_app = \\Pingpp\\SubApp::update('app_1Gqj58ynP0mHeX1q', [\n    'display_name' =\u003e 'display_name_2',\n    'metadata' =\u003e [\n        'key' =\u003e 'value2',\n    ],\n    'description' =\u003e 'Your description',\n]);\n```\n\n## 删除子商户\n\n```php\n\\Pingpp\\SubApp::delete('app_1Gqj58ynP0mHeX1q');\n```\n\n## 设置子商户渠道参数\n\n```php\n\\Pingpp\\Channel::create('app_1Gqj58ynP0mHeX1q', [\n    'channel' =\u003e 'alipay',\n    'params' =\u003e [\n        'fee_rate' =\u003e 60,\n        'alipay_pid' =\u003e '2088501666666666',\n        'alipay_account' =\u003e 'account@example.com',\n        'alipay_security_key' =\u003e 'Your security_key',\n        'alipay_mer_app_private_key' =\u003e '-----BEGIN RSA PRIVATE KEY-----\nMIICXQIBAAKBgQDSBOW3jdthyqSBMNJ8P+BQnfoKpL29BtvACW1gr8YhXh8EqpBU\nnUDdQgi8uYnprXBbR5O1DVnIqLKG9loEn3Rc2iqpnj3M3nSShuVByjyJjQ+DAIG2\n/cgJjGQknCLo0CKtuEIyD5xBKYVz3GLofLKqCNGDYdUIxwgaBBpssNIDGQIDAQAB\nAoGBAKmzw1taiRawA9VQegRkKQF7ZXwMOjTvwcme1H74CYUU5MOEfzOgDbW7kgvN\ncJ8dwlg/sh7uNsppZjif/4UUw5R7bSu33m1sIyglmKUYTU7Kw+ETVAPgwkQjJhek\nV/pDr143vmchAblD4RqQZTneojTkvYgci4RkHHHIIZ8lClIBAkEA/nEyCKzl0gxU\nLWMd0HKLctcwDu6NPWycffFzSg/+k1+h0GlSTp2E8J6DKOYnrlQYvK2/BnbFPfrb\nEySi+7c86QJBANNOExrr7xl54JnlZxbXNDnNrql2brPk1DsV/3Lo3Tmt8NuVqiyo\nhVE8Vs/CPRqTTSPoTV4TwSscB4Torlox9rECQB9tne+CY7TJPxCIIKOhsmXR/Kar\ngpimtMG9tC7ewOQ1OMiEad06CbSq76p6m0YmLxQHJgRHYV+hf7Pin5sV7BkCQQC6\n9KxAuJk/YC9R2r/AXL4vmoU8GLZP4lnIwWjXwaLiwryFfEEp7BywyINCpOgtWED7\nUTEK2M2jl9QrSzfgQ66xAkBm2RI+8onm/4PVKtOt8tqLjfsFGMR3g0aUwgSbznc0\nXg9dfU+YUgqfQnyAQHt9jG3/SBdmIrYoWwb7TqJZLkZI\n-----END RSA PRIVATE KEY-----',\n        'alipay_app_public_key' =\u003e '-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSBOW3jdthyqSBMNJ8P+BQnfoK\npL29BtvACW1gr8YhXh8EqpBUnUDdQgi8uYnprXBbR5O1DVnIqLKG9loEn3Rc2iqp\nnj3M3nSShuVByjyJjQ+DAIG2/cgJjGQknCLo0CKtuEIyD5xBKYVz3GLofLKqCNGD\nYdUIxwgaBBpssNIDGQIDAQAB\n-----END PUBLIC KEY-----',\n    ],\n    'banned' =\u003e false,\n    'banned_msg' =\u003e null,\n    'description' =\u003e 'alipay description',\n]);\n```\n\n## 获取子商户渠道参数\n\n```php\n\\Pingpp\\Channel::retrieve('app_1Gqj58ynP0mHeX1q', 'alipay');\n```\n\n## 更新子商户渠道参数\n\n```php\n\\Pingpp\\Channel::update('app_1Gqj58ynP0mHeX1q', 'alipay', [\n    'description' =\u003e 'new description',\n    'params' =\u003e [\n        'fee_rate' =\u003e 50,\n        'alipay_pid' =\u003e 'Your Alipay pid',\n        'alipay_account' =\u003e 'account@example.com',\n    ],\n]);\n```\n\n## 删除子商户渠道参数\n\n```php\n\\Pingpp\\Channel::delete('app_1Gqj58ynP0mHeX1q', 'alipay');\n```\n\n## 创建结算账户对象\n\n```php\n\\Pingpp\\SettleAccount::create('user_004', [\n    'channel' =\u003e 'alipay',\n    'recipient' =\u003e [\n        'type' =\u003e 'b2c', //转账类型。b2c：企业向个人付款，b2b：企业向企业付款。\n        'account' =\u003e 'account01@account.com',\n        'name' =\u003e '李狗',\n    ],\n]);\n```\n\n## 查询结算账户对象\n\n```php\n\\Pingpp\\SettleAccount::retrieve('user_008', '320217031816231000001001');\n```\n\n## 更新结算账户对象(存管相关)\n\n```php\n\\Pingpp\\SettleAccount::update(\n    'user_001', // 用户 ID\n    '320118012216303200004401', // 结算账户 ID\n    [\n        'recipient' =\u003e [\n            'account' =\u003e '6214888888888866', // 银行卡号。\n            'name' =\u003e '张三', // 接收者姓名。\n            'type' =\u003e 'b2c', // 转账类型。b2c：企业向个人付款，b2b：企业向企业付款。\n            'open_bank_code' =\u003e '0308', // 开户银行编号\n            \"open_bank\" =\u003e \"工商银行\",\n            \"sub_bank\" =\u003e \"招商银行股份有限公司上海陆家嘴支行\",\n            \"sub_bank_code\" =\u003e \"308290003773\",\n            'card_type' =\u003e 0, // 银行卡号类型，0：银行卡；1：存折。\n            'mobile' =\u003e '13822334557', // 手机号\n            \"city\" =\u003e \"上海市\",\n            \"prov\" =\u003e \"上海市\",\n        ],\n    ]\n);\n```\n\n## 删除结算账户对象\n\n```php\n\\Pingpp\\SettleAccount::delete('user_008', '320217031816231000001001');\n```\n\n## 查询结算账户对象列表\n\n```php\n\\Pingpp\\SettleAccount::all('user_008');\n```\n\n## 结算账户更新手机号（存管相关）\n\n```php\n\\Pingpp\\SettleAccount::updateMobile(\n    'user_001', // 用户 ID\n    '320118012216303200004401', // 结算账户 ID\n    [\n        'mobile' =\u003e '13822334557',\n    ]\n);\n```\n\n## 结算账号打款验证接口（存管相关）\n\n```php\n\\Pingpp\\SettleAccount::verify(\n    'user_001', // 用户 ID\n    '320118012216303200004401', // 结算账户 ID\n    [\n        'receive_amount' =\u003e 2,\n    ]\n);\n```\n\n## 批量更新分润对象\n\n```php\n$royalties = \\Pingpp\\Royalty::update([\n    'ids' =\u003e [\n        '170301124238000111',\n        '170301124238000211',\n    ],\n    'method' =\u003e 'manual', //手动标记结算: manual 或 取消手动标记结算：null\n    'description' =\u003e 'Your description',\n]);\n```\n\n## 查询分润对象\n\n```php\n\\Pingpp\\Royalty::retrieve('411170318160900002');\n```\n\n## 查询分润列表\n\n```php\n\\Pingpp\\Royalty::all();\n```\n\n## 创建分润结算对象\n\n```php\n\\Pingpp\\RoyaltySettlement::create([\n    'payer_app' =\u003e APP_ID,\n    'method' =\u003e 'alipay',   //分润的方式，余额 balance 或渠道名称，例如 alipay\n    'recipient_app' =\u003e APP_ID,\n    'created' =\u003e [\n        'gt' =\u003e 1489826451,\n        'lt' =\u003e 1492418451,\n    ],\n    'source_user' =\u003e 'user_002',\n    //'source_no' =\u003e '',\n    'min_amount' =\u003e 1,\n    'metadata' =\u003e [\n        'key' =\u003e 'value',\n    ],\n]);\n```\n\n## 查询分润结算对象\n\n```php\n\\Pingpp\\RoyaltySettlement::retrieve('431170318144700001');\n```\n\n## 更新分润结算对象\n\n```php\n\\Pingpp\\RoyaltySettlement::update('431170318144700001', [\n    'status' =\u003e 'pending' // pending, canceled\n]);\n```\n\n## 获取分润结算对象列表\n\n```php\n\\Pingpp\\RoyaltySettlement::all([\n    'payer_app' =\u003e APP_ID,\n]);\n```\n\n## 查询分润结算明细对象\n\n```php\n\\Pingpp\\RoyaltyTransaction::retrieve('441170318144700002');\n```\n\n## 查询分润结算明细对象列表\n\n```php\n\\Pingpp\\RoyaltyTransaction::all();\n```\n\n## 创建分润模板\n\n```php\n\\Pingpp\\RoyaltyTemplate::create(\n    [\n        'app' =\u003e \\Pingpp\\Pingpp::getAppId(),\n        'name' =\u003e 'royalty_template_name',\n        'rule' =\u003e [\n            'royalty_mode' =\u003e 'rate',\n            'refund_mode' =\u003e 'no_refund',\n            'allocation_mode' =\u003e 'receipt_reserved',\n            'data' =\u003e [\n                ['level' =\u003e 1, 'value' =\u003e 30],\n                ['level' =\u003e 2, 'value' =\u003e 20],\n                ['level' =\u003e 3, 'value' =\u003e 10],\n            ],\n        ],\n        'description' =\u003e 'Your description',\n    ]\n);\n```\n\n## 查询分润模板\n\n```php\n\\Pingpp\\RoyaltyTemplate::retrieve('451170807182300001')\n```\n\n## 更新分润模板\n\n```php\n\\Pingpp\\RoyaltyTemplate::update('451170807182300001', [\n    'name' =\u003e 'royalty_template_name_new',\n    'rule' =\u003e [\n        'royalty_mode' =\u003e 'fixed',\n        'refund_mode' =\u003e 'full_refund',\n        'allocation_mode' =\u003e 'service_reserved',\n        'data' =\u003e [\n            ['level' =\u003e 1, 'value' =\u003e 33],\n            ['level' =\u003e 2, 'value' =\u003e 22],\n            ['level' =\u003e 3, 'value' =\u003e 11],\n        ],\n    ],\n    'description' =\u003e 'Your description',\n]);\n```\n\n## 查询分润模板\n\n```php\n\\Pingpp\\RoyaltyTemplate::retrieve('451170807182300001')\n```\n\n## 删除分润模板\n\n```php\n\\Pingpp\\RoyaltyTemplate::delete('451170807182300001')\n```\n\n## 查询分润模板列表\n\n```php\n\\Pingpp\\RoyaltyTemplate::all()\n```\n\n## 添加分账接收方\n\n```php\n\\Pingpp\\SplitReceiver::create([\n    'app'       =\u003e APP_ID,\n    'type'      =\u003e 'MERCHANT_ID', // 分账接收方类型\n    'name'      =\u003e '示例商户全称',  // 分账接收方全称\n    'account'   =\u003e '190001001',   // 分账接收方帐号\n    'channel'   =\u003e 'wx_pub_qr',   // 分账接收方使用的渠道\n]);\n```\n\n## 查询分账接收方\n\n```php\n\\Pingpp\\SplitReceiver::retrieve('recv_1fRbIo0jME7yuL');\n```\n\n## 删除分账接收方\n\n```php\n\\Pingpp\\SplitReceiver::delete('recv_1fRbIo0jME7yuL');\n```\n\n## 查询分账接收方列表\n\n```php\n\\Pingpp\\SplitReceiver::all([\n    'app' =\u003e APP_ID,\n    'page' =\u003e 1,\n    'per_page' =\u003e 10,\n]);\n```\n\n## 分账创建\n\n```php\n\\Pingpp\\SplitProfit::create([\n    'app' =\u003e APP_ID,\n    'charge' =\u003e 'ch_aDC44OKyL8yHPG0yX9yzLy5K', // Ping++ 交易成功的 charge ID\n    'order_no' =\u003e md5(random_bytes(64)), // 分账单号，由商家自行生成，规则参照微信分账参数规则\n    'recipients' =\u003e [\n        [\n            'split_receiver' =\u003e 'recv_1fRbIo5YgIM4hl',\n            'amount' =\u003e 6,\n            'name' =\u003e '示例商户全称', // 可选参数,\n            'description' =\u003e 'Your Description',\n        ]\n    ],\n    'type' =\u003e 'split_normal', // 分账类型: split_normal 为普通分账,split_return 为完结分账,\n    'metadata' =\u003e [], // 分账元数据\n]);\n```\n\n## 请求完结分账\n\n```php\n\\Pingpp\\SplitProfit::create([\n    'app' =\u003e APP_ID,\n    'charge' =\u003e 'ch_aDC44OKyL8yHPG0yX9yzLy5K', //Ping++ 交易成功的 charge ID\n    'order_no' =\u003e md5(random_bytes(64)), //分账单号，由商家自行生成，规则参照微信分账参数规则\n    'recipients' =\u003e [\n        [\n            'split_receiver' =\u003e 'recv_1fRbIo5YgIM4hl',\n            'amount' =\u003e 6,\n            'name' =\u003e '示例商户全称', //可选参数,\n            'description' =\u003e 'Your Description',\n        ]\n    ],\n    'type' =\u003e 'split_return', //分账类型: split_normal 为普通分账,split_return 为完结分账,\n    'metadata' =\u003e [], //分账元数据\n]);\n```\n\n## 查询分账对象\n\n```php\n\\Pingpp\\SplitProfit::retrieve('sp_1iXmpPJLe71sf9');\n```\n\n## 查询分账列表\n\n```php\n\\Pingpp\\SplitProfit::all([\n    'app' =\u003e APP_ID,\n    'page' =\u003e 1,\n    'per_page' =\u003e 10,\n]);\n```\n\n## 查询分账明细列表\n\n```php\n\\Pingpp\\ProfitTransaction::all([\n    'app' =\u003e APP_ID,\n    'page' =\u003e 1,\n    'per_page' =\u003e 10,\n]);\n```\n\n## 查询分账明细\n\n```php\n\\Pingpp\\ProfitTransaction::retrieve('ptxn_1m3c7aGbDK2cpl');\n```\n\n## 查询银行支行列表\n\n```php\n\\Pingpp\\SubBank::query([\n    'app' =\u003e APP_ID, // Ping++ app id，必填\n    'channel' =\u003e 'chanpay', // transfer 渠道，必填\n    'open_bank_code' =\u003e '0308', // 银行编号，必填\n    'prov' =\u003e '浙江省', // 省份，必填\n    'city' =\u003e '宁波市', // 城市，必填\n]);\n```\n\n## 其他\n\n- [部分存管相关接口](/example/depository)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FPingPlusPlus%2Fpingpp-php","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FPingPlusPlus%2Fpingpp-php","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FPingPlusPlus%2Fpingpp-php/lists"}