mirror of
https://gitee.com/yansongda/pay.git
synced 2024-11-29 10:47:57 +08:00
docs: 使用 vitepress && 迁移至主库 (#650)
This commit is contained in:
parent
8d4be495df
commit
eba51880c5
3
.gitattributes
vendored
3
.gitattributes
vendored
@ -1,6 +1,7 @@
|
||||
/tests export-ignore
|
||||
/.github export-ignore
|
||||
/.phpunit.cache
|
||||
/.phpunit.cache export-ignore
|
||||
/docs export-ignore
|
||||
.gitattributes export-ignore
|
||||
.gitignore export-ignore
|
||||
phpunit.php export-ignore
|
||||
|
4
LICENSE
4
LICENSE
@ -1,6 +1,6 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) yansongda <me@yansongda.cn>
|
||||
Copyright (c) 2017 yansongda <me@yansongda.cn>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
@ -17,4 +17,4 @@ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
3
web/.gitignore
vendored
Normal file
3
web/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
node_modules/
|
||||
.vitepress/dist/
|
||||
yarn-error.log
|
29
web/.vitepress/config.ts
Normal file
29
web/.vitepress/config.ts
Normal file
@ -0,0 +1,29 @@
|
||||
import { defineConfig } from 'vitepress';
|
||||
import nav from './nav';
|
||||
import sidebar from "./sidebar";
|
||||
|
||||
export default defineConfig({
|
||||
lang: 'zh-CN',
|
||||
title: 'Pay',
|
||||
description: '让支付开发更简单',
|
||||
lastUpdated: true,
|
||||
head: [
|
||||
['link', { rel: 'icon', href: '/images/icon.png' }]
|
||||
],
|
||||
themeConfig: {
|
||||
logo: '/images/logo2.png',
|
||||
nav: nav,
|
||||
sidebar: sidebar,
|
||||
socialLinks: [
|
||||
{ icon: 'github', link: 'https://github.com/yansongda/pay' },
|
||||
],
|
||||
editLink: {
|
||||
pattern: 'https://github.com/yansongda/pay/edit/master/web/:path',
|
||||
text: 'Edit this page on GitHub'
|
||||
},
|
||||
footer: {
|
||||
message: 'Released under the MIT License.',
|
||||
copyright: 'Copyright © 2017-present yansongda'
|
||||
}
|
||||
}
|
||||
})
|
26
web/.vitepress/nav.ts
Normal file
26
web/.vitepress/nav.ts
Normal file
@ -0,0 +1,26 @@
|
||||
export default [
|
||||
{ text: 'Home', link: '/' },
|
||||
{
|
||||
text: '版本',
|
||||
items: [
|
||||
{
|
||||
text: '停止维护',
|
||||
items: [
|
||||
{ text: 'v1.x', link: '/docs/v1/', activeMatch: '^/docs/v1/' }
|
||||
]
|
||||
},
|
||||
{
|
||||
text: '安全支持',
|
||||
items: [
|
||||
{ text: 'v2.x', link: '/docs/v2/', activeMatch: '^/docs/v2/' }
|
||||
]
|
||||
},
|
||||
{
|
||||
text: '积极开发中',
|
||||
items: [
|
||||
{ text: 'v3.x', link: '/docs/v3/', activeMatch: '^/docs/v3/' }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
15
web/.vitepress/sidebar.ts
Normal file
15
web/.vitepress/sidebar.ts
Normal file
@ -0,0 +1,15 @@
|
||||
// @ts-ignore
|
||||
import path from 'path'
|
||||
import versions from "./versions";
|
||||
|
||||
let sidebars = versions.reduce(
|
||||
(sidebars, version) => ({
|
||||
...sidebars,
|
||||
[`/docs/${version}/`]: require(path.join(
|
||||
__dirname, `../docs/${version}/sidebar`
|
||||
))
|
||||
}),
|
||||
{}
|
||||
);
|
||||
|
||||
export default sidebars;
|
79
web/.vitepress/theme/components/HomeAuthorize.vue
Normal file
79
web/.vitepress/theme/components/HomeAuthorize.vue
Normal file
@ -0,0 +1,79 @@
|
||||
<template>
|
||||
<div class="authorize">
|
||||
<div class="container">
|
||||
<h2>授权</h2>
|
||||
<h3>类库</h3>
|
||||
<p>
|
||||
<a href="https://github.com/yansongda/pay">yansongda/pay</a> 项目采用 MIT 协议开源发布,任何人均可在遵循 MIT 协议的情况下随意使用。
|
||||
</p>
|
||||
<h3>文档</h3>
|
||||
<p>
|
||||
网站 <a href="https://pay.yansongda.cn">pay.yansongda.cn</a>(包括但不限于 `pay.yansongda.cn` 域名下所有文字、图片)以 <a href="https://creativecommons.org/licenses/by/4.0/deed.zh">CC BY SA 4.0 国际许可协议</a>授权。
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "HomeAuthorize"
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@media (min-width: 640px) {
|
||||
.authorize {
|
||||
padding: 0 48px;
|
||||
}
|
||||
}
|
||||
@media (min-width: 960px) {
|
||||
.authorize {
|
||||
padding: 0 64px;
|
||||
}
|
||||
}
|
||||
|
||||
.authorize {
|
||||
margin-top: 50px;
|
||||
padding: 0 24px;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 1152px;
|
||||
margin: 0 auto;
|
||||
|
||||
p {
|
||||
display: block;
|
||||
margin-block-start: 1em;
|
||||
margin-block-end: 1em;
|
||||
margin-inline-start: 0;
|
||||
margin-inline-end: 0;
|
||||
}
|
||||
|
||||
a {
|
||||
font-weight: 500;
|
||||
color: #3eaf7c;
|
||||
text-decoration: none;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-weight: 600;
|
||||
line-height: 1.25;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.65rem;
|
||||
padding-bottom: .3rem;
|
||||
border-bottom: 1px solid #eaecef;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.35rem;
|
||||
display: block;
|
||||
margin-block-start: 1em;
|
||||
margin-block-end: 1em;
|
||||
margin-inline-start: 0;
|
||||
margin-inline-end: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
61
web/.vitepress/theme/components/HomePrimary.vue
Normal file
61
web/.vitepress/theme/components/HomePrimary.vue
Normal file
@ -0,0 +1,61 @@
|
||||
<template>
|
||||
<div class="home">
|
||||
<div class="container">
|
||||
<img src="/images/logo.png" alt="pay logo">
|
||||
<p class="action">
|
||||
<a href="/docs/v3/" class="action-button primary">快速上手-></a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "HomePrimary"
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@media (min-width: 640px) {
|
||||
.home {
|
||||
padding: 0 48px;
|
||||
}
|
||||
}
|
||||
@media (min-width: 960px) {
|
||||
.home {
|
||||
padding: 0 64px;
|
||||
}
|
||||
}
|
||||
|
||||
.home {
|
||||
margin-bottom: 50px;
|
||||
padding: 0 24px;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 1152px;
|
||||
text-align: center;
|
||||
margin: 0 auto;
|
||||
|
||||
img {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.action .action-button {
|
||||
display: inline-block;
|
||||
font-size: 1.2rem;
|
||||
padding: .8rem 1.6rem;
|
||||
border-width: 2px;
|
||||
border-style: solid;
|
||||
border-radius: 4px;
|
||||
transition: background-color var(--t-color);
|
||||
box-sizing: border-box;
|
||||
|
||||
&.primary {
|
||||
color: #fff;
|
||||
background-color: #3eaf7c;
|
||||
border-color: #3eaf7c;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
14
web/.vitepress/theme/index.ts
Normal file
14
web/.vitepress/theme/index.ts
Normal file
@ -0,0 +1,14 @@
|
||||
import { h } from 'vue'
|
||||
import DefaultTheme from 'vitepress/theme'
|
||||
import HomePrimary from './components/HomePrimary.vue'
|
||||
import HomeAuthorize from './components/HomeAuthorize.vue'
|
||||
|
||||
export default {
|
||||
...DefaultTheme,
|
||||
Layout() {
|
||||
return h(DefaultTheme.Layout, null, {
|
||||
'home-hero-before': () => h(HomePrimary),
|
||||
'home-features-after': () => h(HomeAuthorize)
|
||||
})
|
||||
}
|
||||
}
|
1
web/.vitepress/versions.ts
Normal file
1
web/.vitepress/versions.ts
Normal file
@ -0,0 +1 @@
|
||||
export default ['v3', 'v2', 'v1'];
|
967
web/docs/v1/index.md
Normal file
967
web/docs/v1/index.md
Normal file
@ -0,0 +1,967 @@
|
||||
# v1 版本
|
||||
|
||||
**!注意:v1.x 版本已 EOF!请大家尽快迁移到 v3 版本!**
|
||||
|
||||
开发了多次支付宝与微信支付后,很自然产生一种反感,惰性又来了,想在网上找相关的轮子,可是一直没有找到一款自己觉得逞心如意的,要么使用起来太难理解,要么文件结构太杂乱,只有自己撸起袖子干了。
|
||||
|
||||
**说明,请先熟悉支付宝说明文档!!**
|
||||
|
||||
欢迎 Star,欢迎 PR!
|
||||
|
||||
laravel 扩展包请 [https://github.com/yansongda/laravel-pay](https://github.com/yansongda/laravel-pay)
|
||||
|
||||
## 特点
|
||||
- 命名不那么乱七八糟
|
||||
- 隐藏开发者不需要关注的细节
|
||||
- 根据支付宝、微信最新 API 开发而成
|
||||
- 高度抽象的类,免去各种拼json与xml的痛苦
|
||||
- 符合 PSR 标准,你可以各种方便的与你的框架集成
|
||||
- 文件结构清晰易理解,可以随心所欲添加本项目中没有的支付网关
|
||||
- 方法使用更优雅,不必再去研究那些奇怪的的方法名或者类名是做啥用的
|
||||
|
||||
|
||||
## 运行环境
|
||||
- PHP 5.6+
|
||||
- composer
|
||||
|
||||
|
||||
## 支持的支付网关
|
||||
|
||||
由于各支付网关参差不齐,所以我们抽象了两个方法 `driver()`,`gateway()`。
|
||||
|
||||
两个方法的作用如下:
|
||||
|
||||
`driver()` : 确定支付平台,如 `alipay`,`wechat`;
|
||||
|
||||
`gateway()`: 确定支付网关。通过此方法,确定支付平台下的支付网关。例如,支付宝下有 「电脑网站支付」,「手机网站支付」,「APP 支付」三种支付网关,通过传入 `web`,`wap`,`app` 确定。
|
||||
|
||||
详细思路可以查看源代码。
|
||||
|
||||
### 1、支付宝
|
||||
|
||||
- 电脑支付
|
||||
- 手机网站支付
|
||||
- APP 支付
|
||||
- 刷卡支付
|
||||
- 扫码支付
|
||||
|
||||
SDK 中对应的 driver 和 gateway 如下表所示:
|
||||
|
||||
| driver | gateway | 描述 |
|
||||
| :----: | :-----: | :-------: |
|
||||
| alipay | web | 电脑支付 |
|
||||
| alipay | wap | 手机网站支付 |
|
||||
| alipay | app | APP 支付 |
|
||||
| alipay | pos | 刷卡支付 |
|
||||
| alipay | scan | 扫码支付 |
|
||||
| alipay | transfer | 帐户转账(可用于平台用户提现) |
|
||||
|
||||
### 2、微信
|
||||
|
||||
- 公众号支付
|
||||
- 小程序支付
|
||||
- H5 支付
|
||||
- 扫码支付
|
||||
- 刷卡支付
|
||||
- APP 支付
|
||||
|
||||
SDK 中对应的 driver 和 gateway 如下表所示:
|
||||
|
||||
| driver | gateway | 描述 |
|
||||
| :----: | :-----: | :-------: |
|
||||
| wechat | mp | 公众号支付 |
|
||||
| wechat | miniapp | 小程序支付 |
|
||||
| wechat | wap | H5 支付 |
|
||||
| wechat | scan | 扫码支付 |
|
||||
| wechat | pos | 刷卡支付 |
|
||||
| wechat | app | APP 支付 |
|
||||
| wechat | transfer | 企业付款 |
|
||||
|
||||
## 支持的方法
|
||||
|
||||
所有网关均支持以下方法
|
||||
|
||||
- pay(array $config_biz)
|
||||
说明:支付接口
|
||||
参数:数组类型,订单业务配置项,包含 订单号,订单金额等
|
||||
返回:mixed 详情请看「支付网关配置说明与返回值」一节。
|
||||
|
||||
- refund(array|string $config_biz, $refund_amount = null)
|
||||
说明:退款接口
|
||||
参数:`$config_biz` 为字符串类型仅对`支付宝支付`有效,此时代表订单号,第二个参数为退款金额。
|
||||
返回:mixed 退款成功,返回 服务器返回的数组;否则返回 false;
|
||||
|
||||
- close(array|string $config_biz)
|
||||
说明:关闭订单接口
|
||||
参数:`$config_biz` 为字符串类型时代表订单号,如果为数组,则为关闭订单业务配置项,配置项内容请参考各个支付网关官方文档。
|
||||
返回:mixed 关闭订单成功,返回 服务器返回的数组;否则返回 false;
|
||||
|
||||
- find(string $out_trade_no)
|
||||
说明:查找订单接口
|
||||
参数:`$out_trade_no` 为订单号。
|
||||
返回:mixed 查找订单成功,返回 服务器返回的数组;否则返回 false;
|
||||
|
||||
- verify($data, $sign = null)
|
||||
说明:验证服务器返回消息是否合法
|
||||
参数:`$data` 为服务器接收到的原始内容,`$sign` 为签名信息,当其为空时,系统将自动转化 `$data` 为数组,然后取 `$data['sign']`。
|
||||
返回:mixed 验证成功,返回 服务器返回的数组;否则返回 false;
|
||||
|
||||
|
||||
## 安装
|
||||
```shell
|
||||
composer require "yansongda/pay:^1.0"
|
||||
```
|
||||
|
||||
## 使用说明
|
||||
|
||||
### 0、一个完整的例子:
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Yansongda\Pay\Pay;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class PayController extends Controller
|
||||
{
|
||||
protected $config = [
|
||||
'alipay' => [
|
||||
'app_id' => '2016082000295641',
|
||||
'notify_url' => 'http://yansongda.cn/alipay_notify.php',
|
||||
'return_url' => 'http://yansongda.cn/return.php',
|
||||
'ali_public_key' => 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuWJKrQ6SWvS6niI+4vEVZiYfjkCfLQfoFI2nCp9ZLDS42QtiL4Ccyx8scgc3nhVwmVRte8f57TFvGhvJD0upT4O5O/lRxmTjechXAorirVdAODpOu0mFfQV9y/T9o9hHnU+VmO5spoVb3umqpq6D/Pt8p25Yk852/w01VTIczrXC4QlrbOEe3sr1E9auoC7rgYjjCO6lZUIDjX/oBmNXZxhRDrYx4Yf5X7y8FRBFvygIE2FgxV4Yw+SL3QAa2m5MLcbusJpxOml9YVQfP8iSurx41PvvXUMo49JG3BDVernaCYXQCoUJv9fJwbnfZd7J5YByC+5KM4sblJTq7bXZWQIDAQAB',
|
||||
'private_key' => 'MIIEpAIBAAKCAQEAs6+F2leOgOrvj9jTeDhb5q46GewOjqLBlGSs/bVL4Z3fMr3p+Q1Tux/6uogeVi/eHd84xvQdfpZ87A1SfoWnEGH5z15yorccxSOwWUI+q8gz51IWqjgZxhWKe31BxNZ+prnQpyeMBtE25fXp5nQZ/pftgePyUUvUZRcAUisswntobDQKbwx28VCXw5XB2A+lvYEvxmMv/QexYjwKK4M54j435TuC3UctZbnuynSPpOmCu45ZhEYXd4YMsGMdZE5/077ZU1aU7wx/gk07PiHImEOCDkzqsFo0Buc/knGcdOiUDvm2hn2y1XvwjyFOThsqCsQYi4JmwZdRa8kvOf57nwIDAQABAoIBAQCw5QCqln4VTrTvcW+msB1ReX57nJgsNfDLbV2dG8mLYQemBa9833DqDK6iynTLNq69y88ylose33o2TVtEccGp8Dqluv6yUAED14G6LexS43KtrXPgugAtsXE253ZDGUNwUggnN1i0MW2RcMqHdQ9ORDWvJUCeZj/AEafgPN8AyiLrZeL07jJz/uaRfAuNqkImCVIarKUX3HBCjl9TpuoMjcMhz/MsOmQ0agtCatO1eoH1sqv5Odvxb1i59c8Hvq/mGEXyRuoiDo05SE6IyXYXr84/Nf2xvVNHNQA6kTckj8shSi+HGM4mO1Y4Pbb7XcnxNkT0Inn6oJMSiy56P+CpAoGBAO1O+5FE1ZuVGuLb48cY+0lHCD+nhSBd66B5FrxgPYCkFOQWR7pWyfNDBlmO3SSooQ8TQXA25blrkDxzOAEGX57EPiipXr/hy5e+WNoukpy09rsO1TMsvC+v0FXLvZ+TIAkqfnYBgaT56ku7yZ8aFGMwdCPL7WJYAwUIcZX8wZ3dAoGBAMHWplAqhe4bfkGOEEpfs6VvEQxCqYMYVyR65K0rI1LiDZn6Ij8fdVtwMjGKFSZZTspmsqnbbuCE/VTyDzF4NpAxdm3cBtZACv1Lpu2Om+aTzhK2PI6WTDVTKAJBYegXaahBCqVbSxieR62IWtmOMjggTtAKWZ1P5LQcRwdkaB2rAoGAWnAPT318Kp7YcDx8whOzMGnxqtCc24jvk2iSUZgb2Dqv+3zCOTF6JUsV0Guxu5bISoZ8GdfSFKf5gBAo97sGFeuUBMsHYPkcLehM1FmLZk1Q+ljcx3P1A/ds3kWXLolTXCrlpvNMBSN5NwOKAyhdPK/qkvnUrfX8sJ5XK2H4J8ECgYAGIZ0HIiE0Y+g9eJnpUFelXvsCEUW9YNK4065SD/BBGedmPHRC3OLgbo8X5A9BNEf6vP7fwpIiRfKhcjqqzOuk6fueA/yvYD04v+Da2MzzoS8+hkcqF3T3pta4I4tORRdRfCUzD80zTSZlRc/h286Y2eTETd+By1onnFFe2X01mwKBgQDaxo4PBcLL2OyVT5DoXiIdTCJ8KNZL9+kV1aiBuOWxnRgkDjPngslzNa1bK+klGgJNYDbQqohKNn1HeFX3mYNfCUpuSnD2Yag53Dd/1DLO+NxzwvTu4D6DCUnMMMBVaF42ig31Bs0jI3JQZVqeeFzSET8fkoFopJf3G6UXlrIEAQ==',
|
||||
],
|
||||
];
|
||||
|
||||
public function index()
|
||||
{
|
||||
$config_biz = [
|
||||
'out_trade_no' => time(),
|
||||
'total_amount' => '1',
|
||||
'subject' => 'test subject',
|
||||
];
|
||||
|
||||
$pay = new Pay($this->config);
|
||||
|
||||
return $pay->driver('alipay')->gateway()->pay($config_biz);
|
||||
}
|
||||
|
||||
public function return(Request $request)
|
||||
{
|
||||
$pay = new Pay($this->config);
|
||||
|
||||
return $pay->driver('alipay')->gateway()->verify($request->all());
|
||||
}
|
||||
|
||||
public function notify(Request $request)
|
||||
{
|
||||
$pay = new Pay($this->config);
|
||||
|
||||
if ($pay->driver('alipay')->gateway()->verify($request->all())) {
|
||||
// 请自行对 trade_status 进行判断及其它逻辑进行判断,在支付宝的业务通知中,只有交易通知状态为 TRADE_SUCCESS 或 TRADE_FINISHED 时,支付宝才会认定为买家付款成功。
|
||||
// 1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号;
|
||||
// 2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额);
|
||||
// 3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email);
|
||||
// 4、验证app_id是否为该商户本身。
|
||||
// 5、其它业务逻辑情况
|
||||
file_put_contents(storage_path('notify.txt'), "收到来自支付宝的异步通知\r\n", FILE_APPEND);
|
||||
file_put_contents(storage_path('notify.txt'), '订单号:' . $request->out_trade_no . "\r\n", FILE_APPEND);
|
||||
file_put_contents(storage_path('notify.txt'), '订单金额:' . $request->total_amount . "\r\n\r\n", FILE_APPEND);
|
||||
} else {
|
||||
file_put_contents(storage_path('notify.txt'), "收到异步通知\r\n", FILE_APPEND);
|
||||
}
|
||||
|
||||
echo "success";
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Yansongda\Pay\Pay;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class PayController extends Controller
|
||||
{
|
||||
protected $config = [
|
||||
'wechat' => [
|
||||
'app_id' => 'wxb3f6xxxxxxxxxx',
|
||||
'mch_id' => '1457xxxxx2',
|
||||
'notify_url' => 'http://yansongda.cn/wechat_notify.php',
|
||||
'key' => 'mF2suE9sU6Mk1Cxxxxxxxxxx45',
|
||||
'cert_client' => './apiclient_cert.pem',
|
||||
'cert_key' => './apiclient_key.pem',
|
||||
],
|
||||
];
|
||||
|
||||
public function index()
|
||||
{
|
||||
$config_biz = [
|
||||
'out_trade_no' => 'e2',
|
||||
'total_fee' => '1', // **单位:分**
|
||||
'body' => 'test body',
|
||||
'spbill_create_ip' => '8.8.8.8',
|
||||
'openid' => 'onkVf1FjWS5SBIihS-123456_abc',
|
||||
];
|
||||
|
||||
$pay = new Pay($this->config);
|
||||
|
||||
return $pay->driver('wechat')->gateway('mp')->pay($config_biz);
|
||||
}
|
||||
|
||||
public function notify(Request $request)
|
||||
{
|
||||
$pay = new Pay($this->config);
|
||||
$verify = $pay->driver('wechat')->gateway('mp')->verify($request->getContent());
|
||||
|
||||
if ($verify) {
|
||||
file_put_contents('notify.txt', "收到来自微信的异步通知\r\n", FILE_APPEND);
|
||||
file_put_contents('notify.txt', '订单号:' . $verify['out_trade_no'] . "\r\n", FILE_APPEND);
|
||||
file_put_contents('notify.txt', '订单金额:' . $verify['total_fee'] . "\r\n\r\n", FILE_APPEND);
|
||||
} else {
|
||||
file_put_contents(storage_path('notify.txt'), "收到异步通知\r\n", FILE_APPEND);
|
||||
}
|
||||
|
||||
echo "success";
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
### 1、准备配置参数
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
$config = [
|
||||
'alipay' => [
|
||||
'app_id' => '', // 支付宝提供的 APP_ID
|
||||
'ali_public_key' => '', // 支付宝公钥,1行填写
|
||||
'private_key' => '', // 自己的私钥,1行填写
|
||||
],
|
||||
];
|
||||
$config_biz = [
|
||||
'out_trade_no' => '12', // 订单号
|
||||
'total_amount' => '13', // 订单金额,单位:元,**微信支付,单位:分**
|
||||
'subject' => 'test subject', // 订单商品标题
|
||||
];
|
||||
```
|
||||
|
||||
### 2、在代码中使用
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
$pay = new Pay($config);
|
||||
return $pay->driver('alipay')->gateway('web')->pay($config_biz);
|
||||
```
|
||||
|
||||
|
||||
## 错误
|
||||
|
||||
使用非跳转接口(如, `refund` 接口,`close` 接口)时,如果在调用相关支付网关 API 时有错误产生,会抛出 `GatewayException` 错误,可以通过 `$e->getMessage()` 查看,同时,也可通过 `$e->raw` 查看调用 API 后返回的原始数据,该值为数组格式。
|
||||
|
||||
|
||||
## 支付网关配置说明与返回值
|
||||
|
||||
由于支付网关不同,每家参数参差不齐,为了方便,我们抽象定义了两个参数:`$config`,`$config_biz`,分别为全局参数,业务参数。但是,所有配置参数均为官方标准参数,无任何差别。
|
||||
|
||||
「业务参数」为订单相关的参数,「全局参数」为除订单相关参数以外的全局性参数。
|
||||
|
||||
具体参数列表请查看每个支付网关的使用说明。
|
||||
|
||||
### 1、支付宝 - 电脑网站支付
|
||||
|
||||
#### 最小配置参数
|
||||
```php
|
||||
<?php
|
||||
|
||||
$config = [
|
||||
'alipay' => [
|
||||
'app_id' => '', // 支付宝提供的 APP_ID
|
||||
'ali_public_key' => '', // 支付宝公钥,1行填写
|
||||
'private_key' => '', // 自己的私钥,1行填写
|
||||
],
|
||||
];
|
||||
$config_biz = [
|
||||
'out_trade_no' => '12', // 订单号
|
||||
'total_amount' => '13', // 订单金额,单位:元
|
||||
'subject' => 'test subject', // 订单商品标题
|
||||
];
|
||||
```
|
||||
|
||||
#### 所有配置参数
|
||||
|
||||
所有参数均为官方标准参数,无任何差别。[点击这里](https://docs.open.alipay.com/common/105901 '支付宝官方文档') 查看官方文档。
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
$config = [
|
||||
'alipay' => [
|
||||
'app_id' => '', // 支付宝提供的 APP_ID
|
||||
'ali_public_key' => '', // 支付宝公钥,1行填写
|
||||
'private_key' => '', // 自己的私钥,1行填写
|
||||
'return_url' => '', // 同步通知 url,*强烈建议加上本参数*
|
||||
'notify_url' => '', // 异步通知 url,*强烈建议加上本参数*
|
||||
],
|
||||
];
|
||||
$config_biz = [
|
||||
'out_trade_no' => '',
|
||||
'total_amount' => '',
|
||||
'subject' => '',
|
||||
|
||||
// 订单描述
|
||||
'body' => '',
|
||||
|
||||
// 订单包含的商品列表信息,Json格式: {"show_url":"https://或http://打头的商品的展示地址"} ,在支付时,可点击商品名称跳转到该地址
|
||||
'goods_detail' => '',
|
||||
|
||||
// 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。该参数在请求到支付宝时开始计时。
|
||||
'timeout_express' => '',
|
||||
|
||||
// 禁用渠道,用户不可用指定渠道支付当有多个渠道时用“,”分隔注:与enable_pay_channels互斥
|
||||
'disable_pay_channels' => '',
|
||||
|
||||
// 可用渠道,用户只能在指定渠道范围内支付当有多个渠道时用“,”分隔注:与disable_pay_channels互斥
|
||||
'enable_pay_channels' => '',
|
||||
|
||||
// 公用回传参数,如果请求时传递了该参数,则返回给商户时会回传该参数。支付宝只会在异步通知时将该参数原样返回。本参数必须进行UrlEncode之后才可以发送给支付宝
|
||||
'passback_params' => '',
|
||||
|
||||
// 业务扩展参数,详见 [业务扩展参数说明](https://docs.open.alipay.com/#kzcs)
|
||||
'extend_params' => '',
|
||||
|
||||
// 商品主类型:0—虚拟类商品,1—实物类商品(默认)注:虚拟类商品不支持使用花呗渠道
|
||||
'goods_type' => '',
|
||||
|
||||
// 获取用户授权信息,可实现如免登功能。获取方法请查阅:用户信息授权
|
||||
'auth_token' => '',
|
||||
|
||||
/**
|
||||
* PC扫码支付的方式,支持前置模式和跳转模式。
|
||||
*
|
||||
* 前置模式是将二维码前置到商户的订单确认页的模式。需要商户在自己的页面中以iframe方式请求支付宝页面。具体分为以下几种:
|
||||
* 0:订单码-简约前置模式,对应iframe宽度不能小于600px,高度不能小于300px;
|
||||
* 1:订单码-前置模式,对应iframe宽度不能小于300px,高度不能小于600px;
|
||||
* 3:订单码-迷你前置模式,对应iframe宽度不能小于75px,高度不能小于75px;
|
||||
* 4:订单码-可定义宽度的嵌入式二维码,商户可根据需要设定二维码的大小。
|
||||
*
|
||||
* 跳转模式下,用户的扫码界面是由支付宝生成的,不在商户的域名下。
|
||||
* 2:订单码-跳转模式
|
||||
*/
|
||||
'qr_pay_mode' => '',
|
||||
|
||||
// 商户自定义二维码宽度 注:qr_pay_mode=4时该参数生效
|
||||
'qrcode_width' => ''
|
||||
];
|
||||
```
|
||||
|
||||
#### 返回值
|
||||
- pay()
|
||||
类型:string
|
||||
说明:该接口返回跳转到支付宝支付的 Html 代码。
|
||||
|
||||
### 2、支付宝 - 手机网站支付
|
||||
|
||||
#### 最小配置参数
|
||||
```php
|
||||
<?php
|
||||
|
||||
$config = [
|
||||
'alipay' => [
|
||||
'app_id' => '', // 支付宝提供的 APP_ID
|
||||
'ali_public_key' => '', // 支付宝公钥,1行填写
|
||||
'private_key' => '', // 自己的私钥,1行填写
|
||||
],
|
||||
];
|
||||
$config_biz = [
|
||||
'out_trade_no' => '12', // 订单号
|
||||
'total_amount' => '13', // 订单金额,单位:元
|
||||
'subject' => 'test subject', // 订单商品标题
|
||||
];
|
||||
```
|
||||
|
||||
#### 所有配置参数
|
||||
|
||||
该网关大部分参数和 「电脑支付」 相同,具体请参考 [官方文档](https://docs.open.alipay.com/203/107090/ '支付宝手机网站支付文档')
|
||||
|
||||
#### 返回值
|
||||
- pay()
|
||||
类型:string
|
||||
说明:该接口返回跳转到支付宝支付的 Html 代码。
|
||||
|
||||
### 3、支付宝 - APP 支付
|
||||
|
||||
#### 最小配置参数
|
||||
```php
|
||||
<?php
|
||||
|
||||
$config = [
|
||||
'alipay' => [
|
||||
'app_id' => '', // 支付宝提供的 APP_ID
|
||||
'notify_url' => '', // 支付宝异步通知地址
|
||||
'ali_public_key' => '', // 支付宝公钥,1行填写
|
||||
'private_key' => '', // 自己的私钥,1行填写
|
||||
],
|
||||
];
|
||||
$config_biz = [
|
||||
'out_trade_no' => '12', // 订单号
|
||||
'total_amount' => '13', // 订单金额,单位:元
|
||||
'subject' => 'test subject', // 订单商品标题
|
||||
];
|
||||
```
|
||||
|
||||
#### 所有配置参数
|
||||
该网关大部分参数和 「电脑支付」 相同,具体请参考 [官方文档](https://docs.open.alipay.com/204/105465/ '支付宝APP支付文档')
|
||||
|
||||
#### 返回值
|
||||
- pay()
|
||||
类型:string
|
||||
说明:该接口返回用于客户端调用的 orderString 字符串,可直接供 APP 客户端调用,客户端调用方法不在此文档讨论范围内,[Android 用户请看这里](https://docs.open.alipay.com/204/105300/),[Ios 用户请看这里](https://docs.open.alipay.com/204/105299/)。
|
||||
|
||||
### 4、支付宝 - 刷卡支付
|
||||
|
||||
#### 最小配置参数
|
||||
```php
|
||||
<?php
|
||||
|
||||
$config = [
|
||||
'alipay' => [
|
||||
'app_id' => '', // 支付宝提供的 APP_ID
|
||||
'ali_public_key' => '', // 支付宝公钥,1行填写
|
||||
'private_key' => '', // 自己的私钥,1行填写
|
||||
],
|
||||
];
|
||||
$config_biz = [
|
||||
'out_trade_no' => '12', // 订单号
|
||||
'total_amount' => '13', // 订单金额,单位:元
|
||||
'subject' => 'test subject', // 订单商品标题
|
||||
'auth_code' => '123456', // 授权码
|
||||
];
|
||||
```
|
||||
|
||||
#### 所有配置参数
|
||||
该网关大部分参数和 「电脑支付」 相同,具体请参考 [官方文档](https://docs.open.alipay.com/api_1/alipay.trade.pay ' 支付宝APP支付文档')
|
||||
|
||||
#### 返回值
|
||||
- pay()
|
||||
类型:array|bool
|
||||
说明:该接口成功时返回服务器响应的数组;验签失败返回 false。
|
||||
|
||||
### 5、支付宝 - 扫码支付
|
||||
|
||||
#### 最小配置参数
|
||||
```php
|
||||
<?php
|
||||
|
||||
$config = [
|
||||
'alipay' => [
|
||||
'app_id' => '', // 支付宝提供的 APP_ID
|
||||
'notify_url' => '', // 支付宝异步通知地址
|
||||
'ali_public_key' => '', // 支付宝公钥,1行填写
|
||||
'private_key' => '', // 自己的私钥,1行填写
|
||||
],
|
||||
];
|
||||
$config_biz = [
|
||||
'out_trade_no' => '12', // 订单号
|
||||
'total_amount' => '13', // 订单金额,单位:元
|
||||
'subject' => 'test subject', // 订单商品标题
|
||||
];
|
||||
```
|
||||
|
||||
#### 所有配置参数
|
||||
该网关大部分参数和 「电脑支付」 相同,具体请参考 [官方文档](https://docs.open.alipay.com/api_1/alipay.trade.precreate ' 支付宝APP支付文档')
|
||||
|
||||
#### 返回值
|
||||
- pay()
|
||||
类型:string
|
||||
说明:该接口返回二维码链接,可以通过其他库转换为二维码供用户扫描。
|
||||
|
||||
### 6、支付宝 - 帐户转账
|
||||
|
||||
#### 最小配置参数
|
||||
```php
|
||||
<?php
|
||||
|
||||
$config = [
|
||||
'alipay' => [
|
||||
'app_id' => '', // 支付宝提供的 APP_ID
|
||||
'ali_public_key' => '', // 支付宝公钥,1行填写
|
||||
'private_key' => '', // 自己的私钥,1行填写
|
||||
],
|
||||
];
|
||||
$config_biz = [
|
||||
'out_biz_no' => '', // 订单号
|
||||
'payee_type' => 'ALIPAY_LOGONID', // 收款方账户类型(ALIPAY_LOGONID | ALIPAY_USERID)
|
||||
'payee_account' => 'demo@sandbox.com', // 收款方账户
|
||||
'amount' => '10', // 转账金额
|
||||
];
|
||||
```
|
||||
|
||||
#### 所有配置参数
|
||||
```php
|
||||
<?php
|
||||
|
||||
$config = [
|
||||
'alipay' => [
|
||||
'app_id' => '', // 支付宝提供的 APP_ID
|
||||
'ali_public_key' => '', // 支付宝公钥,1行填写
|
||||
'private_key' => '', // 自己的私钥,1行填写
|
||||
],
|
||||
];
|
||||
$config_biz = [
|
||||
'out_biz_no' => '', // 订单号
|
||||
'payee_type' => 'ALIPAY_LOGONID', // 收款方账户类型(ALIPAY_LOGONID | ALIPAY_USERID)
|
||||
'payee_account' => 'demo@sandbox.com', // 收款方账户
|
||||
'amount' => '10', // 转账金额
|
||||
'payer_show_name' => '未寒', // 付款方姓名
|
||||
'payee_real_name' => '张三', // 收款方真实姓名
|
||||
'remark' => '张三', // 转账备注
|
||||
];
|
||||
```
|
||||
|
||||
[官方文档](https://doc.open.alipay.com/docs/api.htm?apiId=1321&docType=4 ' 单笔转账到支付宝账户接口')
|
||||
|
||||
|
||||
#### 返回值
|
||||
- pay()
|
||||
类型:array|bool
|
||||
说明:该接口成功时返回服务器响应的数组;验签失败返回 false。
|
||||
|
||||
### 7、微信 - 公众号支付
|
||||
|
||||
#### 最小配置参数
|
||||
```php
|
||||
<?php
|
||||
|
||||
$config = [
|
||||
'wechat' => [
|
||||
'app_id' => '', // 公众号APPID
|
||||
'mch_id' => '', // 微信商户号
|
||||
'notify_url' => '',
|
||||
'key' => '', // 微信支付签名秘钥
|
||||
'cert_client' => './apiclient_cert.pem', // 客户端证书路径,退款时需要用到
|
||||
'cert_key' => './apiclient_key.pem', // 客户端秘钥路径,退款时需要用到
|
||||
],
|
||||
];
|
||||
|
||||
$config_biz = [
|
||||
'out_trade_no' => '', // 订单号
|
||||
'total_fee' => '', // 订单金额,**单位:分**
|
||||
'body' => '', // 订单描述
|
||||
'spbill_create_ip' => '', // 支付人的 IP
|
||||
'openid' => '', // 支付人的 openID
|
||||
];
|
||||
```
|
||||
|
||||
#### 所有配置参数
|
||||
所有参数均为官方标准参数,无任何差别。[点击这里](https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1 '微信支付官方文档') 查看官方文档。
|
||||
```php
|
||||
<?php
|
||||
|
||||
$config = [
|
||||
'wechat' => [
|
||||
'endpoint_url' => 'https://apihk.mch.weixin.qq.com/', // optional, default 'https://api.mch.weixin.qq.com/'
|
||||
'app_id' => '', // 公众号APPID
|
||||
'mch_id' => '', // 微信商户号
|
||||
'notify_url' => '',
|
||||
'key' => '', // 微信支付签名秘钥
|
||||
'cert_client' => './apiclient_cert.pem', // 客户端证书路径,退款时需要用到
|
||||
'cert_key' => './apiclient_key.pem', // 客户端秘钥路径,退款时需要用到
|
||||
],
|
||||
];
|
||||
|
||||
$config_biz = [
|
||||
'out_trade_no' => '', // 订单号
|
||||
'total_fee' => '', // 订单金额,**单位:分**
|
||||
'body' => '', // 订单描述
|
||||
'spbill_create_ip' => '', // 支付人的 IP
|
||||
'openid' => '', // 支付人的 openID
|
||||
|
||||
// 自定义参数,可以为终端设备号(门店号或收银设备ID),PC网页或公众号内支付可以传"WEB"
|
||||
'device_info' => '',
|
||||
|
||||
// 商品详细描述,对于使用单品优惠的商户,改字段必须按照规范上传,详见“单品优惠参数说明”
|
||||
'detail' => '',
|
||||
|
||||
// 附加数据,在查询API和支付通知中原样返回,可作为自定义参数使用。
|
||||
'attach' => '',
|
||||
|
||||
// 符合ISO 4217标准的三位字母代码,默认人民币:CNY,详细列表请参见货币类型
|
||||
'fee_type' => '',
|
||||
|
||||
// 订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则
|
||||
'time_start' => '',
|
||||
|
||||
// 订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则注意:最短失效时间间隔必须大于5分钟
|
||||
'time_expire' => '',
|
||||
|
||||
// 订单优惠标记,使用代金券或立减优惠功能时需要的参数,说明详见代金券或立减优惠
|
||||
'goods_tag' => '',
|
||||
|
||||
// trade_type=NATIVE时(即扫码支付),此参数必传。此参数为二维码中包含的商品ID,商户自行定义。
|
||||
'product_id' => '',
|
||||
|
||||
// 上传此参数no_credit--可限制用户不能使用信用卡支付
|
||||
'limit_pay' => '',
|
||||
|
||||
// 该字段用于上报场景信息,目前支持上报实际门店信息。该字段为JSON对象数据,对象格式为{"store_info":{"id": "门店ID","name": "名称","area_code": "编码","address": "地址" }} ,字段详细说明请点击行前的+展开
|
||||
'scene_info' => '',
|
||||
];
|
||||
```
|
||||
|
||||
#### 返回值
|
||||
- pay()
|
||||
类型:array
|
||||
说明:返回用于 微信内H5调起支付 的所需参数数组。后续调用不在本文档讨论范围内,具体请 [参考这里](https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6)。
|
||||
|
||||
后续调用举例:
|
||||
|
||||
```html
|
||||
<script type="text/javascript">
|
||||
function onBridgeReady(){
|
||||
WeixinJSBridge.invoke(
|
||||
'getBrandWCPayRequest', {
|
||||
"appId":"<?php echo $pay['appId']; ?>", //公众号名称,由商户传入
|
||||
"timeStamp":"<?php echo $pay['timeStamp']; ?>", //时间戳,自1970年以来的秒数
|
||||
"nonceStr":"<?php echo $pay['nonceStr']; ?>", //随机串
|
||||
"package":"<?php echo $pay['package']; ?>",
|
||||
"signType":"<?php echo $pay['signType']; ?>", //微信签名方式:
|
||||
"paySign":"<?php echo $pay['paySign']; ?>" //微信签名
|
||||
},
|
||||
function(res){
|
||||
if(res.err_msg == "get_brand_wcpay_request:ok" ) {} // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回 ok,但并不保证它绝对可靠。
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
$(function(){
|
||||
$('#pay').click(function(){
|
||||
if (typeof WeixinJSBridge == "undefined"){
|
||||
if( document.addEventListener ){
|
||||
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
|
||||
}else if (document.attachEvent){
|
||||
document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
|
||||
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
|
||||
}
|
||||
}else{
|
||||
onBridgeReady();
|
||||
}
|
||||
})
|
||||
});
|
||||
</script>
|
||||
```
|
||||
|
||||
### 8、微信 - 小程序支付
|
||||
|
||||
#### 最小配置参数
|
||||
```php
|
||||
<?php
|
||||
|
||||
$config = [
|
||||
'wechat' => [
|
||||
'miniapp_id' => '', // 小程序APPID
|
||||
'mch_id' => '', // 微信商户号
|
||||
'notify_url' => '',
|
||||
'key' => '', // 微信支付签名秘钥
|
||||
'cert_client' => './apiclient_cert.pem', // 客户端证书路径,退款时需要用到
|
||||
'cert_key' => './apiclient_key.pem', // 客户端秘钥路径,退款时需要用到
|
||||
],
|
||||
];
|
||||
|
||||
$config_biz = [
|
||||
'out_trade_no' => '', // 订单号
|
||||
'total_fee' => '', // 订单金额,**单位:分**
|
||||
'body' => '', // 订单描述
|
||||
'spbill_create_ip' => '', // 支付人的 IP
|
||||
'openid' => '', // 支付人的 openID
|
||||
];
|
||||
```
|
||||
|
||||
#### 所有配置参数
|
||||
由于「小程序支付」和「公众号支付」都使用的是 JSAPI,所以,除了 APPID 一个使用的是公众号的 APPID 一个使用的是 小程序的 APPID 以外,该网关所有参数和 「公众号支付」 相同,具体请 [参考这里](https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1)。
|
||||
|
||||
#### 返回值
|
||||
- pay()
|
||||
类型:array
|
||||
说明:返回用于 小程序调起支付API 的所需参数数组。后续调用不在本文档讨论范围内,具体请 [参考这里](https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=3)。
|
||||
|
||||
### 9、微信 - H5 支付
|
||||
#### 最小配置参数
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
$config = [
|
||||
'wechat' => [
|
||||
'app_id' => '', // 微信公众号 APPID
|
||||
'mch_id' => '', // 微信商户号
|
||||
'return_url' => '', // *此配置选项可选*,注意,该跳转 URL 只有跳转之意,没有同步通知功能
|
||||
'notify_url' => '',
|
||||
'key' => '', // 微信支付签名秘钥
|
||||
'cert_client' => './apiclient_cert.pem', // 客户端证书路径,退款时需要用到
|
||||
'cert_key' => './apiclient_key.pem', // 客户端秘钥路径,退款时需要用到
|
||||
],
|
||||
];
|
||||
|
||||
$config_biz = [
|
||||
'out_trade_no' => '', // 订单号
|
||||
'total_fee' => '', // 订单金额,**单位:分**
|
||||
'body' => '', // 订单描述
|
||||
'spbill_create_ip' => '', // 支付人的 IP
|
||||
];
|
||||
```
|
||||
|
||||
#### 所有配置参数
|
||||
所有配置项和前面支付网关相差不大,请[点击这里查看](https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20&index=1).
|
||||
|
||||
#### 返回值
|
||||
- pay()
|
||||
类型:string
|
||||
说明:返回微信支付中间页网址,可直接 302 跳转。
|
||||
|
||||
### 10、微信 - 扫码支付
|
||||
这里使用「模式二」进行扫码支付,具体请[参考这里](https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5)
|
||||
|
||||
#### 最小配置参数
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
$config = [
|
||||
'wechat' => [
|
||||
'app_id' => '', // 微信公众号 APPID
|
||||
'mch_id' => '', // 微信商户号
|
||||
'notify_url' => '',
|
||||
'key' => '', // 微信支付签名秘钥
|
||||
'cert_client' => './apiclient_cert.pem', // 客户端证书路径,退款时需要用到
|
||||
'cert_key' => './apiclient_key.pem', // 客户端秘钥路径,退款时需要用到
|
||||
],
|
||||
];
|
||||
|
||||
$config_biz = [
|
||||
'out_trade_no' => '', // 订单号
|
||||
'total_fee' => '', // 订单金额,**单位:分**
|
||||
'body' => '', // 订单描述
|
||||
'spbill_create_ip' => '', // 调用 API 服务器的 IP
|
||||
'product_id' => '', // 订单商品 ID
|
||||
];
|
||||
```
|
||||
|
||||
#### 所有配置参数
|
||||
所有配置项和前面支付网关相差不大,请[点击这里查看](https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1)
|
||||
|
||||
#### 返回值
|
||||
- pay()
|
||||
类型:string
|
||||
说明:返回微信支付二维码 URL 地址,可直接将此 url 生成二维码,展示给用户进行扫码支付。
|
||||
|
||||
### 11、微信 - 刷卡支付
|
||||
|
||||
#### 最小配置参数
|
||||
```php
|
||||
<?php
|
||||
|
||||
$config = [
|
||||
'wechat' => [
|
||||
'app_id' => '', // 公众号 APPID
|
||||
'mch_id' => '', // 微信商户号
|
||||
'key' => '', // 微信支付签名秘钥
|
||||
'cert_client' => './apiclient_cert.pem', // 客户端证书路径,退款时需要用到
|
||||
'cert_key' => './apiclient_key.pem', // 客户端秘钥路径,退款时需要用到
|
||||
],
|
||||
];
|
||||
|
||||
$config_biz = [
|
||||
'out_trade_no' => '', // 订单号
|
||||
'total_fee' => '', // 订单金额,**单位:分**
|
||||
'body' => '', // 订单描述
|
||||
'spbill_create_ip' => '', // 支付人的 IP
|
||||
'auth_code' => '', // 授权码
|
||||
];
|
||||
```
|
||||
|
||||
#### 所有配置参数
|
||||
该网关所有参数和其它支付网关基本相同,具体请 [参考这里](https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_10&index=1)。
|
||||
|
||||
#### 返回值
|
||||
- pay()
|
||||
类型:array
|
||||
说明:返回用于服务器返回的数组。返回参数请 [参考这里](https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_10&index=1)。
|
||||
|
||||
### 12、微信 - APP 支付
|
||||
|
||||
#### 最小配置参数
|
||||
```php
|
||||
<?php
|
||||
|
||||
$config = [
|
||||
'wechat' => [
|
||||
'appid' => '', // APPID
|
||||
'mch_id' => '', // 微信商户号
|
||||
'notify_url' => '',
|
||||
'key' => '', // 微信支付签名秘钥
|
||||
'cert_client' => './apiclient_cert.pem', // 客户端证书路径,退款时需要用到
|
||||
'cert_key' => './apiclient_key.pem', // 客户端秘钥路径,退款时需要用到
|
||||
],
|
||||
];
|
||||
|
||||
$config_biz = [
|
||||
'out_trade_no' => '', // 订单号
|
||||
'total_fee' => '', // 订单金额,**单位:分**
|
||||
'body' => '', // 订单描述
|
||||
'spbill_create_ip' => '', // 支付人的 IP
|
||||
];
|
||||
```
|
||||
|
||||
#### 所有配置参数
|
||||
该网关所有参数和其它支付网关相同相同,具体请 [参考这里](https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1)。
|
||||
|
||||
#### 返回值
|
||||
- pay()
|
||||
类型:array
|
||||
说明:返回用于 小程序调起支付API 的所需参数数组。后续调用不在本文档讨论范围内,具体请 [参考这里](https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5)。
|
||||
|
||||
### 12、微信 - 企业付款
|
||||
|
||||
#### 最小配置参数
|
||||
```php
|
||||
<?php
|
||||
|
||||
$config = [
|
||||
'wechat' => [
|
||||
'appid' => '', // APPID
|
||||
'mch_id' => '', // 微信商户号
|
||||
'key' => '', // 微信支付签名秘钥
|
||||
'cert_client' => './apiclient_cert.pem', // 客户端证书路径,退款时需要用到
|
||||
'cert_key' => './apiclient_key.pem', // 客户端秘钥路径,退款时需要用到
|
||||
],
|
||||
];
|
||||
|
||||
$config_biz = [
|
||||
'partner_trade_no' => '', //商户订单号
|
||||
'openid' => '', //收款人的openid
|
||||
'check_name' => 'NO_CHECK', //NO_CHECK:不校验真实姓名\FORCE_CHECK:强校验真实姓名
|
||||
// 're_user_name'=>'张三', //check_name为 FORCE_CHECK 校验实名的时候必须提交
|
||||
'amount' => 100, //企业付款金额,单位为分
|
||||
'desc' => '帐户提现', //付款说明
|
||||
'spbill_create_ip' => '192.168.0.1', //发起交易的IP地址
|
||||
];
|
||||
```
|
||||
|
||||
#### 所有配置参数
|
||||
具体请看 [官方文档](https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2)。
|
||||
|
||||
#### 返回值
|
||||
- pay()
|
||||
类型:array
|
||||
说明:返回用于 支付结果 的数组。具体请 [参考这里](https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2)。
|
||||
|
||||
### 13、微信 - 发放裂变红包
|
||||
|
||||
#### 最小配置参数
|
||||
```php
|
||||
<?php
|
||||
$config = [
|
||||
'wechat' => [
|
||||
'app_id'=>'wxaxxxxxxxx',
|
||||
'mch_id' => '1442222202',
|
||||
'key' => 'ddddddddddddddd',
|
||||
'cert_client' => 'D:\php\xxx\application\wxpay\cert\apiclient_cert.pem',
|
||||
'cert_key' => 'D:\php\xxx\application\wxpay\cert\apiclient_key.pem',
|
||||
],
|
||||
];
|
||||
|
||||
$config_biz = [
|
||||
'wxappid'=>'wxaxxxxxxxx',
|
||||
'mch_billno' => 'hb'.time(),
|
||||
'send_name'=>'萌点云科技',//商户名称
|
||||
're_openid'=>'ogg5JwsssssssssssCdXeD_S54',//用户openid
|
||||
'total_amount' =>333, // 付款金额,单位分
|
||||
'wishing'=>'提前祝你狗年大吉',//红包祝福语
|
||||
'client_ip'=>'192.168.0.1',//调用接口的机器Ip地址
|
||||
'total_num'=>'3',//红包发放总人数
|
||||
'act_name'=>'提前拜年',//活动名称
|
||||
'remark'=>'提前祝你狗年大吉,苟富贵勿相忘!', //备注
|
||||
'amt_type'=>'ALL_RAND',//ALL_RAND—全部随机,商户指定总金额和红包发放总人数,由微信支付随机计算出各红包金额
|
||||
];
|
||||
|
||||
$pay = new Pay($config);
|
||||
try
|
||||
{
|
||||
$res= $pay->driver('wechat')->gateway('groupredpack')->pay($config_biz);
|
||||
|
||||
}catch (Exception $e){
|
||||
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
#### 所有配置参数
|
||||
具体请看 [官方文档](https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_5&index=4)。
|
||||
|
||||
#### 返回值
|
||||
- pay()
|
||||
类型:array
|
||||
说明:返回用于 支付结果 的数组。具体请 [参考这里](https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_5&index=4)。
|
||||
|
||||
|
||||
### 14、微信 - 发放普通红包
|
||||
|
||||
#### 最小配置参数
|
||||
```php
|
||||
<?php
|
||||
$config = [
|
||||
'wechat' => [
|
||||
'app_id'=>'wxaxxxxxxxx',
|
||||
'mch_id' => '1442222202',
|
||||
'key' => 'ddddddddddddddd',
|
||||
'cert_client' => 'D:\php\xxx\application\wxpay\cert\apiclient_cert.pem',
|
||||
'cert_key' => 'D:\php\xxx\application\wxpay\cert\apiclient_key.pem',
|
||||
],
|
||||
];
|
||||
|
||||
$config_biz = [
|
||||
'wxappid'=>'wxaxxxxxxxx',
|
||||
'mch_billno' => 'hb'.time(),
|
||||
'send_name'=>'萌点云科技',//商户名称
|
||||
're_openid'=>'ogg5JwsssssssssssCdXeD_S54',//用户openid
|
||||
'total_amount' =>100, // 付款金额,单位分
|
||||
'wishing'=>'提前祝你狗年大吉',//红包祝福语
|
||||
'client_ip'=>'192.168.0.1',//调用接口的机器Ip地址
|
||||
'total_num'=>'1',//红包发放总人数
|
||||
'act_name'=>'提前拜年',//活动名称
|
||||
'remark'=>'提前祝你狗年大吉,苟富贵勿相忘!', //备注
|
||||
];
|
||||
|
||||
$pay = new Pay($config);
|
||||
try
|
||||
{
|
||||
$res= $pay->driver('wechat')->gateway('redpack')->pay($config_biz);
|
||||
|
||||
}catch (Exception $e){
|
||||
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
#### 所有配置参数
|
||||
具体请看 [官方文档](https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3)。
|
||||
|
||||
#### 返回值
|
||||
- pay()
|
||||
类型:array
|
||||
说明:返回用于 支付结果 的数组。具体请 [参考这里](https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3)。
|
||||
## 代码贡献
|
||||
由于测试及使用环境的限制,本项目中只开发了「支付宝」和「微信支付」的相关支付网关。
|
||||
|
||||
如果您有其它支付网关的需求,或者发现本项目中需要改进的代码,**_欢迎 Fork 并提交 PR!_**
|
||||
|
||||
## LICENSE
|
||||
MIT
|
1
web/docs/v1/sidebar.js
Normal file
1
web/docs/v1/sidebar.js
Normal file
@ -0,0 +1 @@
|
||||
exports = module.exports = []
|
25
web/docs/v2/alipay/callback.md
Normal file
25
web/docs/v2/alipay/callback.md
Normal file
@ -0,0 +1,25 @@
|
||||
# 接收回调
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:------:|:---:|:----------:|
|
||||
| verify | 无 | Collection |
|
||||
|
||||
使用的加密方式为支付宝官方推荐的 **RSA2**,目前只支持这一种加密方式,且没有支持其他加密方式的计划。
|
||||
|
||||
## 例子
|
||||
|
||||
```php
|
||||
$result = $alipay->verify();
|
||||
// 是的,你没有看错,就是这么简单!
|
||||
|
||||
// return $alipay->success()->send(); // laravel 框架直接 return $alipay->success();
|
||||
```
|
||||
|
||||
## 配置参数
|
||||
|
||||
无
|
||||
|
||||
|
||||
## 返回值
|
||||
|
||||
返回 Collection 类型,可以通过 `$collection->xxx` 得到服务器返回的数据。
|
25
web/docs/v2/alipay/cancel.md
Normal file
25
web/docs/v2/alipay/cancel.md
Normal file
@ -0,0 +1,25 @@
|
||||
# 取消
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:------:|:-------------------:|:----------:|
|
||||
| cancel | string/array $order | Collection |
|
||||
|
||||
## 例子
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_trade_no' => '1514027114',
|
||||
];
|
||||
// $order = '1514027114';
|
||||
|
||||
$result = $alipay->cancel($order);
|
||||
```
|
||||
|
||||
## 配置参数
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://docs.open.alipay.com/api_1/alipay.trade.cancel/),查看「请求参数」一栏。
|
||||
|
||||
|
||||
## 返回值
|
||||
|
||||
返回 Collection 类型,可以通过 `$collection->xxx` 得到服务器返回的数据。
|
27
web/docs/v2/alipay/close.md
Normal file
27
web/docs/v2/alipay/close.md
Normal file
@ -0,0 +1,27 @@
|
||||
# 关闭
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:-----:|:-------------------:|:----------:|
|
||||
| close | string/array $order | Collection |
|
||||
|
||||
## 例子
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_trade_no' => '1514027114',
|
||||
];
|
||||
|
||||
// $order = '1514027114';
|
||||
|
||||
$result = $alipay->close($order);
|
||||
```
|
||||
|
||||
|
||||
## 配置参数
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://docs.open.alipay.com/api_1/alipay.trade.close/),查看「请求参数」一栏。
|
||||
|
||||
|
||||
## 返回值
|
||||
|
||||
返回 Collection 类型,可以通过 `$collection->xxx` 得到服务器返回的数据。
|
27
web/docs/v2/alipay/download.md
Normal file
27
web/docs/v2/alipay/download.md
Normal file
@ -0,0 +1,27 @@
|
||||
# 下载对账单
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:--------:|:------------------:|:------:|
|
||||
| download | string/array $bill | string |
|
||||
|
||||
## 例子
|
||||
|
||||
```php
|
||||
$bill = [
|
||||
'bill_date' => '2016-04-05', // 2016-04
|
||||
'bill_type' => 'trade'
|
||||
];
|
||||
|
||||
// $bill = '2016-04-05';
|
||||
|
||||
$url = $alipay->download($bill);
|
||||
```
|
||||
|
||||
## 配置参数
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://docs.open.alipay.com/api_15/alipay.data.dataservice.bill.downloadurl.query),查看「请求参数」一栏。
|
||||
|
||||
|
||||
## 返回值
|
||||
|
||||
返回 string 类型。直接返回账单下载链接。
|
48
web/docs/v2/alipay/find.md
Normal file
48
web/docs/v2/alipay/find.md
Normal file
@ -0,0 +1,48 @@
|
||||
# 查询
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:----:|:--------------------------------------:|:----------:|
|
||||
| find | string/array $order, string/null $type | Collection |
|
||||
|
||||
## 查询普通支付订单
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_trade_no' => '1514027114',
|
||||
];
|
||||
|
||||
// $order = '1514027114';
|
||||
|
||||
$result = $alipay->find($order);
|
||||
```
|
||||
|
||||
## 查询退款订单
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_trade_no' => '1514027114',
|
||||
'out_request_no' => '1514027114'
|
||||
];
|
||||
|
||||
$result = $alipay->find($order, 'refund');
|
||||
```
|
||||
|
||||
|
||||
## 查询转账订单
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_trade_no' => '1514027114',
|
||||
];
|
||||
// $order = '1514027114';
|
||||
|
||||
$result = $alipay->find($order, 'transfer');
|
||||
```
|
||||
|
||||
## 配置参数
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://docs.open.alipay.com/api_1/alipay.trade.query/),查看「请求参数」一栏。
|
||||
|
||||
## 返回值
|
||||
|
||||
返回 Collection 类型,可以通过 `$collection->xxx` 得到服务器返回的数据。
|
90
web/docs/v2/alipay/index.md
Normal file
90
web/docs/v2/alipay/index.md
Normal file
@ -0,0 +1,90 @@
|
||||
# 概述
|
||||
|
||||
**请先熟悉 支付宝支付 开发文档!**
|
||||
|
||||
使用的加密方式为支付宝官方推荐的 **RSA2**,目前只支持这一种加密方式,且没有支持其他加密方式的计划。
|
||||
|
||||
## 快速上手
|
||||
|
||||
```php
|
||||
use Yansongda\Pay\Pay;
|
||||
|
||||
$config = [
|
||||
'app_id' => '2016082000295641',
|
||||
'notify_url' => 'http://yansongda.cn/notify.php',
|
||||
'return_url' => 'http://yansongda.cn/return.php',
|
||||
'ali_public_key' => 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuWJKrQ6SWvS6niI+4vEVZiYfjkCfLQfoFI2nCp9ZLDS42QtiL4Ccyx8scgc3nhVwmVRte8f57TFvGhvJD0upT4O5O/lRxmTjechXAorirVdAODpOu0mFfQV9y/T9o9hHnU+VmO5spoVb3umqpq6D/Pt8p25Yk852/w01VTIczrXC4QlrbOEe3sr1E9auoC7rgYjjCO6lZUIDjX/oBmNXZxhRDrYx4Yf5X7y8FRBFvygIE2FgxV4Yw+SL3QAa2m5MLcbusJpxOml9YVQfP8iSurx41PvvXUMo49JG3BDVernaCYXQCoUJv9fJwbnfZd7J5YByC+5KM4sblJTq7bXZWQIDAQAB',
|
||||
'private_key' => 'MIIEpAIBAAKCAQEAs6+F2leOgOrvj9jTeDhb5q46GewOjqLBlGSs/bVL4Z3fMr3p+Q1Tux/6uogeVi/eHd84xvQdfpZ87A1SfoWnEGH5z15yorccxSOwWUI+q8gz51IWqjgZxhWKe31BxNZ+prnQpyeMBtE25fXp5nQZ/pftgePyUUvUZRcAUisswntobDQKbwx28VCXw5XB2A+lvYEvxmMv/QexYjwKK4M54j435TuC3UctZbnuynSPpOmCu45ZhEYXd4YMsGMdZE5/077ZU1aU7wx/gk07PiHImEOCDkzqsFo0Buc/knGcdOiUDvm2hn2y1XvwjyFOThsqCsQYi4JmwZdRa8kvOf57nwIDAQABAoIBAQCw5QCqln4VTrTvcW+msB1ReX57nJgsNfDLbV2dG8mLYQemBa9833DqDK6iynTLNq69y88ylose33o2TVtEccGp8Dqluv6yUAED14G6LexS43KtrXPgugAtsXE253ZDGUNwUggnN1i0MW2RcMqHdQ9ORDWvJUCeZj/AEafgPN8AyiLrZeL07jJz/uaRfAuNqkImCVIarKUX3HBCjl9TpuoMjcMhz/MsOmQ0agtCatO1eoH1sqv5Odvxb1i59c8Hvq/mGEXyRuoiDo05SE6IyXYXr84/Nf2xvVNHNQA6kTckj8shSi+HGM4mO1Y4Pbb7XcnxNkT0Inn6oJMSiy56P+CpAoGBAO1O+5FE1ZuVGuLb48cY+0lHCD+nhSBd66B5FrxgPYCkFOQWR7pWyfNDBlmO3SSooQ8TQXA25blrkDxzOAEGX57EPiipXr/hy5e+WNoukpy09rsO1TMsvC+v0FXLvZ+TIAkqfnYBgaT56ku7yZ8aFGMwdCPL7WJYAwUIcZX8wZ3dAoGBAMHWplAqhe4bfkGOEEpfs6VvEQxCqYMYVyR65K0rI1LiDZn6Ij8fdVtwMjGKFSZZTspmsqnbbuCE/VTyDzF4NpAxdm3cBtZACv1Lpu2Om+aTzhK2PI6WTDVTKAJBYegXaahBCqVbSxieR62IWtmOMjggTtAKWZ1P5LQcRwdkaB2rAoGAWnAPT318Kp7YcDx8whOzMGnxqtCc24jvk2iSUZgb2Dqv+3zCOTF6JUsV0Guxu5bISoZ8GdfSFKf5gBAo97sGFeuUBMsHYPkcLehM1FmLZk1Q+ljcx3P1A/ds3kWXLolTXCrlpvNMBSN5NwOKAyhdPK/qkvnUrfX8sJ5XK2H4J8ECgYAGIZ0HIiE0Y+g9eJnpUFelXvsCEUW9YNK4065SD/BBGedmPHRC3OLgbo8X5A9BNEf6vP7fwpIiRfKhcjqqzOuk6fueA/yvYD04v+Da2MzzoS8+hkcqF3T3pta4I4tORRdRfCUzD80zTSZlRc/h286Y2eTETd+By1onnFFe2X01mwKBgQDaxo4PBcLL2OyVT5DoXiIdTCJ8KNZL9+kV1aiBuOWxnRgkDjPngslzNa1bK+klGgJNYDbQqohKNn1HeFX3mYNfCUpuSnD2Yag53Dd/1DLO+NxzwvTu4D6DCUnMMMBVaF42ig31Bs0jI3JQZVqeeFzSET8fkoFopJf3G6UXlrIEAQ==',
|
||||
'log' => [ // optional
|
||||
'file' => './logs/alipay.log',
|
||||
'level' => 'info', // 建议生产环境等级调整为 info,开发环境为 debug
|
||||
'type' => 'single', // optional, 可选 daily.
|
||||
'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
|
||||
],
|
||||
'http' => [ // optional
|
||||
'timeout' => 5.0,
|
||||
'connect_timeout' => 5.0,
|
||||
// 更多配置项请参考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
|
||||
],
|
||||
// 'mode' => 'dev', // optional,设置此参数,将进入沙箱模式
|
||||
];
|
||||
|
||||
// 支付
|
||||
$order = [
|
||||
'out_trade_no' => time(),
|
||||
'total_amount' => '1',
|
||||
'subject' => 'test subject - 测试',
|
||||
];
|
||||
|
||||
$alipay = Pay::alipay($config)->web($order);
|
||||
|
||||
return $alipay->send();// laravel 框架中请直接 `return $alipay`
|
||||
|
||||
// 退款
|
||||
$order = [
|
||||
'out_trade_no' => '1514027114',
|
||||
'refund_amount' => '0.01',
|
||||
];
|
||||
|
||||
$result = Pay::alipay($config)->refund($order); // 返回 `Yansongda\Supports\Collection` 实例,可以通过 `$result->xxx` 访问服务器返回的数据。
|
||||
|
||||
|
||||
// 查询
|
||||
$result = Pay::alipay($config)->find('out_trade_no_123456'); // 返回 `Yansongda\Supports\Collection` 实例,可以通过 `$result->xxx` 访问服务器返回的数据。
|
||||
|
||||
|
||||
// 取消
|
||||
$result = Pay::alipay($config)->cancel('out_trade_no_123456'); // 返回 `Yansongda\Supports\Collection` 实例,可以通过 `$result->xxx` 访问服务器返回的数据。
|
||||
|
||||
|
||||
// 关闭
|
||||
$result = Pay::alipay($config)->close('out_trade_no_123456'); // 返回 `Yansongda\Supports\Collection` 实例,可以通过 `$result->xxx` 访问服务器返回的数据。
|
||||
|
||||
|
||||
// 验证服务器数据
|
||||
$alipay = Pay::alipay($config)
|
||||
|
||||
// 是的,验签就这么简单!
|
||||
$data = $alipay->verify(); // 返回 `Yansongda\Supports\Collection` 实例,可以通过 `$data->xxx` 访问服务器返回的数据。
|
||||
|
||||
$alipay->success()->send(); // 向支付宝服务器确认接收到的数据。laravel 框架中请直接 `return $alipay->success()`
|
||||
```
|
||||
|
||||
## 服务商模式
|
||||
|
||||
在原有 config 配置基础上mode 设为 `service`新增 pid 参数。具体如下:
|
||||
|
||||
```php
|
||||
$config=[
|
||||
//省略上述参数
|
||||
...
|
||||
'mode' => 'service',//设为service
|
||||
'pid' => '2016082000295641',//这里填写支付服务商的pid信息
|
||||
];
|
||||
```
|
||||
|
||||
|
||||
## 注意
|
||||
|
||||
后续文档中,如果没有特别说明, `$alipay` 均代表`Pay::alipay($config)`
|
||||
|
191
web/docs/v2/alipay/pay.md
Normal file
191
web/docs/v2/alipay/pay.md
Normal file
@ -0,0 +1,191 @@
|
||||
# 支付
|
||||
|
||||
支付宝支付目前支持 7 种支付方法,对应的支付 method 如下:
|
||||
|
||||
| method | 说明 | 参数 | 返回值 |
|
||||
|:--------:|:------:|:------------:|:----------:|
|
||||
| web | 电脑支付 | array $order | Response |
|
||||
| wap | 手机网站支付 | array $order | Response |
|
||||
| app | APP 支付 | array $order | Response |
|
||||
| pos | 刷卡支付 | array $order | Collection |
|
||||
| scan | 扫码支付 | array $order | Collection |
|
||||
| transfer | 账户转账 | array $order | Collection |
|
||||
| mini | 小程序支付 | array $order | Collection |
|
||||
|
||||
## 电脑支付
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_trade_no' => time(),
|
||||
'total_amount' => '0.01',
|
||||
'subject' => 'test subject-测试订单',
|
||||
// 'http_method' => 'GET' // 如果想在 wap 支付时使用 GET 方式提交,请加上此参数。默认使用 POST 方式提交
|
||||
];
|
||||
|
||||
return $alipay->web($order)->send(); // laravel 框架中请直接 return $alipay->web($order)
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`product_code` 等参数。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://docs.open.alipay.com/270/alipay.trade.page.pay),查看「请求参数」一栏。
|
||||
|
||||
|
||||
## 手机网站支付
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_trade_no' => time(),
|
||||
'total_amount' => '0.01',
|
||||
'subject' => 'test subject-测试订单',
|
||||
// 'http_method' => 'GET' // 如果想在 wap 支付时使用 GET 方式提交,请加上此参数。默认使用 POST 方式提交
|
||||
];
|
||||
|
||||
return $alipay->wap($order)->send(); // laravel 框架中请直接 return $alipay->wap($order)
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`product_code` 等参数。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://docs.open.alipay.com/203/107090/),查看「请求参数」一栏。
|
||||
|
||||
|
||||
## APP 支付
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_trade_no' => time(),
|
||||
'total_amount' => '0.01',
|
||||
'subject' => 'test subject-测试订单',
|
||||
];
|
||||
|
||||
// 将返回字符串,供后续 APP 调用,调用方式不在本文档讨论范围内,请参考官方文档。
|
||||
return $alipay->app($order)->send(); // laravel 框架中请直接 return $alipay->app($order)
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`product_code` 等参数。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://docs.open.alipay.com/204/105465/),查看「请求参数」一栏。
|
||||
|
||||
|
||||
## 刷卡支付
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_trade_no' => time(),
|
||||
'total_amount' => '0.01',
|
||||
'subject' => 'test subject-刷卡支付',
|
||||
'auth_code' => '289756915257123456',
|
||||
];
|
||||
|
||||
$result = $alipay->pos($order);
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`product_code` 等参数。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://docs.open.alipay.com/api_1/alipay.trade.pay),查看「请求参数」一栏。
|
||||
|
||||
|
||||
## 扫码支付
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_trade_no' => time(),
|
||||
'total_amount' => '0.01',
|
||||
'subject' => 'test subject-刷卡支付',
|
||||
];
|
||||
|
||||
$result = $alipay->scan($order);
|
||||
//二维码内容: $qr = $result->qr_code;
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`product_code` 等参数。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://docs.open.alipay.com/api_1/alipay.trade.precreate),查看「请求参数」一栏。
|
||||
|
||||
|
||||
## 账户转账
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_biz_no' => time(),
|
||||
'trans_amount' => '0.01',
|
||||
'product_code' => 'TRANS_ACCOUNT_NO_PWD',
|
||||
'payee_info' => [
|
||||
'identity' => 'ghdhjw7124@sandbox.com',
|
||||
'identity_type' => 'ALIPAY_LOGON_ID',
|
||||
],
|
||||
];
|
||||
|
||||
$result = $alipay->transfer($order);
|
||||
```
|
||||
|
||||
### 查询转账订单
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_trade_no' => '1514027114',
|
||||
];
|
||||
// $order = '1514027114';
|
||||
|
||||
$result = $alipay->find($order, 'transfer');
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://docs.open.alipay.com/api_28/alipay.fund.trans.uni.transfer/),查看「请求参数」一栏。
|
||||
|
||||
|
||||
## 小程序支付
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_trade_no' => time(),
|
||||
'subject' => 'test subject-小程序支付',
|
||||
'total_amount' => '0.01',
|
||||
'buyer_id' => 2088622190161234,
|
||||
];
|
||||
|
||||
$result = $alipay->mini($order);
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`product_code` 等参数。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://docs.open.alipay.com/api_1/alipay.trade.create/),查看「请求参数」一栏。
|
||||
|
||||
小程序支付接入文档:[https://docs.alipay.com/mini/introduce/pay](https://docs.alipay.com/mini/introduce/pay)。
|
||||
|
||||
## 返回值
|
||||
|
||||
**各支付方法返回值请顶部表格**
|
||||
|
||||
返回只会返回两种类型 `Symfony\Component\HttpFoundation\Response` 或 `Yansongda\Supports\Collection`
|
||||
|
||||
* 返回 Response 类型时,可以通过 `return $response->send()` 直接进行返回(laravel 框架中使用请直接`return $response` )
|
||||
* 返回 Collection 类型时,可以通过 `$collection->xxx` 得到服务器返回的数据。
|
26
web/docs/v2/alipay/refund.md
Normal file
26
web/docs/v2/alipay/refund.md
Normal file
@ -0,0 +1,26 @@
|
||||
# 退款
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:------:|:------------:|:----------:|
|
||||
| refund | array $order | Collection |
|
||||
|
||||
## 退款操作
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_trade_no' => '1514027114',
|
||||
'refund_amount' => '0.01',
|
||||
];
|
||||
|
||||
$result = $alipay->refund($order);
|
||||
```
|
||||
|
||||
|
||||
## 配置参数
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://docs.open.alipay.com/api_1/alipay.trade.refund),查看「请求参数」一栏。
|
||||
|
||||
|
||||
## 返回值
|
||||
|
||||
返回 Collection 类型,可以通过 `$collection->xxx` 得到服务器返回的数据。
|
23
web/docs/v2/alipay/response.md
Normal file
23
web/docs/v2/alipay/response.md
Normal file
@ -0,0 +1,23 @@
|
||||
# 确认回调
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:-------:|:---:|:--------:|
|
||||
| success | 无 | Response |
|
||||
|
||||
## 例子
|
||||
|
||||
```php
|
||||
// $result = $alipay->verify();
|
||||
|
||||
return $alipay->success()->send(); // laravel 框架直接 return $alipay->success();
|
||||
```
|
||||
|
||||
|
||||
## 订单配置参数
|
||||
|
||||
无
|
||||
|
||||
|
||||
## 返回值
|
||||
|
||||
返回 Response 类型,可以通过`return $response->send();` 进行返回;如果在 laravel 框架中,可直接 `return $response;`
|
13
web/docs/v2/contribute.md
Normal file
13
web/docs/v2/contribute.md
Normal file
@ -0,0 +1,13 @@
|
||||
# 代码贡献
|
||||
|
||||
由于测试及使用环境的限制,本项目中只开发了「支付宝」和「微信支付」的相关支付网关。
|
||||
|
||||
如果您有其它支付网关的需求,或者发现本项目中需要改进的代码,**_欢迎 Fork 并提交 PR!_**
|
||||
|
||||
## 赏一杯瑞幸吧
|
||||
|
||||
![pay](/images/pay.jpg)
|
||||
|
||||
## LICENSE
|
||||
|
||||
MIT
|
74
web/docs/v2/events/class.md
Normal file
74
web/docs/v2/events/class.md
Normal file
@ -0,0 +1,74 @@
|
||||
# 事件说明
|
||||
|
||||
## 支付开始
|
||||
|
||||
- 事件类:Yansongda\Pay\Events\PayStarting::class
|
||||
- 说明:此事件将在最开始进行支付时进行抛出。此时 SDK 只进行了相关初始化操作,其它所有操作均未开始。
|
||||
- 额外数据:
|
||||
- $driver (支付机构)
|
||||
- $gateway (支付网关)
|
||||
- $params (传递的原始参数)
|
||||
|
||||
|
||||
## 支付初始化完毕
|
||||
|
||||
- 事件类:Yansongda\Pay\Events\PayStarted
|
||||
- 说明:此事件将在所有参数处理完毕时抛出。
|
||||
- 额外数据:
|
||||
- $driver (支付机构)
|
||||
- $gateway (支付网关)
|
||||
- $endpoint (支付的 url endpoint)
|
||||
- $payload (数据)
|
||||
|
||||
|
||||
## 开始调用API
|
||||
|
||||
- 事件类:Yansongda\Pay\Events\ApiRequesting
|
||||
- 说明:此事件将在请求支付方的 API 前抛出。
|
||||
- 额外数据:
|
||||
- $driver (支付机构)
|
||||
- $gateway (支付网关)
|
||||
- $endpoint (支付的 url endpoint)
|
||||
- $payload (数据)
|
||||
|
||||
|
||||
## 调用API结束
|
||||
|
||||
- 事件类:Yansongda\Pay\Events\ApiRequested
|
||||
- 说明:此事件将在请求支付方的 API 完成之后抛出。
|
||||
- 额外数据:
|
||||
- $driver (支付机构)
|
||||
- $gateway (支付网关)
|
||||
- $endpoint (支付的 url endpoint)
|
||||
- $result (请求后的返回数据)
|
||||
|
||||
|
||||
## 验签失败
|
||||
|
||||
- 事件类:Yansongda\Pay\Events\SignFailed
|
||||
- 说明:此事件将在签名验证失败时抛出。
|
||||
- 额外数据:
|
||||
- $driver (支付机构)
|
||||
- $gateway (支付网关)
|
||||
- $data (验签数据)
|
||||
|
||||
|
||||
## 收到通知
|
||||
|
||||
- 事件类:Yansongda\Pay\Events\RequestReceived
|
||||
- 说明:此事件将在收到支付方的请求(通常在异步通知或同步通知)时抛出
|
||||
- 额外数据:
|
||||
- $driver (支付机构)
|
||||
- $gateway (支付网关)
|
||||
- $data (收到的数据)
|
||||
|
||||
|
||||
## 调用其它方法
|
||||
|
||||
- 事件类:Yansongda\Pay\Events\MethodCalled
|
||||
- 说明:此事件将在调用除 PAYMETHOD 方法(例如,查询订单,退款,取消订单)时抛出
|
||||
- 额外数据:
|
||||
- $driver (支付机构)
|
||||
- $gateway (调用方法)
|
||||
- $endpoint (支付的 url endpoint)
|
||||
- $payload (数据)
|
9
web/docs/v2/events/index.md
Normal file
9
web/docs/v2/events/index.md
Normal file
@ -0,0 +1,9 @@
|
||||
# 概述
|
||||
|
||||
:::tip
|
||||
v2.6.0-beta.1 及以上可用
|
||||
:::
|
||||
|
||||
在支付过程中,可能会想监听一些事件,好同时处理一些其它任务。
|
||||
|
||||
SDK 使用 [symfony/event-dispatcher](https://github.com/symfony/event-dispatcher) 组件进行事件的相关操作。
|
32
web/docs/v2/events/usage.md
Normal file
32
web/docs/v2/events/usage.md
Normal file
@ -0,0 +1,32 @@
|
||||
# 事件使用
|
||||
|
||||
::: tip
|
||||
使用事件系统前,确保已初始化 pay。即调用了 `Pay::xxx($config)`
|
||||
:::
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
use Yansongda\Pay\Events;
|
||||
use Yansongda\Pay\Events\PayStarting;
|
||||
|
||||
// 1. 新建一个监听器
|
||||
class PayStartingListener
|
||||
{
|
||||
public function sendEmail(PayStarting $event)
|
||||
{
|
||||
// 可以直接通过 $event 获取事件的额外数据,例如:
|
||||
// 支付提供商: $event->driver // alipay/wechat
|
||||
// 支付 gateway:$event->gateway // app/web/pos/scan ...
|
||||
// 支付传递的参数:$event->params
|
||||
|
||||
// coding to send email...
|
||||
}
|
||||
}
|
||||
|
||||
// 2. 添加监听器
|
||||
Events::addListener(PayStarting::class, [new PayStartingListener(), 'sendEmail']);
|
||||
|
||||
// 3. 喝杯咖啡
|
||||
|
||||
```
|
123
web/docs/v2/index.md
Normal file
123
web/docs/v2/index.md
Normal file
@ -0,0 +1,123 @@
|
||||
# 快速入门
|
||||
|
||||
该文档为 v2.x 版本,如果您想找 v1.x 版本文档,请点击[https://github.com/yansongda/pay/tree/v1](https://github.com/yansongda/pay/tree/v1)
|
||||
|
||||
**注意:v1.x 与 v2.x 版本不兼容**
|
||||
|
||||
开发了多次支付宝与微信支付后,很自然产生一种反感,惰性又来了,想在网上找相关的轮子,可是一直没有找到一款自己觉得逞心如意的,要么使用起来太难理解,要么文件结构太杂乱,只有自己撸起袖子干了。
|
||||
|
||||
**!!请先熟悉 支付宝/微信 说明文档!!请具有基本的 debug 能力!!**
|
||||
|
||||
欢迎 Star,欢迎 PR!
|
||||
|
||||
laravel 扩展包请 [https://github.com/yansongda/laravel-pay](https://github.com/yansongda/laravel-pay)
|
||||
|
||||
QQ交流群:690027516
|
||||
|
||||
---
|
||||
|
||||
|
||||
## 特点
|
||||
- 丰富的事件系统
|
||||
- 命名不那么乱七八糟
|
||||
- 隐藏开发者不需要关注的细节
|
||||
- 根据支付宝、微信最新 API 开发而成
|
||||
- 高度抽象的类,免去各种拼json与xml的痛苦
|
||||
- 符合 PSR 标准,你可以各种方便的与你的框架集成
|
||||
- 文件结构清晰易理解,可以随心所欲添加本项目中没有的支付网关
|
||||
- 方法使用更优雅,不必再去研究那些奇怪的的方法名或者类名是做啥用的
|
||||
|
||||
|
||||
## 支持的支付方法
|
||||
### 1、支付宝
|
||||
- 电脑支付
|
||||
- 手机网站支付
|
||||
- APP 支付
|
||||
- 刷卡支付
|
||||
- 扫码支付
|
||||
- 账户转账
|
||||
- 小程序支付
|
||||
|
||||
| method | 描述 |
|
||||
| :-------: | :-------: |
|
||||
| web | 电脑支付 |
|
||||
| wap | 手机网站支付 |
|
||||
| app | APP 支付 |
|
||||
| pos | 刷卡支付 |
|
||||
| scan | 扫码支付 |
|
||||
| transfer | 帐户转账 |
|
||||
| mini | 小程序支付 |
|
||||
|
||||
### 2、微信
|
||||
- 公众号支付
|
||||
- 小程序支付
|
||||
- H5 支付
|
||||
- 扫码支付
|
||||
- 刷卡支付
|
||||
- APP 支付
|
||||
- 企业付款
|
||||
- 普通红包
|
||||
- 分裂红包
|
||||
|
||||
| method | 描述 |
|
||||
| :-----: | :-------: |
|
||||
| mp | 公众号支付 |
|
||||
| miniapp | 小程序支付 |
|
||||
| wap | H5 支付 |
|
||||
| scan | 扫码支付 |
|
||||
| pos | 刷卡支付 |
|
||||
| app | APP 支付 |
|
||||
| transfer | 企业付款 |
|
||||
| redpack | 普通红包 |
|
||||
| groupRedpack | 分裂红包 |
|
||||
|
||||
|
||||
## 支持的方法
|
||||
所有网关均支持以下方法
|
||||
|
||||
- find(array/string $order)
|
||||
说明:查找订单接口
|
||||
参数:`$order` 为 `string` 类型时,请传入系统订单号,对应支付宝或微信中的 `out_trade_no`; `array` 类型时,参数请参考支付宝或微信官方文档。
|
||||
返回:查询成功,返回 `Yansongda\Supports\Collection` 实例,可以通过 `$colletion->xxx` 或 `$collection['xxx']` 访问服务器返回的数据。
|
||||
异常:`GatewayException` 或 `InvalidSignException`
|
||||
|
||||
- refund(array $order)
|
||||
说明:退款接口
|
||||
参数:`$order` 数组格式,退款参数。
|
||||
返回:退款成功,返回 `Yansongda\Supports\Collection` 实例,可以通过 `$colletion->xxx` 或 `$collection['xxx']` 访问服务器返回的数据。
|
||||
异常:`GatewayException` 或 `InvalidSignException`
|
||||
|
||||
- cancel(array/string $order)
|
||||
说明:取消订单接口
|
||||
参数:`$order` 为 `string` 类型时,请传入系统订单号,对应支付宝或微信中的 `out_trade_no`; `array` 类型时,参数请参考支付宝或微信官方文档。
|
||||
返回:取消成功,返回 `Yansongda\Supports\Collection` 实例,可以通过 `$colletion->xxx` 或 `$collection['xxx']` 访问服务器返回的数据。
|
||||
异常:`GatewayException` 或 `InvalidSignException`
|
||||
|
||||
- close(array/string $order)
|
||||
说明:关闭订单接口
|
||||
参数:`$order` 为 `string` 类型时,请传入系统订单号,对应支付宝或微信中的 `out_trade_no`; `array` 类型时,参数请参考支付宝或微信官方文档。
|
||||
返回:关闭成功,返回 `Yansongda\Supports\Collection` 实例,可以通过 `$colletion->xxx` 或 `$collection['xxx']` 访问服务器返回的数据。
|
||||
异常:`GatewayException` 或 `InvalidSignException`
|
||||
|
||||
- verify()
|
||||
说明:验证服务器返回消息是否合法
|
||||
返回:验证成功,返回 `Yansongda\Supports\Collection` 实例,可以通过 `$colletion->xxx` 或 `$collection['xxx']` 访问服务器返回的数据。
|
||||
异常:`GatewayException` 或 `InvalidSignException`
|
||||
|
||||
- PAYMETHOD(array $order)
|
||||
说明:进行支付;具体支付方法名称请参考「支持的支付方法」一栏
|
||||
返回:成功,返回 `Yansongda\Supports\Collection` 实例,可以通过 `$colletion->xxx` 或 `$collection['xxx']` 访问服务器返回的数据或 `Symfony\Component\HttpFoundation\Response` 实例,可通过 `return $response->send()`(laravel 框架中直接 `return $response`) 返回,具体请参考文档。
|
||||
异常:`GatewayException` 或 `InvalidSignException`
|
||||
|
||||
|
||||
## 错误
|
||||
|
||||
如果在调用相关支付网关 API 时有错误产生,会抛出 `GatewayException`,`InvalidSignException` 错误,可以通过 `$e->getMessage()` 查看,同时,也可通过 `$e->raw` 查看调用 API 后返回的原始数据,该值为数组格式。
|
||||
|
||||
|
||||
## 所有异常
|
||||
|
||||
* Yansongda\Pay\Exceptions\InvalidGatewayException ,表示使用了除本 SDK 支持的支付网关。
|
||||
* Yansongda\Pay\Exceptions\InvalidSignException ,表示验签失败。
|
||||
* Yansongda\Pay\Exceptions\InvalidConfigException ,表示缺少配置参数,如,`ali_public_key`, `private_key` 等。
|
||||
* Yansongda\Pay\Exceptions\GatewayException ,表示支付宝/微信服务器返回的数据非正常结果,例如,参数错误,对账单不存在等。
|
13
web/docs/v2/installation.md
Normal file
13
web/docs/v2/installation.md
Normal file
@ -0,0 +1,13 @@
|
||||
# 安装
|
||||
|
||||
## 运行环境
|
||||
- PHP 7.0+ (v2.8.0 开始 >= 7.1.3)
|
||||
- composer
|
||||
|
||||
> php5 请使用 v1.x 版本[https://github.com/yansongda/pay/tree/v1.x](https://github.com/yansongda/pay/tree/v1.x)
|
||||
|
||||
|
||||
## 安装方式
|
||||
```shell
|
||||
composer require yansongda/pay:^2.10 -vvv
|
||||
```
|
26
web/docs/v2/logger/usage.md
Normal file
26
web/docs/v2/logger/usage.md
Normal file
@ -0,0 +1,26 @@
|
||||
# 日志系统
|
||||
|
||||
SDK 自带日志系统,如果需要指定日志文件或日志级别,请 config 中传入下列参数。如果不传入,默认为 `warning` 级别,日志路径在 `sys_get_temp_dir().'/logs/yansongda.pay.log' `
|
||||
|
||||
## 配置
|
||||
|
||||
```php
|
||||
'log' => [
|
||||
'file' => './logs/pay.log', // 请注意权限
|
||||
'level' => 'info', // 建议生产环境等级调整为 info,开发环境为 debug
|
||||
'type' => 'single', // optional, 可选 daily, daily 时将按时间自动划分文件.
|
||||
'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
|
||||
],
|
||||
```
|
||||
|
||||
## 使用
|
||||
|
||||
:::tip
|
||||
使用日志功能前,请先确认已经使用过支付等功能进行了初始化!
|
||||
:::
|
||||
|
||||
```php
|
||||
use Yansongda\Pay\Log;
|
||||
|
||||
Log::debug('Paying...', $order->all());
|
||||
```
|
29
web/docs/v2/others/faq.md
Normal file
29
web/docs/v2/others/faq.md
Normal file
@ -0,0 +1,29 @@
|
||||
# FAQ
|
||||
|
||||
1. 支付宝支付成功,但是对返回数据验签老是失败。
|
||||
|
||||
绝大部分问题都是配置问题,首先请确认 **正确填写了支付宝公钥(注意不是应用公钥)**。
|
||||
|
||||
如果还没解决,请参考 github 的 issue:[https://github.com/yansongda/pay/issues/73](https://github.com/yansongda/pay/issues/73)
|
||||
|
||||
如果仍然没解决,请检查您所使用的框架是否对 get/post 数据进行了增加,请自行处理好 Nginx/Apache 对框架的 URL 重写问题
|
||||
|
||||
2. 我是做 API 的,怎样可以不用 send 出 Response 中的内容?
|
||||
|
||||
返回的 Response 中,`$response->getContent()` 可获取内容,RedirectResponse 中,`$response->getTargetUrl()` 可获取跳转链接,JsonResponse 中,`$response->getContent()` 可获取Json。
|
||||
|
||||
3. cURL error 60: SSL certificate problem: unable to get local issuer certificate
|
||||
|
||||
服务器环境配置问题。
|
||||
|
||||
请参考 [https://github.com/yansongda/pay/issues/16](https://github.com/yansongda/pay/issues/16)
|
||||
|
||||
4. 是否支持其他支付平台?比如:银联、京东。
|
||||
|
||||
由于使用限制,暂不支持。
|
||||
|
||||
**欢迎 PR!**
|
||||
|
||||
5. 支付宝是否支持 AES 等加密方式?
|
||||
|
||||
因为支付宝推荐 RSA2 ,所以不推荐也不支持除 **RSA2** 以外的任何加密方式!
|
149
web/docs/v2/quickUsage.md
Normal file
149
web/docs/v2/quickUsage.md
Normal file
@ -0,0 +1,149 @@
|
||||
# 快速上手
|
||||
|
||||
## 支付宝
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Yansongda\Pay\Pay;
|
||||
use Yansongda\Pay\Log;
|
||||
|
||||
class PayController
|
||||
{
|
||||
protected $config = [
|
||||
'app_id' => '2016082000295641',
|
||||
'notify_url' => 'http://yansongda.cn/notify.php',
|
||||
'return_url' => 'http://yansongda.cn/return.php',
|
||||
'ali_public_key' => 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuWJKrQ6SWvS6niI+4vEVZiYfjkCfLQfoFI2nCp9ZLDS42QtiL4Ccyx8scgc3nhVwmVRte8f57TFvGhvJD0upT4O5O/lRxmTjechXAorirVdAODpOu0mFfQV9y/T9o9hHnU+VmO5spoVb3umqpq6D/Pt8p25Yk852/w01VTIczrXC4QlrbOEe3sr1E9auoC7rgYjjCO6lZUIDjX/oBmNXZxhRDrYx4Yf5X7y8FRBFvygIE2FgxV4Yw+SL3QAa2m5MLcbusJpxOml9YVQfP8iSurx41PvvXUMo49JG3BDVernaCYXQCoUJv9fJwbnfZd7J5YByC+5KM4sblJTq7bXZWQIDAQAB',
|
||||
// 加密方式: **RSA2**
|
||||
'private_key' => 'MIIEpAIBAAKCAQEAs6+F2leOgOrvj9jTeDhb5q46GewOjqLBlGSs/bVL4Z3fMr3p+Q1Tux/6uogeVi/eHd84xvQdfpZ87A1SfoWnEGH5z15yorccxSOwWUI+q8gz51IWqjgZxhWKe31BxNZ+prnQpyeMBtE25fXp5nQZ/pftgePyUUvUZRcAUisswntobDQKbwx28VCXw5XB2A+lvYEvxmMv/QexYjwKK4M54j435TuC3UctZbnuynSPpOmCu45ZhEYXd4YMsGMdZE5/077ZU1aU7wx/gk07PiHImEOCDkzqsFo0Buc/knGcdOiUDvm2hn2y1XvwjyFOThsqCsQYi4JmwZdRa8kvOf57nwIDAQABAoIBAQCw5QCqln4VTrTvcW+msB1ReX57nJgsNfDLbV2dG8mLYQemBa9833DqDK6iynTLNq69y88ylose33o2TVtEccGp8Dqluv6yUAED14G6LexS43KtrXPgugAtsXE253ZDGUNwUggnN1i0MW2RcMqHdQ9ORDWvJUCeZj/AEafgPN8AyiLrZeL07jJz/uaRfAuNqkImCVIarKUX3HBCjl9TpuoMjcMhz/MsOmQ0agtCatO1eoH1sqv5Odvxb1i59c8Hvq/mGEXyRuoiDo05SE6IyXYXr84/Nf2xvVNHNQA6kTckj8shSi+HGM4mO1Y4Pbb7XcnxNkT0Inn6oJMSiy56P+CpAoGBAO1O+5FE1ZuVGuLb48cY+0lHCD+nhSBd66B5FrxgPYCkFOQWR7pWyfNDBlmO3SSooQ8TQXA25blrkDxzOAEGX57EPiipXr/hy5e+WNoukpy09rsO1TMsvC+v0FXLvZ+TIAkqfnYBgaT56ku7yZ8aFGMwdCPL7WJYAwUIcZX8wZ3dAoGBAMHWplAqhe4bfkGOEEpfs6VvEQxCqYMYVyR65K0rI1LiDZn6Ij8fdVtwMjGKFSZZTspmsqnbbuCE/VTyDzF4NpAxdm3cBtZACv1Lpu2Om+aTzhK2PI6WTDVTKAJBYegXaahBCqVbSxieR62IWtmOMjggTtAKWZ1P5LQcRwdkaB2rAoGAWnAPT318Kp7YcDx8whOzMGnxqtCc24jvk2iSUZgb2Dqv+3zCOTF6JUsV0Guxu5bISoZ8GdfSFKf5gBAo97sGFeuUBMsHYPkcLehM1FmLZk1Q+ljcx3P1A/ds3kWXLolTXCrlpvNMBSN5NwOKAyhdPK/qkvnUrfX8sJ5XK2H4J8ECgYAGIZ0HIiE0Y+g9eJnpUFelXvsCEUW9YNK4065SD/BBGedmPHRC3OLgbo8X5A9BNEf6vP7fwpIiRfKhcjqqzOuk6fueA/yvYD04v+Da2MzzoS8+hkcqF3T3pta4I4tORRdRfCUzD80zTSZlRc/h286Y2eTETd+By1onnFFe2X01mwKBgQDaxo4PBcLL2OyVT5DoXiIdTCJ8KNZL9+kV1aiBuOWxnRgkDjPngslzNa1bK+klGgJNYDbQqohKNn1HeFX3mYNfCUpuSnD2Yag53Dd/1DLO+NxzwvTu4D6DCUnMMMBVaF42ig31Bs0jI3JQZVqeeFzSET8fkoFopJf3G6UXlrIEAQ==',
|
||||
'log' => [ // optional
|
||||
'file' => './logs/alipay.log',
|
||||
'level' => 'info', // 建议生产环境等级调整为 info,开发环境为 debug
|
||||
'type' => 'single', // optional, 可选 daily.
|
||||
'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
|
||||
],
|
||||
'http' => [ // optional
|
||||
'timeout' => 5.0,
|
||||
'connect_timeout' => 5.0,
|
||||
// 更多配置项请参考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
|
||||
],
|
||||
'mode' => 'dev', // optional,设置此参数,将进入沙箱模式
|
||||
];
|
||||
|
||||
public function index()
|
||||
{
|
||||
$order = [
|
||||
'out_trade_no' => time(),
|
||||
'total_amount' => '1',
|
||||
'subject' => 'test subject - 测试',
|
||||
];
|
||||
|
||||
$alipay = Pay::alipay($this->config)->web($order);
|
||||
|
||||
return $alipay->send();// laravel 框架中请直接 `return $alipay`
|
||||
}
|
||||
|
||||
public function return()
|
||||
{
|
||||
$data = Pay::alipay($this->config)->verify(); // 是的,验签就这么简单!
|
||||
|
||||
// 订单号:$data->out_trade_no
|
||||
// 支付宝交易号:$data->trade_no
|
||||
// 订单总金额:$data->total_amount
|
||||
}
|
||||
|
||||
public function notify()
|
||||
{
|
||||
$alipay = Pay::alipay($this->config);
|
||||
|
||||
try{
|
||||
$data = $alipay->verify(); // 是的,验签就这么简单!
|
||||
|
||||
// 请自行对 trade_status 进行判断及其它逻辑进行判断,在支付宝的业务通知中,只有交易通知状态为 TRADE_SUCCESS 或 TRADE_FINISHED 时,支付宝才会认定为买家付款成功。
|
||||
// 1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号;
|
||||
// 2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额);
|
||||
// 3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email);
|
||||
// 4、验证app_id是否为该商户本身。
|
||||
// 5、其它业务逻辑情况
|
||||
|
||||
Log::debug('Alipay notify', $data->all());
|
||||
} catch (\Exception $e) {
|
||||
// $e->getMessage();
|
||||
}
|
||||
|
||||
return $alipay->success()->send();// laravel 框架中请直接 `return $alipay->success()`
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## 微信
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Yansongda\Pay\Pay;
|
||||
use Yansongda\Pay\Log;
|
||||
|
||||
class PayController
|
||||
{
|
||||
protected $config = [
|
||||
'appid' => 'wxb3fxxxxxxxxxxx', // APP APPID
|
||||
'app_id' => 'wxb3fxxxxxxxxxxx', // 公众号 APPID
|
||||
'miniapp_id' => 'wxb3fxxxxxxxxxxx', // 小程序 APPID
|
||||
'mch_id' => '14577xxxx',
|
||||
'key' => 'mF2suE9sU6Mk1Cxxxxxxxxxxx',
|
||||
'notify_url' => 'http://yanda.net.cn/notify.php',
|
||||
'cert_client' => './cert/apiclient_cert.pem', // optional,退款等情况时用到
|
||||
'cert_key' => './cert/apiclient_key.pem',// optional,退款等情况时用到
|
||||
'log' => [ // optional
|
||||
'file' => './logs/wechat.log',
|
||||
'level' => 'info', // 建议生产环境等级调整为 info,开发环境为 debug
|
||||
'type' => 'single', // optional, 可选 daily.
|
||||
'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
|
||||
],
|
||||
'http' => [ // optional
|
||||
'timeout' => 5.0,
|
||||
'connect_timeout' => 5.0,
|
||||
// 更多配置项请参考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
|
||||
],
|
||||
'mode' => 'dev', // optional, dev/hk;当为 `hk` 时,为香港 gateway。
|
||||
];
|
||||
|
||||
public function index()
|
||||
{
|
||||
$order = [
|
||||
'out_trade_no' => time(),
|
||||
'total_fee' => '1', // **单位:分**
|
||||
'body' => 'test body - 测试',
|
||||
'openid' => 'onkVf1FjWS5SBIixxxxxxx',
|
||||
];
|
||||
|
||||
$pay = Pay::wechat($this->config)->mp($order);
|
||||
|
||||
// $pay->appId
|
||||
// $pay->timeStamp
|
||||
// $pay->nonceStr
|
||||
// $pay->package
|
||||
// $pay->signType
|
||||
}
|
||||
|
||||
public function notify()
|
||||
{
|
||||
$pay = Pay::wechat($this->config);
|
||||
|
||||
try{
|
||||
$data = $pay->verify(); // 是的,验签就这么简单!
|
||||
|
||||
Log::debug('Wechat notify', $data->all());
|
||||
} catch (\Exception $e) {
|
||||
// $e->getMessage();
|
||||
}
|
||||
|
||||
return $pay->success()->send();// laravel 框架中请直接 `return $pay->success()`
|
||||
}
|
||||
}
|
||||
```
|
62
web/docs/v2/sidebar.js
Normal file
62
web/docs/v2/sidebar.js
Normal file
@ -0,0 +1,62 @@
|
||||
exports = module.exports = [
|
||||
{
|
||||
text: '快速入门',
|
||||
collapsible: true,
|
||||
items: [
|
||||
{ text: '安装', link: '/docs/v2/installation'},
|
||||
{ text: '快速上手', link: '/docs/v2/quickUsage'},
|
||||
{ text: '贡献', link: '/docs/v2/contribute'}
|
||||
]
|
||||
},
|
||||
{
|
||||
text: '支付 - 支付宝',
|
||||
collapsible: true,
|
||||
items: [
|
||||
{ text: '概述', link: '/docs/v2/alipay/index'},
|
||||
{ text: '支付', link: '/docs/v2/alipay/pay'},
|
||||
{ text: '查询', link: '/docs/v2/alipay/find'},
|
||||
{ text: '取消', link: '/docs/v2/alipay/cancel'},
|
||||
{ text: '关闭', link: '/docs/v2/alipay/close'},
|
||||
{ text: '退款', link: '/docs/v2/alipay/refund'},
|
||||
{ text: '接收回调', link: '/docs/v2/alipay/callback'},
|
||||
{ text: '确认回调', link: '/docs/v2/alipay/response'}
|
||||
]
|
||||
},
|
||||
{
|
||||
text: '支付 - 微信',
|
||||
collapsible: true,
|
||||
items: [
|
||||
{ text: '概述', link: '/docs/v2/wechat/index'},
|
||||
{ text: '支付', link: '/docs/v2/wechat/pay'},
|
||||
{ text: '查询', link: '/docs/v2/wechat/find'},
|
||||
{ text: '取消', link: '/docs/v2/wechat/cancel'},
|
||||
{ text: '关闭', link: '/docs/v2/wechat/close'},
|
||||
{ text: '退款', link: '/docs/v2/wechat/refund'},
|
||||
{ text: '接收回调', link: '/docs/v2/wechat/callback'},
|
||||
{ text: '确认回调', link: '/docs/v2/wechat/response'}
|
||||
]
|
||||
},
|
||||
{
|
||||
text: '事件系统',
|
||||
collapsible: true,
|
||||
items: [
|
||||
{ text: '概述', link: '/docs/v2/events/index'},
|
||||
{ text: '说明', link: '/docs/v2/events/class'},
|
||||
{ text: '使用', link: '/docs/v2/events/usage'}
|
||||
]
|
||||
},
|
||||
{
|
||||
text: '日志系统',
|
||||
collapsible: true,
|
||||
items: [
|
||||
{ text: '使用', link: '/docs/v2/logger/usage'}
|
||||
]
|
||||
},
|
||||
{
|
||||
text: '其它',
|
||||
collapsible: true,
|
||||
items: [
|
||||
{ text: 'FAQ', link: '/docs/v2/others/faq'}
|
||||
]
|
||||
}
|
||||
];
|
38
web/docs/v2/wechat/callback.md
Normal file
38
web/docs/v2/wechat/callback.md
Normal file
@ -0,0 +1,38 @@
|
||||
# 接收回调
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:------:|:---:|:----------:|
|
||||
| verify | 无 | Collection |
|
||||
|
||||
## 支付异步通知验证
|
||||
|
||||
```php
|
||||
$result = $wechat->verify();
|
||||
// 是的,你没有看错,就是这么简单!
|
||||
|
||||
// return $wechat->success()->send(); // laravel 框架直接 return $wechat->success();
|
||||
```
|
||||
|
||||
|
||||
## 退款异步通知验证
|
||||
|
||||
:::tip
|
||||
v2.4.0 及以上可用
|
||||
:::
|
||||
|
||||
```php
|
||||
$result = $wechat->verify(null, true);
|
||||
// 是的,你没有看错,就是这么简单!
|
||||
|
||||
// return $wechat->success()->send(); // laravel 框架直接 return $wechat->success();
|
||||
```
|
||||
|
||||
|
||||
## 配置参数
|
||||
|
||||
无
|
||||
|
||||
|
||||
## 返回值
|
||||
|
||||
返回 Collection 类型,可以通过 `$collection->xxx` 得到服务器返回的数据。
|
7
web/docs/v2/wechat/cancel.md
Normal file
7
web/docs/v2/wechat/cancel.md
Normal file
@ -0,0 +1,7 @@
|
||||
# 取消
|
||||
|
||||
微信官方无此 API,请调用 close 关闭订单。
|
||||
|
||||
## 异常
|
||||
|
||||
Yansongda\Pay\Exceptions\GatewayException :Wechat Do Not Have Cancel API! Plase use Close API!
|
31
web/docs/v2/wechat/close.md
Normal file
31
web/docs/v2/wechat/close.md
Normal file
@ -0,0 +1,31 @@
|
||||
# 关闭
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:-----:|:-------------------:|:----------:|
|
||||
| close | string/array $order | Collection |
|
||||
|
||||
## 例子
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_trade_no' => '1514027114',
|
||||
];
|
||||
|
||||
// $order = '1514027114';
|
||||
|
||||
$result = $wechat->close($order);
|
||||
```
|
||||
|
||||
|
||||
## 订单配置参数
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_3),查看「请求参数」一栏。
|
||||
|
||||
### APP/小程序订单关闭
|
||||
|
||||
如果您需要关闭 `APP/小程序` 的订单,请传入参数:`['type' => 'app']`/`['type' => 'miniapp']`
|
||||
|
||||
|
||||
## 返回值
|
||||
|
||||
返回 Collection 类型,可以通过 `$collection->xxx` 得到服务器返回的数据。
|
68
web/docs/v2/wechat/find.md
Normal file
68
web/docs/v2/wechat/find.md
Normal file
@ -0,0 +1,68 @@
|
||||
# 查询
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:----:|:--------------------------------------:|:----------:|
|
||||
| find | string/array $order, string/null $type | Collection |
|
||||
|
||||
## 查询普通支付订单
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_trade_no' => '1514027114',
|
||||
];
|
||||
// $order = '1514027114';
|
||||
|
||||
$result = $wechat->find($order);
|
||||
```
|
||||
|
||||
|
||||
## 查询退款订单
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_trade_no' => '1514027114',
|
||||
];
|
||||
// $order = '1514027114';
|
||||
|
||||
$result = $wechat->find($order, 'refund');
|
||||
```
|
||||
|
||||
|
||||
## 查询企业付款订单
|
||||
|
||||
:::tip
|
||||
v2.7.8 及以上可用
|
||||
:::
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'partner_trade_no' => '1514027114',
|
||||
];
|
||||
// $order = '1514027114';
|
||||
|
||||
$result = $wechat->find($order, 'transfer');
|
||||
```
|
||||
|
||||
|
||||
## 订单配置参数
|
||||
|
||||
### 查询订单
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2),查看「请求参数」一栏。
|
||||
|
||||
### 查询退款订单
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_5),查看「请求参数」一栏。
|
||||
|
||||
### 查询企业付款订单
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_3),查看「请求参数」一栏。
|
||||
|
||||
### APP/小程序查询
|
||||
|
||||
如果您需要查询 `APP/小程序` 的订单,请传入参数:`['type' => 'app']`/`['type' => 'miniapp']`
|
||||
|
||||
|
||||
## 返回值
|
||||
|
||||
返回 Collection 类型,可以通过 `$collection->xxx` 得到服务器返回的数据。
|
109
web/docs/v2/wechat/index.md
Normal file
109
web/docs/v2/wechat/index.md
Normal file
@ -0,0 +1,109 @@
|
||||
# 概述
|
||||
|
||||
**请先熟悉 微信支付 开发文档!**
|
||||
|
||||
## 快速上手
|
||||
|
||||
```php
|
||||
use Yansongda\Pay\Pay;
|
||||
|
||||
$config = [
|
||||
'appid' => 'wxb3fxxxxxxxxxxx', // APP APPID
|
||||
'app_id' => 'wxb3fxxxxxxxxxxx', // 公众号 APPID
|
||||
'miniapp_id' => 'wxb3fxxxxxxxxxxx', // 小程序 APPID
|
||||
'mch_id' => '145776xxxx',
|
||||
'key' => 'mF2suE9sU6Mk1CxxxxIxxxxx',
|
||||
'notify_url' => 'http://yanda.net.cn',
|
||||
'cert_client' => './cert/apiclient_cert.pem', // optional, 退款,红包等情况时需要用到
|
||||
'cert_key' => './cert/apiclient_key.pem',// optional, 退款,红包等情况时需要用到
|
||||
'log' => [ // optional
|
||||
'file' => './logs/wechat.log',
|
||||
'level' => 'info', // 建议生产环境等级调整为 info,开发环境为 debug
|
||||
'type' => 'single', // optional, 可选 daily.
|
||||
'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
|
||||
],
|
||||
'http' => [ // optional
|
||||
'timeout' => 5.0,
|
||||
'connect_timeout' => 5.0,
|
||||
// 更多配置项请参考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
|
||||
],
|
||||
// 'mode' => 'dev',
|
||||
];
|
||||
|
||||
// 支付
|
||||
$order = [
|
||||
'out_trade_no' => time(),
|
||||
'body' => 'subject-测试',
|
||||
'total_fee' => '1',
|
||||
'openid' => 'onkVf1FjWS5SBxxxxxxxx',
|
||||
];
|
||||
|
||||
$result = Pay::wechat($config)->mp($order);
|
||||
|
||||
// 退款
|
||||
$order = [
|
||||
'out_trade_no' => '1514192025',
|
||||
'out_refund_no' => time(),
|
||||
'total_fee' => '1',
|
||||
'refund_fee' => '1',
|
||||
'refund_desc' => '测试退款haha',
|
||||
];
|
||||
|
||||
$result = Pay::wechat($config)->refund($order); // 返回 `Yansongda\Supports\Collection` 实例,可以通过 `$result->xxx` 访问服务器返回的数据。
|
||||
|
||||
// 查询
|
||||
$result = Pay::wechat($config)->find('out_trade_no_123456'); // 返回 `Yansongda\Supports\Collection` 实例,可以通过 `$result->xxx` 访问服务器返回的数据。
|
||||
|
||||
// 取消
|
||||
微信未提供取消订单接口,访问此接口将抛出 `GatewayException` 异常。
|
||||
|
||||
// 关闭
|
||||
$result = Pay::wechat($config)->close('out_trade_no_123456'); // 返回 `Yansongda\Supports\Collection` 实例,可以通过 `$result->xxx` 访问服务器返回的数据。
|
||||
|
||||
// 验证服务器数据
|
||||
$wechat = Pay::wechat($config)
|
||||
|
||||
// 是的,验签就这么简单!
|
||||
$data = $wechat->verify(); // 返回 `Yansongda\Supports\Collection` 实例,可以通过 `$data->xxx` 访问服务器返回的数据。
|
||||
|
||||
$wechat->success()->send(); // 向微信服务器确认接收到的数据。laravel 框架中请直接 `return $wechat->success()`
|
||||
```
|
||||
|
||||
## 服务商模式
|
||||
|
||||
> {info} 版本要求: version >= 2.1.0
|
||||
|
||||
config 配置参数如下。
|
||||
|
||||
```php
|
||||
$config = [
|
||||
'appid' => 'wxb3fxxxxxxxxxxx', // APP APPID
|
||||
'app_id' => 'wxb3fxxxxxxxxxxx', // 公众号 APPID
|
||||
'miniapp_id' => 'wxb3fxxxxxxxxxxx', // 小程序 APPID
|
||||
'sub_appid' => 'wxb3fxxxxxxxxxxx', // 子商户 APP APPID
|
||||
'sub_app_id' => 'wxb3fxxxxxxxxxxx', // 子商户 公众号 APPID
|
||||
'sub_miniapp_id' => 'wxb3fxxxxxxxxxxx', // 子商户 小程序 APPID
|
||||
'mch_id' => '146xxxxxx', // 商户号
|
||||
'sub_mch_id' => '146xxxxxx', // 子商户商户号
|
||||
'key' => '4e538260xxxxxxxxxxxxxxxxxxxxxx', // 主商户 key
|
||||
'notify_url' => 'http://yanda.net.cn/notify.php',
|
||||
'cert_client' => './cert/apiclient_cert.pem', // optional,退款等情况时用到
|
||||
'cert_key' => './cert/apiclient_key.pem',// optional,退款等情况时用到
|
||||
'log' => [ // optional
|
||||
'file' => './logs/wechat.log',
|
||||
'level' => 'info', // 建议生产环境等级调整为 info,开发环境为 debug
|
||||
'type' => 'single', // optional, 可选 daily, daily 时将按时间自动划分文件.
|
||||
'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
|
||||
],
|
||||
'mode' => 'service',
|
||||
]
|
||||
```
|
||||
|
||||
**说明:** 处于服务商模式下的时候,`appid`、`app_id`、`miniapp_id` 均为**主商户**的信息,`sub_` 开头的为**子服务商**的信息
|
||||
|
||||
详细请参考 [https://github.com/yansongda/pay/pull/82](https://github.com/yansongda/pay/pull/82)
|
||||
|
||||
|
||||
## 注意
|
||||
|
||||
后续文档中,如果没有特别说明, `$wechat` 均代表`Pay::wechat($config)`
|
249
web/docs/v2/wechat/pay.md
Normal file
249
web/docs/v2/wechat/pay.md
Normal file
@ -0,0 +1,249 @@
|
||||
# 支付
|
||||
|
||||
微信支付目前支持 9 种支付方法,对应的支付 method 如下:
|
||||
|
||||
| method | 说明 | 参数 | 返回值 |
|
||||
|:------------:|:------:|:------------:|:------------:|
|
||||
| mp | 公众号支付 | array $order | Collection |
|
||||
| wap | 手机网站支付 | array $order | Response |
|
||||
| app | APP 支付 | array $order | JsonResponse |
|
||||
| pos | 刷卡支付 | array $order | Collection |
|
||||
| scan | 扫码支付 | array $order | Collection |
|
||||
| transfer | 账户转账 | array $order | Collection |
|
||||
| miniapp | 小程序支付 | array $order | Collection |
|
||||
| redpack | 普通红包 | array $order | Collection |
|
||||
| groupRedpack | 裂变红包 | array $order | Collection |
|
||||
|
||||
## 公众号支付
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_trade_no' => time(),
|
||||
'body' => 'subject-测试',
|
||||
'total_fee' => '1',
|
||||
'openid' => 'onkVf1FjWS5SBxxxxxxxx',
|
||||
];
|
||||
|
||||
$result = Pay::wechat($config)->mp($order);
|
||||
// 返回 Collection 实例。包含了调用 JSAPI 的所有参数,如appId,timeStamp,nonceStr,package,signType,paySign 等;
|
||||
// 可直接通过 $result->appId, $result->timeStamp 获取相关值。
|
||||
// 后续调用不在本文档讨论范围内,请自行参考官方文档。
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`trade_type`,`appid`,`sign`, `spbill_create_ip` 等参数,大家只需传入订单类主观参数即可。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1),查看「请求参数」一栏。
|
||||
|
||||
|
||||
## 手机网站支付
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_trade_no' => time(),
|
||||
'body' => 'subject-测试',
|
||||
'total_fee' => '1',
|
||||
];
|
||||
|
||||
return $wechat->wap($order)->send(); // laravel 框架中请直接 return $wechat->wap($order)
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`trade_type`,`appid`,`sign`, `spbill_create_ip` 等参数,大家只需传入订单类主观参数即可。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20&index=1),查看「请求参数」一栏。
|
||||
|
||||
|
||||
## APP 支付
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_trade_no' => time(),
|
||||
'body' => 'subject-测试',
|
||||
'total_fee' => '1',
|
||||
];
|
||||
|
||||
// 后续 APP 调用,调用方式不在本文档讨论范围内,请参考官方文档。
|
||||
return $wechat->app($order);
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`trade_type`,`appid`,`sign`, `spbill_create_ip` 等参数,大家只需传入订单类主观参数即可。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1),查看「请求参数」一栏。
|
||||
|
||||
|
||||
## 刷卡支付
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_trade_no' => time(),
|
||||
'body' => 'subject-测试',
|
||||
'total_fee' => '1',
|
||||
'auth_code' => '1354804793001231564897',
|
||||
];
|
||||
|
||||
$result = $wechat->pos($order);
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`trade_type`,`appid`,`sign`, `spbill_create_ip` 等参数,大家只需传入订单类主观参数即可。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_10&index=1),查看「请求参数」一栏。
|
||||
|
||||
|
||||
## 扫码支付
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_trade_no' => time(),
|
||||
'body' => 'subject-测试',
|
||||
'total_fee' => '1',
|
||||
];
|
||||
|
||||
// 扫码支付使用 模式二
|
||||
$result = $wechat->scan($order);
|
||||
// 二维码内容: $qr = $result->code_url;
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`trade_type`,`appid`,`sign`, `spbill_create_ip` 等参数,大家只需传入订单类主观参数即可。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1),查看「请求参数」一栏。
|
||||
|
||||
|
||||
## 账户转账
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'partner_trade_no' => '', //商户订单号
|
||||
'openid' => '', //收款人的openid
|
||||
'check_name' => 'NO_CHECK', //NO_CHECK:不校验真实姓名\FORCE_CHECK:强校验真实姓名
|
||||
// 're_user_name'=>'张三', //check_name为 FORCE_CHECK 校验实名的时候必须提交
|
||||
'amount' => '1', //企业付款金额,单位为分
|
||||
'desc' => '帐户提现', //付款说明
|
||||
];
|
||||
|
||||
$result = $wechat->transfer($order);
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`trade_type`,`appid`,`sign`, `spbill_create_ip` 等参数,大家只需传入订单类主观参数即可。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2),查看「请求参数」一栏。
|
||||
|
||||
### 使用 APP/小程序 账号转账
|
||||
|
||||
如果您需要通过 `APP/小程序` 的商户账号appid进行转账,请传入参数:`['type' => 'app']`/`['type' => 'miniapp']`
|
||||
|
||||
### !注意!
|
||||
|
||||
如果您在队列中使用,请自行传参 `spbill_create_ip`。
|
||||
|
||||
|
||||
## 小程序
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_trade_no' => time(),
|
||||
'body' => 'subject-测试',
|
||||
'total_fee' => '1',
|
||||
'openid' => 'onkVf1FjWS5SBxxxxxxxx',
|
||||
];
|
||||
|
||||
$result = $wechat->miniapp($order);
|
||||
// 返回 Collection 实例。包含了调用 JSAPI 的所有参数,如appId,timeStamp,nonceStr,package,signType,paySign 等;
|
||||
// 可直接通过 $result->appId, $result->timeStamp 获取相关值。
|
||||
// 后续调用不在本文档讨论范围内,请自行参考官方文档。
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`trade_type`,`appid`,`sign`, `spbill_create_ip` 等参数,大家只需传入订单类主观参数即可。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1),查看「请求参数」一栏。
|
||||
|
||||
|
||||
## 普通红包
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'mch_billno' => '商户订单号',
|
||||
'send_name' => '商户名称',
|
||||
'total_amount' => '1',
|
||||
're_openid' => '用户openid',
|
||||
'total_num' => '1',
|
||||
'wishing' => '祝福语',
|
||||
'act_name' => '活动名称',
|
||||
'remark' => '备注',
|
||||
];
|
||||
|
||||
$result = $wechat->redpack($order);
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`trade_type`,`appid`,`sign`, `spbill_create_ip` 等参数,大家只需传入订单类主观参数即可。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3),查看「请求参数」一栏。
|
||||
|
||||
### !注意!
|
||||
|
||||
如果您在队列中使用,请自行传参 `client_ip`。
|
||||
|
||||
|
||||
## 裂变红包
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'mch_billno' => '商户订单号',
|
||||
'send_name' => '商户名称',
|
||||
'total_amount' => '1',
|
||||
're_openid' => '用户openid',
|
||||
'total_num' => '3',
|
||||
'wishing' => '祝福语',
|
||||
'act_name' => '活动名称',
|
||||
'remark' => '备注',
|
||||
];
|
||||
|
||||
$result = $wechat->groupRedpack($order);
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`trade_type`,`appid`,`sign`, `spbill_create_ip` 等参数,大家只需传入订单类主观参数即可。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_5&index=4),查看「请求参数」一栏。
|
||||
|
||||
## 返回值
|
||||
|
||||
**各支付方法返回值请参考顶部表格**
|
||||
|
||||
返回只会返回两种类型 `Symfony\Component\HttpFoundation\Response` 或 `Yansongda\Supports\Collection`
|
||||
|
||||
* 返回 Response 类型时,可以通过 `return $response->send()` 直接进行返回(laravel 框架中使用请直接`return $response` )
|
||||
* 返回 Collection 类型时,可以通过 `$collection->xxx` 得到服务器返回的数据。
|
34
web/docs/v2/wechat/refund.md
Normal file
34
web/docs/v2/wechat/refund.md
Normal file
@ -0,0 +1,34 @@
|
||||
# 退款
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:------:|:------------:|:----------:|
|
||||
| refund | array $order | Collection |
|
||||
|
||||
## 退款操作
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'out_trade_no' => '1514192025',
|
||||
'out_refund_no' => time(),
|
||||
'total_fee' => '1',
|
||||
'refund_fee' => '1',
|
||||
'refund_desc' => '测试退款haha',
|
||||
];
|
||||
|
||||
$result = $wechat->refund($order);
|
||||
```
|
||||
|
||||
|
||||
## 订单配置参数
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_4),查看「请求参数」一栏。
|
||||
|
||||
### APP/小程序退款
|
||||
|
||||
如果您需要退 `APP/小程序` 的订单,请传入参数:`['type' => 'app']`/`['type' => 'miniapp']`
|
||||
|
||||
|
||||
|
||||
## 返回值
|
||||
|
||||
返回 Collection 类型,可以通过 `$collection->xxx` 得到服务器返回的数据。
|
23
web/docs/v2/wechat/response.md
Normal file
23
web/docs/v2/wechat/response.md
Normal file
@ -0,0 +1,23 @@
|
||||
# 确认回调
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:-------:|:---:|:--------:|
|
||||
| success | 无 | Response |
|
||||
|
||||
## 使用方法
|
||||
|
||||
```php
|
||||
// $result = $wechat->verify();
|
||||
|
||||
return $wechat->success()->send(); // laravel 框架直接 return $wechat->success();
|
||||
```
|
||||
|
||||
|
||||
## 配置参数
|
||||
|
||||
无
|
||||
|
||||
|
||||
## 返回值
|
||||
|
||||
返回 Response 类型,可以通过`return $response->send();` 进行返回;如果在 laravel 框架中,可直接 `return $response;`
|
42
web/docs/v3/alipay/callback.md
Normal file
42
web/docs/v3/alipay/callback.md
Normal file
@ -0,0 +1,42 @@
|
||||
# 接收支付宝回调
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:--------:|:------------------------------:|:----------:|
|
||||
| callback | 无/array/ServerRequestInterface | Collection |
|
||||
|
||||
使用的加密方式为支付宝官方推荐的 **RSA2**,目前只支持这一种加密方式,且没有支持其他加密方式的计划。
|
||||
|
||||
## 例子
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
// 是的,你没有看错,就是这么简单!
|
||||
$result = Pay::alipay()->callback();
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
### 第一个参数
|
||||
|
||||
#### `null`
|
||||
|
||||
如果您没有传参,或传 `null` 则 `yansongda/pay` 会自动识别支付宝的回调请求并处理,通过 `Collection` 实例返回支付宝的处理参数
|
||||
|
||||
:::warning
|
||||
建议仅在 php-fpm 下使用,swoole 方式请使用 `ServerRequestInterface` 参数传递方式
|
||||
:::
|
||||
|
||||
#### `ServerRequestInterface`
|
||||
|
||||
推荐在 swoole 环境下传递此参数,传递此参数后, yansongda/pay 会自动进行后续处理
|
||||
|
||||
#### `array`
|
||||
|
||||
也可以自行解析请求参数,传递一个 array 会自动进行后续处理
|
||||
|
||||
### 第二个参数
|
||||
|
||||
第二个参数主要是传递相关自定义变量的,类似于 `web()` 中的 `_config` / `_method` 等参数。
|
||||
|
||||
例如,如果你想在回调的时候使用非默认配置,则可以 `Pay::alipay()->callback(null, ['_config' => 'yansongda'])` 切换为 `yansongda` 这个租户的配置信息。
|
22
web/docs/v3/alipay/cancel.md
Normal file
22
web/docs/v3/alipay/cancel.md
Normal file
@ -0,0 +1,22 @@
|
||||
# 取消订单
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:------:|:-------------------:|:----------:|
|
||||
| cancel | string/array $order | Collection |
|
||||
|
||||
## 例子
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
$order = [
|
||||
'out_trade_no' => '1514027114',
|
||||
];
|
||||
// $order = '1514027114';
|
||||
|
||||
$result = Pay::alipay()->cancel($order);
|
||||
```
|
||||
|
||||
## 配置参数
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://opendocs.alipay.com/apis/api_1/alipay.trade.cancel),查看「请求参数」一栏。
|
19
web/docs/v3/alipay/close.md
Normal file
19
web/docs/v3/alipay/close.md
Normal file
@ -0,0 +1,19 @@
|
||||
# 关闭订单
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:-----:|:-------------------:|:----------:|
|
||||
| close | string/array $order | Collection |
|
||||
|
||||
## 例子
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
$result = Pay::alipay()->close([
|
||||
'out_trade_no' => '1623161325',
|
||||
]);
|
||||
```
|
||||
|
||||
## 配置参数
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://opendocs.alipay.com/apis/api_1/alipay.trade.close),查看「请求参数」一栏。
|
27
web/docs/v3/alipay/download.md
Normal file
27
web/docs/v3/alipay/download.md
Normal file
@ -0,0 +1,27 @@
|
||||
# 下载对账单
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:--------:|:------------------:|:------:|
|
||||
| download | string/array $bill | string |
|
||||
|
||||
## 例子
|
||||
|
||||
```php
|
||||
$bill = [
|
||||
'bill_date' => '2016-04-05', // 2016-04
|
||||
'bill_type' => 'trade'
|
||||
];
|
||||
|
||||
// $bill = '2016-04-05';
|
||||
|
||||
$url = $alipay->download($bill);
|
||||
```
|
||||
|
||||
## 配置参数
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://docs.open.alipay.com/api_15/alipay.data.dataservice.bill.downloadurl.query),查看「请求参数」一栏。
|
||||
|
||||
|
||||
## 返回值
|
||||
|
||||
返回 string 类型。直接返回账单下载链接。
|
54
web/docs/v3/alipay/find.md
Normal file
54
web/docs/v3/alipay/find.md
Normal file
@ -0,0 +1,54 @@
|
||||
# 查询订单
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:----:|:-------------------:|:----------:|
|
||||
| find | string/array $order | Collection |
|
||||
|
||||
## 查询普通支付订单
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
$order = [
|
||||
'out_trade_no' => '1514027114',
|
||||
];
|
||||
// $order = '1514027114';
|
||||
|
||||
$result = Pay::alipay()->find($order);
|
||||
```
|
||||
|
||||
## 查询退款订单
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
$order = [
|
||||
'out_trade_no' => '1514027114',
|
||||
'out_request_no' => '1514027114',
|
||||
'_type' => 'refund',
|
||||
];
|
||||
|
||||
$result = Pay::alipay()->find($order);
|
||||
```
|
||||
|
||||
## 查询转账订单
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
$order = [
|
||||
'out_trade_no' => '1514027114',
|
||||
'_type' => 'transfer'
|
||||
];
|
||||
|
||||
$result = Pay::alipay()->find($order);
|
||||
```
|
||||
|
||||
## 配置参数
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考以下地址,查看「请求参数」一节。
|
||||
|
||||
- 支付订单:[这里](https://opendocs.alipay.com/apis/api_1/alipay.trade.query)
|
||||
- 退款订单:[这里](https://opendocs.alipay.com/apis/api_1/alipay.trade.fastpay.refund.query)
|
||||
- 转账订单:[这里](https://opendocs.alipay.com/apis/api_28/alipay.fund.trans.order.query)
|
||||
|
137
web/docs/v3/alipay/more.md
Normal file
137
web/docs/v3/alipay/more.md
Normal file
@ -0,0 +1,137 @@
|
||||
# 更多方便的插件
|
||||
|
||||
得益于 yansongda/pay 的基础架构和良好的插件机制,
|
||||
您可以自有的使用任何内置插件和自定义插件调用支付宝的任何 API。
|
||||
|
||||
诸如签名、API调用、解密、验签、解包等基础插件已经内置在 Pay 中,
|
||||
您可以使用 `Pay::alipay()->mergeCommonPlugins(array $plugins)` 来获取调用 API 所必须的常用插件
|
||||
|
||||
首先,查找你想使用的插件,然后
|
||||
|
||||
```php
|
||||
Pay::config($config);
|
||||
|
||||
$params = [
|
||||
'out_trade_no' => '1514027114',
|
||||
];
|
||||
|
||||
$allPlugins = Pay::alipay()->mergeCommonPlugins([QueryPlugin::class]);
|
||||
|
||||
$result = Pay::alipay()->pay($allPlugins, $params);
|
||||
```
|
||||
|
||||
关于插件的详细介绍,如果您感兴趣,可以参考 [这篇说明文档](/docs/v3/kernel/plugin.md)
|
||||
|
||||
## 账务API插件
|
||||
|
||||
### 下载对账单
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\Data\BillDownloadUrlQueryPlugin`
|
||||
|
||||
### 申请电子回单
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\Data\BillEreceiptApplyPlugin`
|
||||
|
||||
### 查询电子回单状态
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\Data\BillEreceiptQueryPlugin`
|
||||
|
||||
## 生活缴费API插件
|
||||
|
||||
### 缴费直连代扣订单支付状态查询
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\Ebpp\PdeductBillStatusPlugin`
|
||||
|
||||
### 公共事业缴费直连代扣扣款支付接口
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\Ebpp\PdeductPayPlugin`
|
||||
|
||||
### 缴费直连代扣签约
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\Ebpp\PdeductSignAddPlugin`
|
||||
|
||||
### 缴费直连代扣取消签约
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\Ebpp\PdeductSignCancelPlugin`
|
||||
|
||||
## 资金API插件
|
||||
|
||||
### 支付宝资金账户资产查询接口
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\Fund\AccountQueryPlugin`
|
||||
|
||||
### 资金授权冻结接口
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\Fund\AuthOrderFreezePlugin`
|
||||
|
||||
### 资金授权解冻接口
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\Fund\AuthOrderUnfreezePlugin`
|
||||
|
||||
### 查询转账订单接口
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\Fund\TransOrderQueryPlugin`
|
||||
|
||||
### 转账业务单据查询接口
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\Fund\TransCommonQueryPlugin`
|
||||
|
||||
### 资金转账页面支付接口
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\Fund\TransPagePayPlugin`
|
||||
|
||||
:::warning
|
||||
该插件需配合 `HtmlResponsePlugin` 插件一起使用
|
||||
:::
|
||||
|
||||
### 单笔转账接口
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\Fund\TransUniTransferPlugin`
|
||||
|
||||
### 单笔转账到银行账户接口
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\Fund\TransTobankTransferPlugin`
|
||||
|
||||
## 工具类API
|
||||
|
||||
### 换取授权访问令牌
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\Tools\SystemOauthTokenPlugin`
|
||||
|
||||
### 换取应用授权令牌
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\Tools\OpenAuthTokenAppPlugin`
|
||||
|
||||
### 查询某个应用授权AppAuthToken的授权信息
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\Tools\OpenAuthTokenAppQueryPlugin`
|
||||
|
||||
## 会员API
|
||||
|
||||
### 支付宝会员授权信息查询接口
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\User\InfoSharePlugin`
|
||||
|
||||
### 支付宝个人协议页面签约接口
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\User\AgreementPageSignPlugin`
|
||||
|
||||
:::warning
|
||||
该插件需配合 `HtmlResponsePlugin` 插件一起使用
|
||||
:::
|
||||
|
||||
### 支付宝个人代扣协议查询接口
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\User\AgreementQueryPlugin`
|
||||
|
||||
### 支付宝个人代扣协议解约接口
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\User\AgreementUnsignPlugin`
|
||||
|
||||
### 周期性扣款协议执行计划修改接口
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\User\AgreementExecutionPlanModifyPlugin`
|
||||
|
||||
### 协议由普通通用代扣协议产品转移到周期扣协议产品
|
||||
|
||||
- `Yansongda\Pay\Plugin\Alipay\User\AgreementTransferPlugin`
|
208
web/docs/v3/alipay/pay.md
Normal file
208
web/docs/v3/alipay/pay.md
Normal file
@ -0,0 +1,208 @@
|
||||
# 支付
|
||||
|
||||
支付宝支付目前直接内置支持 7 种快捷方式支付方法,对应的支付 method 如下:
|
||||
|
||||
| method | 说明 | 参数 | 返回值 |
|
||||
|:--------:|:------:|:------------:|:----------:|
|
||||
| web | 电脑支付 | array $order | Response |
|
||||
| wap | 手机网站支付 | array $order | Response |
|
||||
| app | APP 支付 | array $order | Response |
|
||||
| pos | 刷卡支付 | array $order | Collection |
|
||||
| scan | 扫码支付 | array $order | Collection |
|
||||
| transfer | 账户转账 | array $order | Collection |
|
||||
| mini | 小程序支付 | array $order | Collection |
|
||||
|
||||
更多接口调用请参考后续文档
|
||||
|
||||
## 电脑支付
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
return Pay::alipay()->web([
|
||||
'out_trade_no' => ''.time(),
|
||||
'total_amount' => '0.01',
|
||||
'subject' => 'yansongda 测试 - 1',
|
||||
]);
|
||||
```
|
||||
|
||||
#### GET 方式提交
|
||||
|
||||
为您考虑到了这一点,如果您想使用 GET 方式提交请求,可以在参数中增加 `['_method' => 'get']` 即可,例如
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
return Pay::alipay()->web([
|
||||
'out_trade_no' => ''.time(),
|
||||
'total_amount' => '0.01',
|
||||
'subject' => 'yansongda 测试 - 1',
|
||||
'_method' => 'get',
|
||||
]);
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`product_code` 等参数。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://opendocs.alipay.com/apis/api_1/alipay.trade.page.pay),查看「请求参数」一栏。
|
||||
|
||||
## 手机网站支付
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
return Pay::alipay()->wap([
|
||||
'out_trade_no' => time(),
|
||||
'total_amount' => '0.01',
|
||||
'subject' => 'yansongda 测试 - 01',
|
||||
'quit_url' => 'https://yansongda.cn',
|
||||
]);
|
||||
```
|
||||
|
||||
#### GET 方式提交
|
||||
|
||||
为您考虑到了这一点,如果您想使用 GET 方式提交请求,可以在参数中增加 `['_method' => 'get']` 即可,例如
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
return Pay::alipay()->wap([
|
||||
'out_trade_no' => ''.time(),
|
||||
'total_amount' => '0.01',
|
||||
'subject' => 'yansongda 测试 - 1',
|
||||
'_method' => 'get',
|
||||
]);
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`product_code` 等参数。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://opendocs.alipay.com/apis/api_1/alipay.trade.wap.pay),查看「请求参数」一栏。
|
||||
|
||||
## APP 支付
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
// 后续 APP 调用方式不在本文档讨论范围内,请参考官方文档。
|
||||
return Pay::alipay()->app([
|
||||
'out_trade_no' => time(),
|
||||
'total_amount' => '0.01',
|
||||
'subject' => 'yansongda 测试 - 01',
|
||||
]);
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`product_code` 等参数。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://opendocs.alipay.com/apis/api_1/alipay.trade.app.pay),查看「请求参数」一栏。
|
||||
|
||||
## 小程序支付
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
$result = Pay::alipay()->mini([
|
||||
'out_trade_no' => time().'',
|
||||
'total_amount' => '0.01',
|
||||
'subject' => 'yansongda 测试 - 01',
|
||||
'buyer_id' => '2088622190161234',
|
||||
]);
|
||||
|
||||
return $result->get('trade_no'); // 支付宝交易号
|
||||
// return $result->trade_no;
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`product_code` 等参数。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://opendocs.alipay.com/apis/api_1/alipay.trade.create/),查看「请求参数」一栏。
|
||||
|
||||
小程序支付接入文档:[https://docs.alipay.com/mini/introduce/pay](https://opendocs.alipay.com/mini/introduce/pay)。
|
||||
|
||||
|
||||
## 刷卡支付
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
$result = Pay::alipay()->pos([
|
||||
'out_trade_no' => time(),
|
||||
'auth_code' => '284776044441477959',
|
||||
'total_amount' => '0.01',
|
||||
'subject' => 'yansongda 测试 - 01',
|
||||
]);
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`product_code` 等参数。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://opendocs.alipay.com/apis/api_1/alipay.trade.pay),查看「请求参数」一栏。
|
||||
|
||||
## 扫码支付
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
$result = Pay::alipay()->scan([
|
||||
'out_trade_no' => time(),
|
||||
'total_amount' => '0.01',
|
||||
'subject' => 'yansongda 测试 - 01',
|
||||
]);
|
||||
|
||||
return $result->qr_code; // 二维码 url
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`product_code` 等参数。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://opendocs.alipay.com/apis/api_1/alipay.trade.precreate),查看「请求参数」一栏。
|
||||
|
||||
## 账户转账
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
$result = Pay::alipay()->transfer([
|
||||
'out_biz_no' => '202106051432',
|
||||
'trans_amount' => '0.01',
|
||||
'product_code' => 'TRANS_ACCOUNT_NO_PWD',
|
||||
'biz_scene' => 'DIRECT_TRANSFER',
|
||||
'payee_info' => [
|
||||
'identity' => 'ghdhjw7124@sandbox.com',
|
||||
'identity_type' => 'ALIPAY_LOGON_ID',
|
||||
'name' => '沙箱环境'
|
||||
],
|
||||
]);
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://opendocs.alipay.com/apis/api_28/alipay.fund.trans.uni.transfer),查看「请求参数」一栏。
|
||||
|
||||
|
||||
:::tip
|
||||
转账查询等,请参考 [查询](/docs/v3/alipay/find.md)
|
||||
:::
|
20
web/docs/v3/alipay/refund.md
Normal file
20
web/docs/v3/alipay/refund.md
Normal file
@ -0,0 +1,20 @@
|
||||
# 退款
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:------:|:------------:|:----------:|
|
||||
| refund | array $order | Collection |
|
||||
|
||||
## 退款操作
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
$result = Pay::alipay()->refund([
|
||||
'out_trade_no' => '1623160012',
|
||||
'refund_amount' => '0.01',
|
||||
]);
|
||||
```
|
||||
|
||||
## 配置参数
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://opendocs.alipay.com/apis/api_1/alipay.trade.refund),查看「请求参数」一栏。
|
19
web/docs/v3/alipay/response.md
Normal file
19
web/docs/v3/alipay/response.md
Normal file
@ -0,0 +1,19 @@
|
||||
# 确认回调
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:-------:|:---:|:--------:|
|
||||
| success | 无 | Response |
|
||||
|
||||
## 例子
|
||||
|
||||
```php
|
||||
Pay::config($config);
|
||||
|
||||
// $result = Pay::alipay()->callback();
|
||||
|
||||
return Pay::alipay()->success();
|
||||
```
|
||||
|
||||
## 订单配置参数
|
||||
|
||||
无
|
45
web/docs/v3/index.md
Normal file
45
web/docs/v3/index.md
Normal file
@ -0,0 +1,45 @@
|
||||
# 介绍
|
||||
|
||||
<p align="center">
|
||||
<a href="https://pay.yansongda.cn" target="_blank" rel="noopener noreferrer"><img width="200" src="https://pay.yansongda.cn/images/logo.png" alt="Logo"></a>
|
||||
</p>
|
||||
|
||||
该文档为 v3 版本的文档,如果您正在使用 v2.x 版本的 SDK,请您传送至 [这里](/docs/v2/)。
|
||||
|
||||
v3 版与 v2 版在底层有很大的不同,基础架构做了重新的设计,更易扩展,使用起来更方便。
|
||||
|
||||
## 前言
|
||||
|
||||
开发了多次支付宝与微信支付后,很自然产生一种反感,惰性又来了,想在网上找相关的轮子,可是一直没有找到一款自己觉得逞心如意的,要么使用起来太难理解,要么文件结构太杂乱,只有自己撸起袖子干了。
|
||||
|
||||
欢迎 Star,欢迎 PR!
|
||||
|
||||
hyperf 扩展包请 [传送至这里](https://github.com/yansongda/hyperf-pay)
|
||||
|
||||
laravel 扩展包请 [传送至这里](https://github.com/yansongda/laravel-pay)
|
||||
|
||||
yii 扩展包请 [传送至这里](https://github.com/guanguans/yii-pay)
|
||||
|
||||
## 特点
|
||||
|
||||
- 多租户支持
|
||||
- Swoole 支持
|
||||
- 灵活的插件机制
|
||||
- 丰富的事件系统
|
||||
- 命名不那么乱七八糟
|
||||
- 隐藏开发者不需要关注的细节
|
||||
- 根据支付宝、微信最新 API 开发而成
|
||||
- 高度抽象的类,免去各种拼json与xml的痛苦
|
||||
- 文件结构清晰易理解,可以随心所欲添加本项目中没有的支付网关
|
||||
- 方法使用更优雅,不必再去研究那些奇怪的的方法名或者类名是做啥用的
|
||||
- 内置自动获取微信公共证书方法,再也不用再费劲去考虑第一次获取证书的的问题了
|
||||
- 符合 PSR2、PSR3、PSR4、PSR7、PSR11、PSR14、PSR18 等各项标准,你可以各种方便的与你的框架集成
|
||||
|
||||
## 运行环境
|
||||
|
||||
- PHP 7.3+ (v3.1.0 开始需 7.4+)
|
||||
- composer
|
||||
|
||||
## LICENSE
|
||||
|
||||
MIT
|
4
web/docs/v3/kernel/pipeline.md
Normal file
4
web/docs/v3/kernel/pipeline.md
Normal file
@ -0,0 +1,4 @@
|
||||
# 🧪Pipeline
|
||||
|
||||
yansongda/pay 最主要的 plugin 机制,其实就是借助于 `pipeline` 来实现的,
|
||||
网络上有很多关于 pipeline 的说明,在此不再赘述,感兴趣的同学可以查阅相关资料。
|
364
web/docs/v3/kernel/plugin.md
Normal file
364
web/docs/v3/kernel/plugin.md
Normal file
@ -0,0 +1,364 @@
|
||||
# 🔌Plugin
|
||||
|
||||
得益于 pipeline,Pay 中的所有数据变换都通过 plugin 来实现,
|
||||
同时 Pay 中也内置了很多常用的 Plugin,因此使用方式非常灵活简单。
|
||||
|
||||
其实大家经常使用的 「网站支付」「小程序支付」「查询订单」 等均属于自定义插件,只不过这类插件已经内置在 yansongda/pay 中了,不需要您额外开发即可使用。
|
||||
|
||||
## 定义
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Yansongda\Pay\Contract;
|
||||
|
||||
use Closure;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
interface PluginInterface
|
||||
{
|
||||
public function assembly(Rocket $rocket, Closure $next): Rocket;
|
||||
}
|
||||
```
|
||||
|
||||
## 详细说明
|
||||
|
||||
### 支付宝电脑支付
|
||||
|
||||
以支付宝的电脑支付为例,我们知道,支付宝电脑支付首先需要 组装(assembly) 一系列支付宝要求的参数,
|
||||
然后,需要以 form 表单,或者 GET 的方式请求支付宝的地址,这样才能跳转到支付宝的电脑支付页面进行支付。
|
||||
|
||||
所以,除了支付宝公共的,生成签名、验签、调用支付宝API 等等公共的事情以外,我们还需要两个 Plugin
|
||||
|
||||
- 组装参数 Plugin
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Yansongda\Pay\Plugin\Alipay\Trade;
|
||||
|
||||
use Closure;
|
||||
use Yansongda\Pay\Contract\PluginInterface;
|
||||
use Yansongda\Pay\Logger;
|
||||
use Yansongda\Pay\Parser\ResponseParser;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
class PagePayPlugin implements PluginInterface
|
||||
{
|
||||
public function assembly(Rocket $rocket, Closure $next): Rocket
|
||||
{
|
||||
Logger::info('[alipay][PagePayPlugin] 插件开始装载', ['rocket' => $rocket]);
|
||||
|
||||
$rocket->setDirection(ResponseParser::class)
|
||||
->mergePayload([
|
||||
'method' => 'alipay.trade.page.pay',
|
||||
'biz_content' => array_merge(
|
||||
['product_code' => 'FAST_INSTANT_TRADE_PAY'],
|
||||
$rocket->getParams()
|
||||
),
|
||||
]);
|
||||
|
||||
Logger::info('[alipay][PagePayPlugin] 插件装载完毕', ['rocket' => $rocket]);
|
||||
|
||||
return $next($rocket);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
这个 Plugin 的目的就是为了组装一系列支付宝所需要的参数,同时,由于电脑支付是不需要后端 http 调用支付宝接口的,
|
||||
只需要一个浏览器的响应,所以,我们把 🚀 的 `Direction` 设置成了 `ResponseParser::class`。
|
||||
|
||||
- 跳转响应 Plugin
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Yansongda\Pay\Plugin\Alipay;
|
||||
|
||||
use Closure;
|
||||
use GuzzleHttp\Psr7\Response;
|
||||
use Yansongda\Pay\Contract\PluginInterface;
|
||||
use Yansongda\Pay\Logger;
|
||||
use Yansongda\Pay\Rocket;
|
||||
use Yansongda\Supports\Arr;
|
||||
use Yansongda\Supports\Collection;
|
||||
|
||||
class HtmlResponsePlugin implements PluginInterface
|
||||
{
|
||||
public function assembly(Rocket $rocket, Closure $next): Rocket
|
||||
{
|
||||
Logger::info('[alipay][HtmlResponsePlugin] 插件开始装载', ['rocket' => $rocket]);
|
||||
|
||||
/* @var Rocket $rocket */
|
||||
$rocket = $next($rocket);
|
||||
|
||||
$radar = $rocket->getRadar();
|
||||
|
||||
$response = 'GET' === $radar->getMethod() ?
|
||||
$this->buildRedirect($radar->getUri()->__toString(), $rocket->getPayload()) :
|
||||
$this->buildHtml($radar->getUri()->__toString(), $rocket->getPayload());
|
||||
|
||||
$rocket->setDestination($response);
|
||||
|
||||
Logger::info('[alipay][HtmlResponsePlugin] 插件装载完毕', ['rocket' => $rocket]);
|
||||
|
||||
return $rocket;
|
||||
}
|
||||
|
||||
protected function buildRedirect(string $endpoint, Collection $payload): Response
|
||||
{
|
||||
$url = $endpoint.'?'.Arr::query($payload->all());
|
||||
|
||||
$content = sprintf('<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="refresh" content="0;url=\'%1$s\'" />
|
||||
|
||||
<title>Redirecting to %1$s</title>
|
||||
</head>
|
||||
<body>
|
||||
Redirecting to %1$s.
|
||||
</body>
|
||||
</html>', htmlspecialchars($url, ENT_QUOTES)
|
||||
);
|
||||
|
||||
return new Response(302, ['Location' => $url], $content);
|
||||
}
|
||||
|
||||
protected function buildHtml(string $endpoint, Collection $payload): Response
|
||||
{
|
||||
$sHtml = "<form id='alipay_submit' name='alipay_submit' action='".$endpoint."' method='POST'>";
|
||||
foreach ($payload->all() as $key => $val) {
|
||||
$val = str_replace("'", ''', $val);
|
||||
$sHtml .= "<input type='hidden' name='".$key."' value='".$val."'/>";
|
||||
}
|
||||
$sHtml .= "<input type='submit' value='ok' style='display:none;'></form>";
|
||||
$sHtml .= "<script>document.forms['alipay_submit'].submit();</script>";
|
||||
|
||||
return new Response(200, [], $sHtml);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
在处理好支付宝所需要的参数之后,按照其它正常逻辑,应该调用支付宝API获取数据了,
|
||||
但是由于 电脑支付 不是直接调用支付宝API的,
|
||||
所以,这里使用了 `后置 plugin` 处理组装相关 html 代码进行 post 或者 GET 请求访问支付宝电脑支付页面。
|
||||
|
||||
最后,得益于 🚀 的 `Direction` 机制,最终返回给你的就是一个符合 PSR7 规范的 `Response` 对象了,
|
||||
您可以集成到任何符合相关规范的框架中。
|
||||
|
||||
### 支付宝查询订单
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Yansongda\Pay\Plugin\Alipay\Trade;
|
||||
|
||||
use Yansongda\Pay\Plugin\Alipay\GeneralPlugin;
|
||||
|
||||
class QueryPlugin extends GeneralPlugin
|
||||
{
|
||||
protected function getMethod(): string
|
||||
{
|
||||
return 'alipay.trade.query';
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Yansongda\Pay\Plugin\Alipay;
|
||||
|
||||
use Closure;
|
||||
use Yansongda\Pay\Contract\PluginInterface;
|
||||
use Yansongda\Pay\Logger;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
abstract class GeneralPlugin implements PluginInterface
|
||||
{
|
||||
public function assembly(Rocket $rocket, Closure $next): Rocket
|
||||
{
|
||||
Logger::info('[alipay][GeneralPlugin] 通用插件开始装载', ['rocket' => $rocket]);
|
||||
|
||||
$rocket->mergePayload([
|
||||
'method' => $this->getMethod(),
|
||||
'biz_content' => $rocket->getParams(),
|
||||
]);
|
||||
|
||||
Logger::info('[alipay][GeneralPlugin] 通用插件装载完毕', ['rocket' => $rocket]);
|
||||
|
||||
return $next($rocket);
|
||||
}
|
||||
|
||||
abstract protected function getMethod(): string;
|
||||
}
|
||||
```
|
||||
|
||||
通过以上代码,我们大概能明白,查询订单的 `QueryPlugin` 插件,继承了 `GeneralPlugin` 这个常用插件,
|
||||
通过支付宝官方文档,我们知道,查询订单的 API 将传参中的 method 改为了 `alipay.trade.query`,其它参数均是个性化参数,和入参有关,
|
||||
因此,我们在做查询订单时,是需要简单的把 method 按要求更改即可,是不是很简单?
|
||||
|
||||
### 微信查询订单
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Yansongda\Pay\Plugin\Wechat\Pay\Common;
|
||||
|
||||
use Yansongda\Pay\Exception\InvalidParamsException;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
class QueryPlugin extends GeneralPlugin
|
||||
{
|
||||
/**
|
||||
* @throws \Yansongda\Pay\Exception\ContainerDependencyException
|
||||
* @throws \Yansongda\Pay\Exception\ContainerException
|
||||
* @throws \Yansongda\Pay\Exception\ServiceNotFoundException
|
||||
* @throws \Yansongda\Pay\Exception\InvalidParamsException
|
||||
*/
|
||||
protected function getUri(Rocket $rocket): string
|
||||
{
|
||||
$config = get_wechat_config($rocket->getParams());
|
||||
$payload = $rocket->getPayload();
|
||||
|
||||
if (is_null($payload->get('transaction_id'))) {
|
||||
throw new InvalidParamsException(InvalidParamsException::MISSING_NECESSARY_PARAMS);
|
||||
}
|
||||
|
||||
return 'v3/pay/transactions/id/'.
|
||||
$payload->get('transaction_id').
|
||||
'?mchid='.$config->get('mch_id', '');
|
||||
}
|
||||
|
||||
protected function getMethod(): string
|
||||
{
|
||||
return 'GET';
|
||||
}
|
||||
|
||||
protected function doSomething(Rocket $rocket): void
|
||||
{
|
||||
$rocket->setPayload(null);
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Yansongda\Pay\Plugin\Wechat;
|
||||
|
||||
use Closure;
|
||||
use Psr\Http\Message\RequestInterface;
|
||||
use Yansongda\Pay\Contract\PluginInterface;
|
||||
use Yansongda\Pay\Logger;
|
||||
use Yansongda\Pay\Pay;
|
||||
use Yansongda\Pay\Provider\Wechat;
|
||||
use Yansongda\Pay\Request;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
abstract class GeneralPlugin implements PluginInterface
|
||||
{
|
||||
/**
|
||||
* @throws \Yansongda\Pay\Exception\ServiceNotFoundException
|
||||
* @throws \Yansongda\Pay\Exception\ContainerException
|
||||
* @throws \Yansongda\Pay\Exception\ContainerDependencyException
|
||||
*/
|
||||
public function assembly(Rocket $rocket, Closure $next): Rocket
|
||||
{
|
||||
Logger::info('[wechat][GeneralPlugin] 通用插件开始装载', ['rocket' => $rocket]);
|
||||
|
||||
$rocket->setRadar($this->getRequest($rocket));
|
||||
$this->doSomething($rocket);
|
||||
|
||||
Logger::info('[wechat][GeneralPlugin] 通用插件装载完毕', ['rocket' => $rocket]);
|
||||
|
||||
return $next($rocket);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \Yansongda\Pay\Exception\ContainerDependencyException
|
||||
* @throws \Yansongda\Pay\Exception\ContainerException
|
||||
* @throws \Yansongda\Pay\Exception\ServiceNotFoundException
|
||||
*/
|
||||
protected function getRequest(Rocket $rocket): RequestInterface
|
||||
{
|
||||
return new Request(
|
||||
$this->getMethod(),
|
||||
$this->getUrl($rocket),
|
||||
$this->getHeaders(),
|
||||
);
|
||||
}
|
||||
|
||||
protected function getMethod(): string
|
||||
{
|
||||
return 'POST';
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \Yansongda\Pay\Exception\ContainerDependencyException
|
||||
* @throws \Yansongda\Pay\Exception\ContainerException
|
||||
* @throws \Yansongda\Pay\Exception\ServiceNotFoundException
|
||||
*/
|
||||
protected function getUrl(Rocket $rocket): string
|
||||
{
|
||||
$config = get_wechat_config($rocket->getParams());
|
||||
|
||||
return Wechat::URL[$config->get('mode', Pay::MODE_NORMAL)].
|
||||
$this->getUri($rocket);
|
||||
}
|
||||
|
||||
protected function getHeaders(): array
|
||||
{
|
||||
return [
|
||||
'Content-Type' => 'application/json',
|
||||
];
|
||||
}
|
||||
|
||||
abstract protected function doSomething(Rocket $rocket): void;
|
||||
|
||||
abstract protected function getUri(Rocket $rocket): string;
|
||||
}
|
||||
```
|
||||
|
||||
支付宝和微信的 `QueryPlugin` 和 `GeneralPlugin` 有些许不一样,不过都是为了高度抽象出支付运营商的API。
|
||||
|
||||
通过微信官方文档,我们知道,查询订单的 API 将传参中的 url 是随参数变化而变化的,因此我们抽象出了 `getUri` 等方法,方便做各种请求上的调整。
|
||||
|
||||
|
||||
## 通用插件
|
||||
|
||||
Pay 内部已经集成了很多通用插件,如 加密,签名,调用支付宝/微信接口等。
|
||||
|
||||
只需要简单的使用以下代码即可获取通用插件
|
||||
|
||||
```php
|
||||
$allPlugins = Pay::alipay()->mergeCommonPlugins([QueryPlugin::class]);
|
||||
```
|
||||
|
||||
## 最终调用
|
||||
|
||||
在拿到所有的插件之后,就可以愉快的进行调用获取最后的数据了。
|
||||
|
||||
```php
|
||||
$result = Pay::alipay()->pay($allPlugins, $params);
|
||||
```
|
||||
|
||||
代码中的 `$params` 为调用 API 所需要的其它参数。
|
90
web/docs/v3/kernel/rocket.md
Normal file
90
web/docs/v3/kernel/rocket.md
Normal file
@ -0,0 +1,90 @@
|
||||
# 🚀Rocket
|
||||
|
||||
yansongda/pay 将 `输入参数`、`请求`、`原始响应`、`最终响应` 抽象成了一种类型 `Rocket`,
|
||||
在 Pay 项目中,所有的数据扭转都是通过 Rocket 来实现的。
|
||||
|
||||
`Rocket` 也是由不同的属性组成的,现一一道来
|
||||
|
||||
## 📡 Radar
|
||||
|
||||
可以理解为是 🚀 的 `雷达`,负责导航使用。
|
||||
|
||||
该属性,实际上最终为一个 `\Psr\Http\Message\RequestInterface` 对象,
|
||||
具体到项目,默认情况下,就是 `\Yansongda\Pay\Request`。
|
||||
|
||||
所有需要请求支付供应商 API 的方法,最终都会使用这个 📡 ,去调用 http 接口请求支付供应商的 API。
|
||||
|
||||
## 🛠 Params
|
||||
|
||||
该属性为 `array`,实际存储的就是输入的所有参数。
|
||||
|
||||
例如 查询退款 中的
|
||||
|
||||
```php
|
||||
[
|
||||
'out_trade_no' => '1514027114',
|
||||
'out_request_no' => '1514027114',
|
||||
'_type' => 'refund',
|
||||
];
|
||||
```
|
||||
|
||||
Pay 项目中,将所有以 _下划线_ 开始的参数都定义为 `特殊参数`,此类参数 **一定不会在 payload 中出现**,
|
||||
仅会用于特殊参数判断。
|
||||
|
||||
## ⚙️ Payload
|
||||
|
||||
该属性类型为 `\Yansongda\Supports\Collection`,是 🚀 的 `有效载荷`,
|
||||
实际存储的是所有需要请求给支付供应商的所有参数。
|
||||
|
||||
:::warning
|
||||
注意,payload 和 params 是不一样的,params 存储的是原封不动的输入参数,payload 是经过一系列插件 "过滤" 后的 有效载荷。
|
||||
:::
|
||||
|
||||
## 🗝 Direction
|
||||
|
||||
🚀 的方向。
|
||||
|
||||
实际的作用为:把控最终请求需要解包的类型
|
||||
|
||||
例如,支付宝电脑支付中,其最终返回的是一个 `Response` 对象,不需要直接后端 http 请求支付宝接口的,
|
||||
所以当使用支付宝电脑支付时,其 Direction 为 `Yansongda\Pay\Parser\ResponseParser::class`。
|
||||
|
||||
绝大多数情况下,均默认为:`Yansongda\Pay\Parser\CollectionParser::class`
|
||||
|
||||
## 🌟 ️Destination
|
||||
|
||||
🚀 的目的地。
|
||||
|
||||
实际作用为:最终返回的类
|
||||
|
||||
`Destination` 和 `Direction` 密切相关。 `Direction` 直接决定这 `Destination` 的值和类型。
|
||||
|
||||
- 当 Direction 为 CollectionParser 时
|
||||
|
||||
Destination 最终返回的是 Collection 对象
|
||||
|
||||
- 当 Direction 为 ResponseParser 时
|
||||
|
||||
Destination 最终返回的是 Response 对象
|
||||
|
||||
- 当 Direction 为 ArrayParser 时
|
||||
|
||||
Destination 最终返回的是 array 数组
|
||||
|
||||
- 当 Direction 为 JsonParser 时
|
||||
|
||||
Destination 最终返回的是 string
|
||||
|
||||
- 当 Direction 为 NoHttpRequestParser 时
|
||||
|
||||
Destination 最终返回的是 原样的 Radar
|
||||
|
||||
- 当 Direction 为 OriginResponseParser 时
|
||||
|
||||
Destination 最终返回的是 Rocket 中的 DestinationOrigin
|
||||
|
||||
## ✨ DestinationOrigin
|
||||
|
||||
🚀 的原始目的地。
|
||||
|
||||
实际作用为:当请求支付供应商的 http 接口后的原始 Response
|
53
web/docs/v3/kernel/shortcut.md
Normal file
53
web/docs/v3/kernel/shortcut.md
Normal file
@ -0,0 +1,53 @@
|
||||
# 💤快捷方式
|
||||
|
||||
Shortcut 即快捷方式,是一系列 Plugin 的组合,方便我们使用 Pay。
|
||||
|
||||
## 定义
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Yansongda\Pay\Contract;
|
||||
|
||||
interface ShortcutInterface
|
||||
{
|
||||
/**
|
||||
* @author yansongda <me@yansongda.cn>
|
||||
*
|
||||
* @return \Yansongda\Pay\Contract\PluginInterface[]|string[]
|
||||
*/
|
||||
public function getPlugins(array $params): array;
|
||||
}
|
||||
```
|
||||
|
||||
## 详细说明
|
||||
|
||||
以我们刚刚在 [插件Plugin](/docs/v3/kernel/plugin.md) 中的例子来说明,
|
||||
支付宝电脑支付,其实也是一种 快捷方式
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Yansongda\Pay\Plugin\Alipay\Shortcut;
|
||||
|
||||
use Yansongda\Pay\Contract\ShortcutInterface;
|
||||
use Yansongda\Pay\Plugin\Alipay\HtmlResponsePlugin;
|
||||
use Yansongda\Pay\Plugin\Alipay\Trade\PagePayPlugin;
|
||||
|
||||
class WebShortcut implements ShortcutInterface
|
||||
{
|
||||
public function getPlugins(array $params): array
|
||||
{
|
||||
return [
|
||||
PagePayPlugin::class,
|
||||
HtmlResponsePlugin::class,
|
||||
];
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
是不是灰常简单?
|
91
web/docs/v3/others/event.md
Normal file
91
web/docs/v3/others/event.md
Normal file
@ -0,0 +1,91 @@
|
||||
# 事件
|
||||
|
||||
在支付过程中,可能会想监听一些事件,好同时处理一些其它任务。
|
||||
|
||||
SDK 使用 [symfony/event-dispatcher](https://github.com/symfony/event-dispatcher) 组件进行事件的相关操作。
|
||||
|
||||
在使用之前,需要先确保安装了 `symfony/event-dispatcher` 组件,如果没有,请安装
|
||||
|
||||
```shell
|
||||
composer require symfony/event-dispatcher
|
||||
```
|
||||
|
||||
## 使用
|
||||
|
||||
::: tip
|
||||
使用事件系统前,确保已初始化 pay。即调用了 `Pay::config($config)`
|
||||
:::
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
use Yansongda\Pay\Event;
|
||||
use Yansongda\Pay\Event\PayStarted;
|
||||
|
||||
// 1. 新建一个监听器
|
||||
class PayStartedListener
|
||||
{
|
||||
public function sendEmail(PayStarted $event)
|
||||
{
|
||||
// 可以直接通过 $event 获取事件的额外数据,例如:
|
||||
// 支付传递的参数:$event->params
|
||||
|
||||
// coding to send email...
|
||||
}
|
||||
}
|
||||
|
||||
// 2. 添加监听器
|
||||
Event::addListener(PayStarted::class, [new PayStartedListener(), 'sendEmail']);
|
||||
|
||||
// 3. 喝杯咖啡
|
||||
```
|
||||
|
||||
## 事件
|
||||
|
||||
### 支付开始
|
||||
|
||||
- 事件类:Yansongda\Pay\Event\PayStarted
|
||||
- 说明:此事件将在支付进入核心流程时进行抛出。此时 SDK 只进行了相关初始化操作,其它所有操作均未开始。
|
||||
- 额外数据:
|
||||
- $rocket (相关参数)
|
||||
- $plugins (所有使用的插件)
|
||||
- $params (传递的原始参数)
|
||||
|
||||
### 支付完毕
|
||||
|
||||
- 事件类:Yansongda\Pay\Event\PayFinish
|
||||
- 说明:此事件将在所有参数处理完毕时抛出。
|
||||
- 额外数据:
|
||||
- $rocket (相关参数)
|
||||
|
||||
### 开始调用API
|
||||
|
||||
- 事件类:Yansongda\Pay\Event\ApiRequesting
|
||||
- 说明:此事件将在请求支付方的 API 前抛出。
|
||||
- 额外数据:
|
||||
- $rocket (相关参数)
|
||||
|
||||
### 调用API结束
|
||||
|
||||
- 事件类:Yansongda\Pay\Event\ApiRequested
|
||||
- 说明:此事件将在请求支付方的 API 完成之后抛出。
|
||||
- 额外数据:
|
||||
- $rocket (相关参数)
|
||||
|
||||
### 收到通知
|
||||
|
||||
- 事件类:Yansongda\Pay\Event\CallbackReceived
|
||||
- 说明:此事件将在收到支付方的请求(通常在异步通知或同步通知)时抛出
|
||||
- 额外数据:
|
||||
- $provider (支付机构)
|
||||
- $contents (收到的数据)
|
||||
- $params (自定义数据)
|
||||
|
||||
### 调用其它方法
|
||||
|
||||
- 事件类:Yansongda\Pay\Event\MethodCalled
|
||||
- 说明:此事件将在调用除 PAYMETHOD 方法(例如,查询订单,退款,取消订单)时抛出
|
||||
- 额外数据:
|
||||
- $provider (支付机构)
|
||||
- $name (调用方法)
|
||||
- $params (参数)
|
37
web/docs/v3/others/faq.md
Normal file
37
web/docs/v3/others/faq.md
Normal file
@ -0,0 +1,37 @@
|
||||
# FAQ
|
||||
|
||||
1. 支付宝支付成功,但是对返回数据验签老是失败。
|
||||
|
||||
绝大部分问题都是配置问题,首先请确认 **正确填写了支付宝公钥(注意不是应用公钥)**。
|
||||
|
||||
如果还没解决,请参考 github 的 issue:[https://github.com/yansongda/pay/issues/73](https://github.com/yansongda/pay/issues/73)
|
||||
|
||||
如果仍然没解决,请检查您所使用的框架是否对 get/post 数据进行了增加,请自行处理好 Nginx/Apache 对框架的 URL 重写问题
|
||||
|
||||
2. 我是做 API 的,怎样可以获取 Response 中的内容?
|
||||
|
||||
返回的 Response 中,`(string) $response->getBody()` 可获取内容。详细请了解 PSR 规范。
|
||||
|
||||
3. cURL error 60: SSL certificate problem: unable to get local issuer certificate
|
||||
|
||||
服务器环境配置问题。
|
||||
|
||||
请参考 [https://github.com/yansongda/pay/issues/16](https://github.com/yansongda/pay/issues/16)
|
||||
|
||||
4. 是否支持其他支付平台?比如:银联、京东。
|
||||
|
||||
由于使用限制,暂不支持。
|
||||
|
||||
**欢迎 PR!**
|
||||
|
||||
5. 支付宝是否支持 AES 等加密方式?
|
||||
|
||||
因为支付宝推荐 RSA2 ,所以不推荐也不支持除 **RSA2** 以外的任何加密方式!
|
||||
|
||||
6. 微信支付报错 Prepay Response Error: Missing PrepayId
|
||||
|
||||
预下单 失败了,一般是缺少参数或参数类型错误。可以自己捕获异常,看微信提示的详细信息,对照微信官方文档修改相关参数。
|
||||
|
||||
7. Get Wechat Public Cert Error
|
||||
|
||||
检查微信商户密钥(mch_secret_key),非 v2 秘钥
|
46
web/docs/v3/others/logger.md
Normal file
46
web/docs/v3/others/logger.md
Normal file
@ -0,0 +1,46 @@
|
||||
# 日志系统
|
||||
|
||||
## 配置
|
||||
|
||||
### 使用内置日志系统
|
||||
|
||||
:::tip
|
||||
使用前,请确保已经安装了 `monolog/monolog`: `composer require monolog/monolog`
|
||||
:::
|
||||
|
||||
SDK 自带日志系统,如果需要指定日志文件或日志级别,请 config 中传入下列参数。
|
||||
如果不传入,则日志系统默认不启用。
|
||||
|
||||
```php
|
||||
'logger' => [
|
||||
'enable' => true,
|
||||
'file' => './logs/pay.log', // 请注意权限
|
||||
'level' => 'info', // 建议生产环境等级调整为 info,开发环境为 debug
|
||||
'type' => 'single', // optional, 可选 daily, daily 时将按时间自动划分文件.
|
||||
'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
|
||||
],
|
||||
```
|
||||
|
||||
### 使用外部日志系统
|
||||
|
||||
yansongda/pay 支持使用外部日志系统,只需要日志规范支持 PSR3 规范,实现了 `\Psr\Log\LoggerInterface` 即可。
|
||||
|
||||
```php
|
||||
use Yansongda\Pay\Contract\LoggerInterface;
|
||||
|
||||
// $logger = 你的日志系统
|
||||
|
||||
Pay::set(LoggerInterface::class, $logger);
|
||||
```
|
||||
|
||||
## 使用
|
||||
|
||||
:::tip
|
||||
使用日志功能前,请先确认已经使用过支付等功能进行了初始化!
|
||||
:::
|
||||
|
||||
```php
|
||||
use Yansongda\Pay\Logger;
|
||||
|
||||
Logger::debug('Paying...', $order->all());
|
||||
```
|
7
web/docs/v3/overview/business.md
Normal file
7
web/docs/v3/overview/business.md
Normal file
@ -0,0 +1,7 @@
|
||||
# 商业与企业服务
|
||||
|
||||
如果您有商业或企业技术支持服务的需求,以便您更轻松的使用 Pay,您可以将您的需求信息整理好后发邮件给我,如果合适,我会及时联系您。
|
||||
|
||||
:::tip
|
||||
我的联系方式: me@yansongda.cn
|
||||
:::
|
23
web/docs/v3/overview/communication.md
Normal file
23
web/docs/v3/overview/communication.md
Normal file
@ -0,0 +1,23 @@
|
||||
# 线上交流
|
||||
|
||||
:::danger 注意
|
||||
进群前请仔细看文档,文档相对来说已经很详细了。
|
||||
|
||||
没有人义务回答你的问题,没有人欠你的,所以线上交流请文明用语,首先学会智慧提问、友好交流。
|
||||
:::
|
||||
|
||||
## Issue
|
||||
|
||||
[https://github.com/yansongda/pay/issues](https://github.com/yansongda/pay/issues)
|
||||
|
||||
## Discuss
|
||||
|
||||
[https://github.com/yansongda/pay/discussions](https://github.com/yansongda/pay/discussions)
|
||||
|
||||
## QQ 群
|
||||
|
||||
:::warning
|
||||
资金原因,仅提供 500 人群,请仔细阅读文档后,按需加入
|
||||
:::
|
||||
|
||||
群号:690027516
|
7
web/docs/v3/overview/contribute.md
Normal file
7
web/docs/v3/overview/contribute.md
Normal file
@ -0,0 +1,7 @@
|
||||
# 参与开发
|
||||
|
||||
由于测试及使用环境的限制,本项目中只开发了「支付宝」和「微信支付」的相关支付网关。
|
||||
|
||||
如果您有其它支付网关的需求,或者发现本项目中需要改进的代码,**_欢迎 Fork 并提交 PR!_**
|
||||
|
||||
参与开发前,请先仔细阅读 [核心架构](/docs/v3/kernel/rocket.md) 以便了解相关核心思想。
|
43
web/docs/v3/overview/donate.md
Normal file
43
web/docs/v3/overview/donate.md
Normal file
@ -0,0 +1,43 @@
|
||||
# 捐赠
|
||||
|
||||
Pay 项目采用 MIT 协议开源发布,任何人均可在遵循 MIT 协议的情况下随意使用。
|
||||
|
||||
但维护一个开源项目对于我来说并不容易,需要耗费大量时间、精力、财力。
|
||||
如果这个项目给您带来了方便,希望您赞助开发与可持续性发展。
|
||||
如果您愿意,请联系我,您的公司/个人赞助将展现在本页面上。
|
||||
|
||||
:::tip
|
||||
我的联系方式: me@yansongda.cn
|
||||
:::
|
||||
|
||||
## 赏一杯瑞幸吧
|
||||
|
||||
![pay](/images/pay.jpg)
|
||||
|
||||
|
||||
## 不完全名单
|
||||
|
||||
### 企业
|
||||
|
||||
[![jetbrains](/images/jetbrains.png)](https://www.jetbrains.com/)
|
||||
|
||||
### 个人
|
||||
|
||||
排名按时间顺序
|
||||
|
||||
| 昵称 | 姓名 | 金额/用途 |
|
||||
| ---- | ---- | --------- |
|
||||
| 醒醒吧 | **平 | ¥10.00 |
|
||||
| Akun | - | 提供微信支付测试资源帮助测试 |
|
||||
| - | *坤 | ¥10.00 |
|
||||
| - | *爆 | ¥66.00 |
|
||||
| - | *洲 | ¥10.00 |
|
||||
| - | *友 | ¥300.00 |
|
||||
| 一杯小蓝 | *彦 | ¥16.80 |
|
||||
| u*e | - | ¥11.00 |
|
||||
| N*s | - | ¥10.00 |
|
||||
| *虫 | - | ¥100.00 |
|
||||
| - | **波 | ¥10.00 |
|
||||
| *※ | - | ¥8.88 |
|
||||
| 往** | - | ¥19.80 |
|
||||
| 建*u | - | ¥17.60 |
|
3
web/docs/v3/overview/versions.md
Normal file
3
web/docs/v3/overview/versions.md
Normal file
@ -0,0 +1,3 @@
|
||||
# 更新记录
|
||||
|
||||
see: [CHANGELOG.md](https://github.com/yansongda/pay/blob/master/CHANGELOG.md) 或 [Release](https://github.com/yansongda/pay/releases)
|
141
web/docs/v3/quick-start/alipay.md
Normal file
141
web/docs/v3/quick-start/alipay.md
Normal file
@ -0,0 +1,141 @@
|
||||
# 支付宝快速入门
|
||||
|
||||
在初始化完毕后,就可以直接方便的享受 `yansongda/pay` 带来的便利了。
|
||||
|
||||
## 网页支付
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
return Pay::alipay()->web([
|
||||
'out_trade_no' => ''.time(),
|
||||
'total_amount' => '0.01',
|
||||
'subject' => 'yansongda 测试 - 1',
|
||||
]);
|
||||
```
|
||||
|
||||
## H5支付
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
return Pay::alipay()->wap([
|
||||
'out_trade_no' => time(),
|
||||
'total_amount' => '0.01',
|
||||
'subject' => 'yansongda 测试 - 01',
|
||||
'quit_url' => 'https://yansongda.cn',
|
||||
]);
|
||||
```
|
||||
|
||||
## APP 支付
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
return Pay::alipay()->app([
|
||||
'out_trade_no' => time(),
|
||||
'total_amount' => '0.01',
|
||||
'subject' => 'yansongda 测试 - 01',
|
||||
]);
|
||||
```
|
||||
|
||||
## 小程序支付
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
$result = Pay::alipay()->mini([
|
||||
'out_trade_no' => time().'',
|
||||
'total_amount' => '0.01',
|
||||
'subject' => 'yansongda 测试 - 01',
|
||||
'buyer_id' => '2088622190161234',
|
||||
]);
|
||||
|
||||
return $result->get('trade_no'); // 支付宝交易号
|
||||
// return $result->trade_no;
|
||||
```
|
||||
|
||||
## 刷卡支付
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
$result = Pay::alipay()->pos([
|
||||
'out_trade_no' => time(),
|
||||
'auth_code' => '284776044441477959',
|
||||
'total_amount' => '0.01',
|
||||
'subject' => 'yansongda 测试 - 01',
|
||||
]);
|
||||
```
|
||||
|
||||
## 扫码支付
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
$result = Pay::alipay()->scan([
|
||||
'out_trade_no' => time(),
|
||||
'total_amount' => '0.01',
|
||||
'subject' => 'yansongda 测试 - 01',
|
||||
]);
|
||||
|
||||
return $result->qr_code; // 二维码 url
|
||||
```
|
||||
|
||||
## 转账
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
$result = Pay::alipay()->transfer([
|
||||
'out_biz_no' => '202106051432',
|
||||
'trans_amount' => '0.01',
|
||||
'product_code' => 'TRANS_ACCOUNT_NO_PWD',
|
||||
'biz_scene' => 'DIRECT_TRANSFER',
|
||||
'payee_info' => [
|
||||
'identity' => 'ghdhjw7124@sandbox.com',
|
||||
'identity_type' => 'ALIPAY_LOGON_ID',
|
||||
'name' => '沙箱环境'
|
||||
],
|
||||
]);
|
||||
```
|
||||
|
||||
## 退款
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
$result = Pay::alipay()->refund([
|
||||
'out_trade_no' => '1623160012',
|
||||
'refund_amount' => '0.01',
|
||||
]);
|
||||
```
|
||||
|
||||
## 查询订单
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
$order = [
|
||||
'out_trade_no' => '1514027114',
|
||||
];
|
||||
// $order = '1514027114';
|
||||
|
||||
$result = Pay::alipay()->find($order);
|
||||
```
|
||||
|
||||
## 支付宝回调处理
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
$result = Pay::alipay()->callback();
|
||||
```
|
||||
|
||||
## 响应支付宝回调
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
return Pay::alipay()->success();
|
||||
```
|
150
web/docs/v3/quick-start/init.md
Normal file
150
web/docs/v3/quick-start/init.md
Normal file
@ -0,0 +1,150 @@
|
||||
# 初始化
|
||||
|
||||
初始化有两种方式,大家可根据自己的习惯选择合适的方式。
|
||||
|
||||
SDK 一旦初始化后,底层使用单例模式保存配置信息,所以,每次使用只需初始化一次即可,无需多次,后续重复初始化将不会生效
|
||||
当然,您也可以使用 `_force` 参数强制初始化覆盖原来的配置项。
|
||||
|
||||
假设有以下配置文件:
|
||||
|
||||
```php
|
||||
$config = [
|
||||
'alipay' => [
|
||||
'default' => [
|
||||
// 必填-支付宝分配的 app_id
|
||||
'app_id' => '2016082000295641',
|
||||
// 必填-应用私钥 字符串或路径
|
||||
'app_secret_cert' => 'MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCDRjOg5DnX+8L+rB8d2MbrQ30Z7JPM4hiDhawHSwQCQ7RlmQNpl6b/N6IrPLcPFC1uii179U5Il5xTZynfjkUyJjnHusqnmHskftLJDKkmGbSUFMAlOv+NlpUWMJ2A+VUopl+9FLyqcV+XgbaWizxU3LsTtt64v89iZ2iC16H6/6a3YcP+hDZUjiNGQx9cuwi9eJyykvcwhDkFPxeBxHbfwppsul+DYUyTCcl0Ltbga/mUechk5BksW6yPPwprYHQBXyM16Jc3q5HbNxh3660FyvUBFLuVWIBs6RtR2gZCa6b8rOtCkPQKhUKvzRMlgheOowXsWdk99GjxGQDK5W4XAgMBAAECggEAYPKnjlr+nRPBnnNfR5ugzH67FToyrU0M7ZT6xygPfdyijaXDb2ggXLupeGUOjIRKSSijDrjLZ7EQMkguFHvtfmvcoDTDFaL2zq0a3oALK6gwRGxOuzAnK1naINkmeOmqiqrUab+21emEv098mRGbLNEXGCgltCtz7SiRdo/pgIPZ1wHj4MH0b0K2bFG3xwr51EyaLXKYH4j6w9YAXXsTdvzcJ+eRE0Yq4uGPfkziqg8d0xXSEt90HmCGHKo4O2eh1w1IlBcHfK0F6vkeUAtrtAV01MU2bNoRU147vKFxjDOVBlY1nIZY/drsbiPMuAfSsodL0hJxGSYivbKTX4CWgQKBgQDd0MkF5AIPPdFC+fhWdNclePRw4gUkBwPTIUljMP4o+MhJNrHp0sEy0sr1mzYsOT4J20hsbw/qTnMKGdgy784bySf6/CC7lv2hHp0wyS3Es0DRJuN+aTyyONOKGvQqd8gvuQtuYJy+hkIoHygjvC3TKndX1v66f9vCr/7TS0QPywKBgQCXgVHERHP+CarSAEDG6bzI878/5yqyJVlUeVMG5OXdlwCl0GAAl4mDvfqweUawSVFE7qiSqy3Eaok8KHkYcoRlQmAefHg/C8t2PNFfNrANDdDB99f7UhqhXTdBA6DPyW02eKIaBcXjZ7jEXZzA41a/zxZydKgHvz4pUq1BdbU5ZQKBgHyqGCDgaavpQVAUL1df6X8dALzkuqDp9GNXxOgjo+ShFefX/pv8oCqRQBJTflnSfiSKAqU2skosdwlJRzIxhrQlFPxBcaAcl0VTcGL33mo7mIU0Bw2H1d4QhAuNZIbttSvlIyCQ2edWi54DDMswusyAhHxwz88/huJfiad1GLaLAoGASIweMVNuD5lleMWyPw2x3rAJRnpVUZTc37xw6340LBWgs8XCEsZ9jN4t6s9H8CZLiiyWABWEBufU6z+eLPy5NRvBlxeXJOlq9iVNRMCVMMsKybb6b1fzdI2EZdds69LSPyEozjkxdyE1sqH468xwv8xUPV5rD7qd83+pgwzwSJkCgYBrRV0OZmicfVJ7RqbWyneBG03r7ziA0WTcLdRWDnOujQ9orhrkm+EY2evhLEkkF6TOYv4QFBGSHfGJ0SwD7ghbCQC/8oBvNvuQiPWI8B+00LwyxXNrkFOxy7UfIUdUmLoLc1s/VdBHku+JEd0YmEY+p4sjmcRnlu4AlzLxkWUTTg==',
|
||||
// 必填-应用公钥证书 路径
|
||||
'app_public_cert_path' => '/Users/yansongda/pay/cert/appCertPublicKey_2016082000295641.crt',
|
||||
// 必填-支付宝公钥证书 路径
|
||||
'alipay_public_cert_path' => '/Users/yansongda/pay/cert/alipayCertPublicKey_RSA2.crt',
|
||||
// 必填-支付宝根证书 路径
|
||||
'alipay_root_cert_path' => '/Users/yansongda/pay/cert/alipayRootCert.crt',
|
||||
'return_url' => 'https://yansongda.cn/alipay/return',
|
||||
'notify_url' => 'https://yansongda.cn/alipay/notify',
|
||||
// 选填-第三方应用授权token
|
||||
'app_auth_token' => '',
|
||||
// 选填-服务商模式下的服务商 id,当 mode 为 Pay::MODE_SERVICE 时使用该参数
|
||||
'service_provider_id' => '',
|
||||
// 选填-默认为正常模式。可选为: MODE_NORMAL, MODE_SANDBOX, MODE_SERVICE
|
||||
'mode' => Pay::MODE_NORMAL,
|
||||
]
|
||||
],
|
||||
'wechat' => [
|
||||
'default' => [
|
||||
// 必填-商户号,服务商模式下为服务商商户号
|
||||
'mch_id' => '',
|
||||
// 必填-商户秘钥
|
||||
'mch_secret_key' => '',
|
||||
// 必填-商户私钥 字符串或路径
|
||||
'mch_secret_cert' => '',
|
||||
// 必填-商户公钥证书路径
|
||||
'mch_public_cert_path' => '',
|
||||
// 必填
|
||||
'notify_url' => 'https://yansongda.cn/wechat/notify',
|
||||
// 选填-公众号 的 app_id
|
||||
'mp_app_id' => '2016082000291234',
|
||||
// 选填-小程序 的 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' => [
|
||||
'45F59D4DABF31918AFCEC556D5D2C6E376675D57' => __DIR__.'/Cert/wechatPublicKey.crt',
|
||||
],
|
||||
// 选填-默认为正常模式。可选为: MODE_NORMAL, MODE_SERVICE
|
||||
'mode' => Pay::MODE_NORMAL,
|
||||
]
|
||||
],
|
||||
'logger' => [
|
||||
'enable' => false,
|
||||
'file' => './logs/alipay.log',
|
||||
'level' => 'info', // 建议生产环境等级调整为 info,开发环境为 debug
|
||||
'type' => 'single', // optional, 可选 daily.
|
||||
'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
|
||||
],
|
||||
'http' => [ // optional
|
||||
'timeout' => 5.0,
|
||||
'connect_timeout' => 5.0,
|
||||
// 更多配置项请参考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
|
||||
],
|
||||
];
|
||||
```
|
||||
|
||||
## 初始化方式
|
||||
|
||||
### 方式一
|
||||
|
||||
直接调用 `config` 方法初始化
|
||||
|
||||
```php
|
||||
Pay::config($config);
|
||||
```
|
||||
|
||||
如果需要强制初始化覆盖配置信息
|
||||
|
||||
```php
|
||||
Pay::config(array_merge($config, ['_force' => true]));
|
||||
```
|
||||
|
||||
### 方式二
|
||||
|
||||
在每次实际调用时顺便初始化
|
||||
|
||||
```php
|
||||
Pay::alipay($config)->web($order);
|
||||
```
|
||||
|
||||
如果需要强制初始化覆盖配置信息
|
||||
|
||||
```php
|
||||
Pay::alipay(array_merge($config, ['_force' => true]))->web($order);
|
||||
```
|
||||
|
||||
## 配置切换
|
||||
|
||||
v3.x 版本开始,支持了多租户功能,所以,不同租户有不同的配置项,如果想要在使用时切换配置项怎么办呢?
|
||||
|
||||
其实很简单,传参时,加一个参数即可: `'_config' => 'default'`。
|
||||
|
||||
例如,我们想在查询支付宝支付订单时,使用另外一个租户的配置文件
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
$order = [
|
||||
'out_trade_no' => '1514027114',
|
||||
'_config' => 'default', // 注意这一行
|
||||
];
|
||||
|
||||
$result = Pay::alipay()->find($order);
|
||||
```
|
||||
|
||||
## 关于微信公钥证书
|
||||
|
||||
微信支付公钥证书主要用于微信支付响应消息时的验签动作。
|
||||
|
||||
例如,当请求给微信支付服务器时,微信支付接收到请求会作出响应,系统在接收到响应后,需要验证这个响应是不是微信支付服务器官方发出的,以防止欺诈,这个验证的动作,就会使用到微信公钥证书。
|
||||
|
||||
关于微信公钥证书的详细介绍可以参考[微信官方文档](https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_1.shtml)
|
||||
|
||||
::: tip 常驻进程模式
|
||||
如果您在 Swoole 等常驻进程下使用 Pay,那您无需再配置 `wechat_public_cert_path` 参数,Pay 会自动帮你搞定一切:从微信服务器获取最新证书并自动缓存配置。
|
||||
:::
|
||||
|
||||
::: warning PHP-FPM 模式
|
||||
如果您在 php-fpm 进程下使用 Pay,强烈建议您手动配置 `wechat_public_cert_path` 参数。当然,您也可以不用配置,不过,您每次支付将从微信服务器获取最新的证书并验证,这将有性能上的损耗。
|
||||
:::
|
104
web/docs/v3/quick-start/install.md
Normal file
104
web/docs/v3/quick-start/install.md
Normal file
@ -0,0 +1,104 @@
|
||||
# 安装
|
||||
|
||||
## 运行环境
|
||||
|
||||
- PHP 7.3+ (v3.1.0 开始需 7.4+)
|
||||
- composer
|
||||
|
||||
## 安装总结
|
||||
|
||||
对于绝大多数用户而言,您只需要记住以下两个原则即可:
|
||||
|
||||
### hyperf/laravel 用户
|
||||
|
||||
```shell
|
||||
composer require yansongda/pay:~3.1.0 -vvv
|
||||
composer require guzzlehttp/guzzle:^7.0 # 默认情况下,此包框架已自带,无需额外安装
|
||||
```
|
||||
|
||||
### 其它框架/无框架 用户
|
||||
|
||||
```shell
|
||||
composer require yansongda/pay:~3.1.0 -vvv
|
||||
composer require guzzlehttp/guzzle:^7.0
|
||||
composer require php-di/php-di -W
|
||||
```
|
||||
|
||||
## 详细安装介绍
|
||||
|
||||
```shell
|
||||
composer require yansongda/pay:~3.1.0 -vvv
|
||||
```
|
||||
|
||||
由于 `yansongda/pay` 支持 PSR2、PSR3、PSR4、PSR7、PSR11、PSR14、PSR18 等各项标准,因此这里额外介绍下 PSR-11、PSR-18 的安装与使用。
|
||||
|
||||
### 关于 Container(PSR-11)
|
||||
|
||||
::: tip
|
||||
如果您看不懂这部分内容:
|
||||
|
||||
1、hyperf/laravel 用户直接忽略此部分内容;
|
||||
|
||||
2、其它用户(包括 thinkphp 用户)在安装完 `Pay` 后直接无脑 `composer require php-di/php-di` 即可
|
||||
:::
|
||||
|
||||
#### hyperf/laravel 用户
|
||||
|
||||
`Pay` 会自动复用框架内的 Container, 无需您任何额外操作。
|
||||
|
||||
#### 其它框架/无框架 用户
|
||||
|
||||
如果您不想操心那么多,SDK 自带了一套开箱即用的 Container,但仍然需要手动安装 php-di:
|
||||
|
||||
```shell
|
||||
composer require php-di/php-di
|
||||
```
|
||||
|
||||
|
||||
如果您所使用的框架内有符合 `PSR-11` 的 `Container`,您需要在初始化 **之前**(即,调用 `Pay::config()` 方法之前)执行以下代码即可复用现有的 `Container`:
|
||||
|
||||
```php
|
||||
use Yansongda\Pay\Pay;
|
||||
use Yansongda\Pay\Contract\HttpClientInterface;
|
||||
|
||||
// $container = 您现有的 container
|
||||
|
||||
// 方法一:
|
||||
Pay::setContainer($container);
|
||||
Pay::config($config);
|
||||
|
||||
// 方法二:
|
||||
Pay::config($config, function () use ($container) {
|
||||
return $container;
|
||||
});
|
||||
```
|
||||
|
||||
### 关于 Guzzlehttp (PSR-18)
|
||||
|
||||
::: tip
|
||||
如果您看不懂这部分内容:
|
||||
|
||||
在安装完 `Pay` 后直接无脑 `composer require guzzlehttp/guzzle:^7.0` 即可
|
||||
:::
|
||||
|
||||
#### 使用默认的 Client
|
||||
|
||||
SDK 自带了一套开箱即用的 HTTP 客户端,但仍然需要手动安装 Guzzlehttp:
|
||||
|
||||
```shell
|
||||
composer require guzzlehttp/guzzle:^7.0
|
||||
```
|
||||
|
||||
#### 现有框架有 PSR-18 的 Client
|
||||
|
||||
如果您所使用的框架内有符合 `PSR-18` 的 `HTTP Client`,您需要在初始化 **之后**(即,调用 `Pay::config()` 方法后)执行以下代码即可复用现有的 `Client`:
|
||||
|
||||
```php
|
||||
use Yansongda\Pay\Pay;
|
||||
use Yansongda\Pay\Contract\HttpClientInterface;
|
||||
|
||||
// $client = 您现有的 http client
|
||||
|
||||
Pay::config($config);
|
||||
Pay::set(HttpClientInterface::class, $client);
|
||||
```
|
62
web/docs/v3/quick-start/return-format.md
Normal file
62
web/docs/v3/quick-start/return-format.md
Normal file
@ -0,0 +1,62 @@
|
||||
# 返回格式
|
||||
|
||||
通过 `yansongda/pay` 调用任何方法最终只可能返回三种格式
|
||||
|
||||
- `\Psr\Http\Message\MessageInterface`
|
||||
- `\Yansongda\Supports\Collection`
|
||||
- `array`
|
||||
|
||||
其中 `\Psr\Http\Message\MessageInterface` 最终 实例/接口 为
|
||||
|
||||
- `\GuzzleHttp\Psr7\Response`
|
||||
|
||||
:::tip
|
||||
至于最终返回的到底是什么类型,和不同的方法而定
|
||||
:::
|
||||
|
||||
## MessageInterface
|
||||
|
||||
### `\GuzzleHttp\Psr7\Response`
|
||||
|
||||
支付宝中
|
||||
|
||||
- `app()` APP 支付
|
||||
- `web()` web 支付
|
||||
- `wap()` wap 支付
|
||||
- `success()` 响应回调
|
||||
|
||||
微信中
|
||||
|
||||
- `success()` 响应回调
|
||||
|
||||
均返回此类,在支持 PSR7 的框架中均可直接返回响应请求
|
||||
|
||||
:::tip Laravel 框架
|
||||
laravel 框架中,自行安装 `symfony/psr-http-message-bridge` 即可支持返回相关响应数据
|
||||
:::
|
||||
|
||||
:::warning ThinkPHP 框架
|
||||
ThinkPHP 框架在 [https://github.com/top-think/framework/pull/2614](https://github.com/top-think/framework/pull/2614) 之后才支持 PSR7 规范,因此,之前的版本需要参考此 PR 自行解包进行处理返回数据
|
||||
:::
|
||||
|
||||
## Collection
|
||||
|
||||
默认情况下,支付宝、微信所有 API 调用场景下绝大多数方法最终都返回的是 `Collection` 实例。
|
||||
例如常用的「退款」「转账」「小程序支付」等。
|
||||
|
||||
`Collection` 类提供了常用的快捷方法,具体 API 可参考源代码 [yansongda/supports](https://github.com/yansongda/supports)
|
||||
|
||||
## array
|
||||
|
||||
API 调用场景下的返回类型,`array` 和 `Collection` 是可以自定义的,默认情况下均返回 `Collection` 实例。
|
||||
|
||||
如果想返回 array 类型的数据,只需要
|
||||
|
||||
```php
|
||||
use Yansongda\Pay\Contract\ParserInterface;
|
||||
use Yansongda\Pay\Parser\ArrayParser;
|
||||
|
||||
Pay::set(ParserInterface::class, ArrayParser::class);
|
||||
```
|
||||
|
||||
是不是很简单方便?
|
132
web/docs/v3/quick-start/wechat.md
Normal file
132
web/docs/v3/quick-start/wechat.md
Normal file
@ -0,0 +1,132 @@
|
||||
# 微信快速入门
|
||||
|
||||
在初始化完毕后,就可以直接方便的享受 `yansongda/pay` 带来的便利了。
|
||||
|
||||
:::tip
|
||||
`yansongda/pay` v3.x 版本直接支持 微信支付v3 版本,关于微信支付 v2/v3 版本区别,请参考[官方文档](https://pay.weixin.qq.com/wiki/doc/apiv3/index.shtml)
|
||||
:::
|
||||
|
||||
## 公众号支付
|
||||
|
||||
```php
|
||||
Pay::config($config);
|
||||
|
||||
$order = [
|
||||
'out_trade_no' => time().'',
|
||||
'description' => 'subject-测试',
|
||||
'amount' => [
|
||||
'total' => 1,
|
||||
],
|
||||
'payer' => [
|
||||
'openid' => 'onkVf1FjWS5SBxxxxxxxx',
|
||||
],
|
||||
];
|
||||
|
||||
$result = Pay::wechat()->mp($order);
|
||||
// 返回 Collection 实例。包含了调用 JSAPI 的所有参数,如appId,timeStamp,nonceStr,package,signType,paySign 等;
|
||||
// 可直接通过 $result->appId, $result->timeStamp 获取相关值。
|
||||
// 后续调用不在本文档讨论范围内,请自行参考官方文档。
|
||||
```
|
||||
|
||||
## 手机网站支付
|
||||
|
||||
```php
|
||||
Pay::config($config);
|
||||
|
||||
$order = [
|
||||
'out_trade_no' => time().'',
|
||||
'description' => 'subject-测试',
|
||||
'amount' => [
|
||||
'total' => 1,
|
||||
],
|
||||
'scene_info' => [
|
||||
'payer_client_ip' => '1.2.4.8',
|
||||
'h5_info' => [
|
||||
'type' => 'Wap',
|
||||
]
|
||||
],
|
||||
];
|
||||
|
||||
return Pay::wechat()->wap($order);
|
||||
```
|
||||
|
||||
## APP 支付
|
||||
|
||||
```php
|
||||
Pay::config($config);
|
||||
|
||||
$order = [
|
||||
'out_trade_no' => time().'',
|
||||
'description' => 'subject-测试',
|
||||
'amount' => [
|
||||
'total' => 1,
|
||||
],
|
||||
];
|
||||
|
||||
// 将返回 json 格式,供后续 APP 调用,调用方式不在本文档讨论范围内,请参考官方文档。
|
||||
return Pay::wechat()->app($order);
|
||||
```
|
||||
|
||||
## 扫码支付
|
||||
|
||||
```php
|
||||
Pay::config($config);
|
||||
|
||||
$order = [
|
||||
'out_trade_no' => time().'',
|
||||
'description' => 'subject-测试',
|
||||
'amount' => [
|
||||
'total' => 1,
|
||||
],
|
||||
];
|
||||
|
||||
$result = Pay::wechat()->scan($order);
|
||||
// 二维码内容: $qr = $result->code_url;
|
||||
```
|
||||
|
||||
## 小程序
|
||||
|
||||
```php
|
||||
Pay::config($config);
|
||||
|
||||
$order = [
|
||||
'out_trade_no' => time().'',
|
||||
'description' => 'subject-测试',
|
||||
'amount' => [
|
||||
'total' => 1,
|
||||
'currency' => 'CNY',
|
||||
],
|
||||
'payer' => [
|
||||
'openid' => '123fsdf234',
|
||||
]
|
||||
];
|
||||
|
||||
$result = Pay::wechat()->mini($order);
|
||||
// 返回 Collection 实例。包含了调用 JSAPI 的所有参数,如appId,timeStamp,nonceStr,package,signType,paySign 等;
|
||||
// 可直接通过 $result->appId, $result->timeStamp 获取相关值。
|
||||
// 后续调用不在本文档讨论范围内,请自行参考官方文档。
|
||||
```
|
||||
|
||||
## 刷卡支付
|
||||
|
||||
:::warning
|
||||
微信支付 v3 版 api 并不支持刷卡支付,后续将接入微信支付 v2 版 API,敬请期待。如果确实有此需求,可以使用 [Pay 的 v2 版](/docs/v2/wechat/)
|
||||
:::
|
||||
|
||||
## 账户转账
|
||||
|
||||
:::warning
|
||||
微信支付 v3 版 api 并不支持转账,后续将接入微信支付 v2 版 API,敬请期待。如果确实有此需求,可以使用 [Pay 的 v2 版](/docs/v2/wechat/)
|
||||
:::
|
||||
|
||||
## 普通红包
|
||||
|
||||
:::warning
|
||||
微信支付 v3 版 api 并不支红包,后续将接入微信支付 v2 版 API,敬请期待。如果确实有此需求,可以使用 [Pay 的 v2 版](/docs/v2/wechat/)
|
||||
:::
|
||||
|
||||
## 裂变红包
|
||||
|
||||
:::warning
|
||||
微信支付 v3 版 api 并不支持红包,后续将接入微信支付 v2 版 API,敬请期待。如果确实有此需求,可以使用 [Pay 的 v2 版](/docs/v2/wechat/)
|
||||
:::
|
79
web/docs/v3/sidebar.js
Normal file
79
web/docs/v3/sidebar.js
Normal file
@ -0,0 +1,79 @@
|
||||
exports = module.exports = [
|
||||
{
|
||||
text: '概述',
|
||||
collapsible: true,
|
||||
items: [
|
||||
{ text: '线上交流', link: '/docs/v3/overview/communication'},
|
||||
{ text: '捐赠', link: '/docs/v3/overview/donate'},
|
||||
{ text: '参与开发', link: '/docs/v3/overview/contribute'},
|
||||
{ text: '更新记录', link: '/docs/v3/overview/versions'},
|
||||
{ text: '商业与企业服务', link: '/docs/v3/overview/business'}
|
||||
]
|
||||
},
|
||||
{
|
||||
text: '快速入门',
|
||||
collapsible: true,
|
||||
items: [
|
||||
{ text: '安装', link: '/docs/v3/quick-start/install'},
|
||||
{ text: '初始化', link: '/docs/v3/quick-start/init'},
|
||||
{ text: '支付宝', link: '/docs/v3/quick-start/alipay'},
|
||||
{ text: '微信', link: '/docs/v3/quick-start/wechat'},
|
||||
{ text: '返回格式', link: '/docs/v3/quick-start/return-format'}
|
||||
]
|
||||
},
|
||||
{
|
||||
text: '支付宝',
|
||||
collapsible: true,
|
||||
items: [
|
||||
{ text: '支付', link: '/docs/v3/alipay/pay'},
|
||||
{ text: '查询', link: '/docs/v3/alipay/find'},
|
||||
{ text: '退款', link: '/docs/v3/alipay/refund'},
|
||||
{ text: '关闭', link: '/docs/v3/alipay/close'},
|
||||
{ text: '取消', link: '/docs/v3/alipay/cancel'},
|
||||
{ text: '接收回调', link: '/docs/v3/alipay/callback'},
|
||||
{ text: '确认回调', link: '/docs/v3/alipay/response'},
|
||||
{ text: '更多便捷插件', link: '/docs/v3/alipay/more'},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: '微信',
|
||||
collapsible: true,
|
||||
items: [
|
||||
{ text: '支付', link: '/docs/v3/wechat/pay'},
|
||||
{ text: '查询', link: '/docs/v3/wechat/find'},
|
||||
{ text: '退款', link: '/docs/v3/wechat/refund'},
|
||||
{ text: '关闭', link: '/docs/v3/wechat/close'},
|
||||
{ text: '取消', link: '/docs/v3/wechat/cancel'},
|
||||
{ text: '接收回调', link: '/docs/v3/wechat/callback'},
|
||||
{ text: '确认回调', link: '/docs/v3/wechat/response'},
|
||||
{ text: '更多便捷插件', link: '/docs/v3/wechat/more'}
|
||||
]
|
||||
},
|
||||
{
|
||||
text: '核心架构',
|
||||
collapsible: true,
|
||||
items: [
|
||||
{ text: '🚀 Rocket', link: '/docs/v3/kernel/rocket'},
|
||||
{ text: '🧪 Pipeline', link: '/docs/v3/kernel/pipeline'},
|
||||
{ text: '🔌 Plugin', link: '/docs/v3/kernel/plugin'},
|
||||
{ text: '💤 Shortcut', link: '/docs/v3/kernel/shortcut'}
|
||||
]
|
||||
},
|
||||
{
|
||||
text: '其它',
|
||||
collapsible: true,
|
||||
items: [
|
||||
{ text: '事件', link: '/docs/v3/others/event'},
|
||||
{ text: '日志', link: '/docs/v3/others/logger'},
|
||||
{ text: 'FAQ', link: '/docs/v3/others/faq'},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: '升级指南',
|
||||
collapsible: true,
|
||||
items: [
|
||||
{ text: 'v3.1 升级指南', link: '/docs/v3/upgrade/v3.1'},
|
||||
{ text: 'v3.0 升级指南', link: '/docs/v3/upgrade/v3.0'}
|
||||
]
|
||||
}
|
||||
]
|
28
web/docs/v3/upgrade/v3.0.md
Normal file
28
web/docs/v3/upgrade/v3.0.md
Normal file
@ -0,0 +1,28 @@
|
||||
# v3.0 升级指南
|
||||
|
||||
## 配置文件调整
|
||||
|
||||
v3.0 版本由于支持了多租户,所以配置文件有所调整。
|
||||
|
||||
请参考 [初始化](/docs/v3/quick-start/init.md) 调整您的配置文件。
|
||||
|
||||
## 初始化方式调整(非必须,但推荐)
|
||||
|
||||
此项非必须,但是强烈推荐您更改调整
|
||||
|
||||
同样参考 [初始化](/docs/v3/quick-start/init.md) 的 **方式一** 调整您的配置初始化。
|
||||
|
||||
## 更改版本号
|
||||
|
||||
将 composer.json 的 yansongda/pay 版本号更改为 `~3.0.0`,随后 `composer update` 即可。
|
||||
|
||||
## break-change
|
||||
|
||||
见 [发布说明](/docs/v3/overview/versions.md)
|
||||
|
||||
## 微信API问题
|
||||
|
||||
v3.0 版本开始,Pay 使用微信 v3.0 API,因此, v3.0 API 中不支持的操作,Pay v3.0 也不会支持,可以参考微信支付官方文档或 [https://github.com/yansongda/pay/issues/473](https://github.com/yansongda/pay/issues/473)
|
||||
|
||||
如果你强依赖微信支付中 v2 版本的API,建议保持 Pay v2 版本不做升级操作
|
||||
|
25
web/docs/v3/upgrade/v3.1.md
Normal file
25
web/docs/v3/upgrade/v3.1.md
Normal file
@ -0,0 +1,25 @@
|
||||
# v3.1 升级指南
|
||||
|
||||
## PHP 最低版本
|
||||
|
||||
v3.1 将 PHP 最低版本由 7.3 提高到了 7.4
|
||||
|
||||
## 更改版本号
|
||||
|
||||
将 composer.json 的 yansongda/pay 版本号更改为 `~3.1.0`,随后 `composer update` 即可。
|
||||
|
||||
## PSR-11 和 PSR-18
|
||||
|
||||
### hyperf/laravel 用户
|
||||
|
||||
无需任何操作
|
||||
|
||||
### 其它框架/无框架 用户
|
||||
|
||||
如果您使用其它框架 或 未使用任何框架,需额外执行以下命令:
|
||||
|
||||
```shell
|
||||
composer require php-di/php-di
|
||||
```
|
||||
|
||||
关于此部分的说明,可以额外查阅 [安装](/docs/v3/quick-start/install.md) 部分
|
40
web/docs/v3/wechat/callback.md
Normal file
40
web/docs/v3/wechat/callback.md
Normal file
@ -0,0 +1,40 @@
|
||||
# 接收回调
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:--------:|:------------------------------:|:----------:|
|
||||
| callback | 无/array/ServerRequestInterface | Collection |
|
||||
|
||||
## 例子
|
||||
|
||||
```php
|
||||
Pay::config($this->config);
|
||||
|
||||
// 是的,你没有看错,就是这么简单!
|
||||
$result = Pay::wechat()->callback();
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
### 第一个参数
|
||||
|
||||
#### `null`
|
||||
|
||||
如果您没有传参,则 `yansongda/pay` 会自动识别微信的回调请求并进行验签解密处理,通过 `Collection` 实例返回微信的处理参数
|
||||
|
||||
:::warning
|
||||
建议仅在 php-fpm 下使用,swoole 方式请使用 `ServerRequestInterface` 参数传递方式
|
||||
:::
|
||||
|
||||
#### `ServerRequestInterface`
|
||||
|
||||
推荐在 swoole 环境下传递此参数,传递此参数后, yansongda/pay 会自动进行后续处理
|
||||
|
||||
#### `array`
|
||||
|
||||
也可以自行解析请求参数,传递一个 array 会自动进行后续处理
|
||||
|
||||
### 第二个参数
|
||||
|
||||
第二个参数主要是传递相关自定义变量的,类似于 `web()` 中的 `_config` / `_method` 等参数。
|
||||
|
||||
例如,如果你想在回调的时候使用非默认配置,则可以 `Pay::wechat()->callback(null, ['_config' => 'yansongda'])` 切换为 `yansongda` 这个租户的配置信息。
|
9
web/docs/v3/wechat/cancel.md
Normal file
9
web/docs/v3/wechat/cancel.md
Normal file
@ -0,0 +1,9 @@
|
||||
# 取消订单
|
||||
|
||||
:::danger
|
||||
微信官方无此 API,请调用 close 关闭订单。
|
||||
:::
|
||||
|
||||
## 异常
|
||||
|
||||
Yansongda\Pay\Exceptions\InvalidParamsException
|
24
web/docs/v3/wechat/close.md
Normal file
24
web/docs/v3/wechat/close.md
Normal file
@ -0,0 +1,24 @@
|
||||
# 关闭订单
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:-----:|:-------------------:|:----------:|
|
||||
| close | string/array $order | Collection |
|
||||
|
||||
## 例子
|
||||
|
||||
```php
|
||||
Pay::config($config);
|
||||
|
||||
$order = [
|
||||
'out_trade_no' => '1514027114',
|
||||
];
|
||||
|
||||
// $order = '1514027114';
|
||||
|
||||
$result = Pay::wechat()->close($order);
|
||||
```
|
||||
|
||||
|
||||
## 订单配置参数
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_3.shtml),查看「请求参数」一栏。
|
61
web/docs/v3/wechat/find.md
Normal file
61
web/docs/v3/wechat/find.md
Normal file
@ -0,0 +1,61 @@
|
||||
# 查询订单
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:----:|:-------------------:|:----------:|
|
||||
| find | string/array $order | Collection |
|
||||
|
||||
## 查询支付订单
|
||||
|
||||
```php
|
||||
Pay::config($config);
|
||||
|
||||
$order = [
|
||||
'transaction_id' => '1217752501201407033233368018',
|
||||
];
|
||||
// $order = '1217752501201407033233368018';
|
||||
|
||||
$result = Pay::wechat()->find($order);
|
||||
```
|
||||
|
||||
## 查询退款订单
|
||||
|
||||
```php
|
||||
Pay::config($config);
|
||||
|
||||
$order = [
|
||||
'transaction_id' => '1217752501201407033233368018',
|
||||
'_type' => 'refund'
|
||||
];
|
||||
|
||||
$result = Pay::wechat()->find($order);
|
||||
```
|
||||
|
||||
## 查询合单支付订单
|
||||
|
||||
```php
|
||||
Pay::config($config);
|
||||
|
||||
$order = [
|
||||
'combine_out_trade_no' => '1217752501201407033233368018',
|
||||
];
|
||||
//$order = [
|
||||
// 'transaction_id' => '1217752501201407033233368018',
|
||||
// '_type' => 'combine',
|
||||
//];
|
||||
|
||||
$result = Pay::wechat()->find($order);
|
||||
```
|
||||
|
||||
## 订单配置参数
|
||||
|
||||
### 查询支付订单
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_2.shtml),查看「请求参数」一栏。
|
||||
|
||||
### 查询退款订单
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_10.shtml),查看「请求参数」一栏。
|
||||
|
||||
### 查询合单支付订单
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter5_1_11.shtml),查看「请求参数」一栏。
|
244
web/docs/v3/wechat/more.md
Normal file
244
web/docs/v3/wechat/more.md
Normal file
@ -0,0 +1,244 @@
|
||||
# 更多方便的插件
|
||||
|
||||
得益于 yansongda/pay 的基础架构和良好的插件机制,
|
||||
您可以自有的使用任何内置插件和自定义插件调用支付宝的任何 API。
|
||||
|
||||
诸如签名、API调用、解密、验签、解包等基础插件已经内置在 Pay 中,
|
||||
您可以使用 `Pay::wechat()->mergeCommonPlugins(array $plugins)` 来获取调用 API 所必须的常用插件
|
||||
|
||||
首先,查找你想使用的插件,然后
|
||||
|
||||
```php
|
||||
Pay::config($config);
|
||||
|
||||
$params = [
|
||||
'transaction_id' => '1217752501201407033233368018',
|
||||
];
|
||||
|
||||
$allPlugins = Pay::wechat()->mergeCommonPlugins([QueryPlugin::class]);
|
||||
|
||||
$result = Pay::wechat()->pay($allPlugins, $params);
|
||||
```
|
||||
|
||||
关于插件的详细介绍,如果您感兴趣,可以参考 [这篇说明文档](/docs/v3/kernel/plugin.md)
|
||||
|
||||
## 资金应用-分账
|
||||
|
||||
### 添加分账接收方
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Fund\Profitsharing\AddReceiverPlugin`
|
||||
|
||||
### 请求分账
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Fund\Profitsharing\CreatePlugin`
|
||||
|
||||
### 删除分账接收方
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Fund\Profitsharing\DeleteReceiverPlugin`
|
||||
|
||||
### 查询剩余待分金额
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Fund\Profitsharing\QueryAmountsPlugin`
|
||||
|
||||
### 查询分账结果
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Fund\Profitsharing\QueryPlugin`
|
||||
|
||||
### 查询分账回退结果
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Fund\Profitsharing\QueryReturnPlugin`
|
||||
|
||||
### 请求分账回退
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Fund\Profitsharing\ReturnPlugin`
|
||||
|
||||
### 解冻剩余资金
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Fund\Profitsharing\UnfreezePlugin`
|
||||
|
||||
### 查询最大分账比例
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Fund\Profitsharing\QueryMerchantConfigsPlugin`
|
||||
|
||||
### 下载账单
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Fund\Profitsharing\DownloadBillPlugin`
|
||||
|
||||
## 资金应用-转账到零钱
|
||||
|
||||
### 发起批量转账
|
||||
|
||||
- `\Yansongda\Pay\Plugin\Wechat\Fund\Transfer\CreatePlugin`
|
||||
|
||||
### 微信批次单号查询批次单
|
||||
|
||||
- `\Yansongda\Pay\Plugin\Wechat\Fund\Transfer\QueryBatchIdPlugin`
|
||||
|
||||
### 微信明细单号查询明细单
|
||||
|
||||
- `\Yansongda\Pay\Plugin\Wechat\Fund\Transfer\QueryBatchDetailIdPlugin`
|
||||
|
||||
### 商家批次单号查询批次单
|
||||
|
||||
- `\Yansongda\Pay\Plugin\Wechat\Fund\Transfer\QueryOutBatchNoPlugin`
|
||||
|
||||
### 商家明细单号查询明细单
|
||||
|
||||
- `\Yansongda\Pay\Plugin\Wechat\Fund\Transfer\QueryOutBatchDetailNoPlugin`
|
||||
|
||||
### 转账电子回单申请受理
|
||||
|
||||
- `\Yansongda\Pay\Plugin\Wechat\Fund\Transfer\CreateBillReceiptPlugin`
|
||||
|
||||
### 查询转账电子回单
|
||||
|
||||
- `\Yansongda\Pay\Plugin\Wechat\Fund\Transfer\QueryBillReceiptPlugin`
|
||||
|
||||
### 转账明细电子回单受理
|
||||
|
||||
- `\Yansongda\Pay\Plugin\Wechat\Fund\Transfer\CreateDetailReceiptPlugin`
|
||||
|
||||
### 查询转账明细电子回单受理结果
|
||||
|
||||
- `\Yansongda\Pay\Plugin\Wechat\Fund\Transfer\QueryBillReceiptPlugin`
|
||||
|
||||
### 下载电子回单
|
||||
|
||||
- `\Yansongda\Pay\Plugin\Wechat\Fund\Transfer\DownloadReceiptPlugin`
|
||||
|
||||
### 查询转账明细电子回单受理结果
|
||||
|
||||
- `\Yansongda\Pay\Plugin\Wechat\Fund\Transfer\QueryDetailReceiptPlugin`
|
||||
|
||||
### 查询账户实时余额
|
||||
|
||||
- `\Yansongda\Pay\Plugin\Wechat\Fund\Balance\QueryPlugin`
|
||||
|
||||
### 查询账户日终余额
|
||||
|
||||
- `\Yansongda\Pay\Plugin\Wechat\Fund\Balance\QueryDayEndPlugin`
|
||||
|
||||
## 营销工具-代金券
|
||||
|
||||
### 创建代金券批次
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Marketing\Coupon\CreatePlugin`
|
||||
|
||||
### 暂停代金券批次
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Marketing\Coupon\PausePlugin`
|
||||
|
||||
### 根据商户号查用户的券
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Marketing\Coupon\QueryCouponDetailPlugin`
|
||||
|
||||
### 查询批次详情
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Marketing\Coupon\QueryStockDetailPlugin`
|
||||
|
||||
### 查询代金券可用单品
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Marketing\Coupon\QueryStockItemsPlugin`
|
||||
|
||||
### 查询代金券可用商户
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Marketing\Coupon\QueryStockMerchantsPlugin`
|
||||
|
||||
### 下载批次退款明细
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Marketing\Coupon\QueryStockRefundFlowPlugin`
|
||||
|
||||
### 条件查询批次列表
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Marketing\Coupon\QueryStocksPlugin`
|
||||
|
||||
### 下载批次核销明细
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Marketing\Coupon\QueryStockUseFlowPlugin`
|
||||
|
||||
### 根据商户号查用户的券
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Marketing\Coupon\QueryUserCouponsPlugin`
|
||||
|
||||
### 重启代金券批次
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Marketing\Coupon\RestartPlugin`
|
||||
|
||||
### 发放代金券批次
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Marketing\Coupon\SendPlugin`
|
||||
|
||||
### 设置消息通知地址API
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Marketing\Coupon\SetCallbackPlugin`
|
||||
|
||||
### 激活代金券批次
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Marketing\Coupon\StartPlugin`
|
||||
|
||||
## 风险合规-消费者投诉
|
||||
|
||||
### 查询投诉单列表
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Risk\Complaints\QueryComplaintsPlugin`
|
||||
|
||||
### 查询投诉单详情
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Risk\Complaints\QueryComplaintDetailPlugin`
|
||||
|
||||
### 查询投诉协商历史
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Risk\Complaints\QueryComplaintNegotiationPlugin`
|
||||
|
||||
### 创建投诉通知回调地址
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Risk\Complaints\SetCallbackPlugin`
|
||||
|
||||
### 查询投诉通知回调地址
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Risk\Complaints\QueryCallbackPlugin`
|
||||
|
||||
### 更新投诉通知回调地址
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Risk\Complaints\UpdateCallbackPlugin`
|
||||
|
||||
### 删除投诉通知回调地址
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Risk\Complaints\DeleteCallbackPlugin`
|
||||
|
||||
### 回复用户
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Risk\Complaints\ResponseComplaintPlugin`
|
||||
|
||||
### 反馈处理完成
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Risk\Complaints\CompleteComplaintPlugin`
|
||||
|
||||
### 更新退款进度
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Risk\Complaints\UpdateRefundPlugin`
|
||||
|
||||
### 图片下载
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Risk\Complaints\DownloadMediaPlugin`
|
||||
|
||||
|
||||
## 服务商-行业方案
|
||||
|
||||
### 电商收付通(退款)
|
||||
|
||||
#### 申请退款
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Ecommerce\Refund\ApplyPlugin`
|
||||
|
||||
#### 查询退款
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Ecommerce\Refund\FindPlugin`
|
||||
|
||||
#### 查询垫付回补结果
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Ecommerce\Refund\FindReturnAdvancePlugin`
|
||||
|
||||
#### 垫付退款回补
|
||||
|
||||
- `Yansongda\Pay\Plugin\Wechat\Ecommerce\Refund\ReturnAdvancePlugin`
|
249
web/docs/v3/wechat/pay.md
Normal file
249
web/docs/v3/wechat/pay.md
Normal file
@ -0,0 +1,249 @@
|
||||
# 支付
|
||||
|
||||
微信支付目前直接内置支持 7 种快捷方式支付方法,对应的支付 method 如下:
|
||||
|
||||
| method | 说明 | 参数 | 返回值 |
|
||||
|:------:|:------:|:------------:|:----------:|
|
||||
| mp | 公众号支付 | array $order | Collection |
|
||||
| wap | 手机网站支付 | array $order | Collection |
|
||||
| app | APP 支付 | array $order | Collection |
|
||||
| scan | 扫码支付 | array $order | Collection |
|
||||
| mini | 小程序支付 | array $order | Collection |
|
||||
|
||||
## 公众号支付
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
Pay::config($config);
|
||||
|
||||
$order = [
|
||||
'out_trade_no' => time().'',
|
||||
'description' => 'subject-测试',
|
||||
'amount' => [
|
||||
'total' => 1,
|
||||
],
|
||||
'payer' => [
|
||||
'openid' => 'onkVf1FjWS5SBxxxxxxxx',
|
||||
],
|
||||
];
|
||||
|
||||
$result = Pay::wechat()->mp($order);
|
||||
// 返回 Collection 实例。包含了调用 JSAPI 的所有参数,如appId,timeStamp,nonceStr,package,signType,paySign 等;
|
||||
// 可直接通过 $result->appId, $result->timeStamp 获取相关值。
|
||||
// 后续调用不在本文档讨论范围内,请自行参考官方文档。
|
||||
```
|
||||
|
||||
:::warning 调起微信支付 timeStamp 参数问题
|
||||
[微信支付](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_4.shtml) 和 [微信](https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#58) 两个文档所需要的参数不一致,微信支付中是 timeStamp, 微信调起的参数是 timestamp,需要自行处理。
|
||||
:::
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`appid`,`sign` 等参数,大家只需传入订单类主观参数即可。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_1.shtml),查看「请求参数」一栏。
|
||||
|
||||
|
||||
## 手机网站支付
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
Pay::config($config);
|
||||
|
||||
$order = [
|
||||
'out_trade_no' => time().'',
|
||||
'description' => 'subject-测试',
|
||||
'amount' => [
|
||||
'total' => 1,
|
||||
],
|
||||
'scene_info' => [
|
||||
'payer_client_ip' => '1.2.4.8',
|
||||
'h5_info' => [
|
||||
'type' => 'Wap',
|
||||
]
|
||||
],
|
||||
];
|
||||
|
||||
return Pay::wechat()->wap($order);
|
||||
// $result->h5_url;
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`trade_type`,`appid`,`sign` 等参数,大家只需传入订单类主观参数即可。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_3_1.shtml),查看「请求参数」一栏。
|
||||
|
||||
### 调用支付
|
||||
|
||||
后续调起支付不再本文档讨论范围内,请参考[官方文档](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_3_4.shtml)
|
||||
|
||||
### 其它
|
||||
|
||||
#### 使用小程序的 app_id 关联 h5 支付
|
||||
|
||||
默认情况下,H5 支付所使用的 appid 是微信公众号的 appid,即配置文件中的 mp_app_id 参数,如果想使用关联的小程序的 appid,则只需要在调用参数中增加 `['_type' => 'mini']` 即可,例如:
|
||||
|
||||
```php
|
||||
$order = [
|
||||
'_type' => 'mini', // 注意这一行
|
||||
'out_trade_no' => time().'',
|
||||
'description' => 'subject-测试',
|
||||
'amount' => [
|
||||
'total' => 1,
|
||||
],
|
||||
'scene_info' => [
|
||||
'payer_client_ip' => '1.2.4.8',
|
||||
'h5_info' => [
|
||||
'type' => 'Wap',
|
||||
]
|
||||
],
|
||||
];
|
||||
```
|
||||
|
||||
## APP 支付
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
Pay::config($config);
|
||||
|
||||
$order = [
|
||||
'out_trade_no' => time().'',
|
||||
'description' => 'subject-测试',
|
||||
'amount' => [
|
||||
'total' => 1,
|
||||
],
|
||||
];
|
||||
|
||||
// 将返回 Collection 实例,供后续 APP 调用,调用方式不在本文档讨论范围内,请参考官方文档。
|
||||
return Pay::wechat()->app($order);
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`trade_type`,`appid`,`sign` 等参数,大家只需传入订单类主观参数即可。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_1.shtml),查看「请求参数」一栏。
|
||||
|
||||
### 调用支付
|
||||
|
||||
后续调起支付不再本文档讨论范围内,请参考[官方文档](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_4.shtml)
|
||||
|
||||
## 扫码支付
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
Pay::config($config);
|
||||
|
||||
$order = [
|
||||
'out_trade_no' => time().'',
|
||||
'description' => 'subject-测试',
|
||||
'amount' => [
|
||||
'total' => 1,
|
||||
],
|
||||
];
|
||||
|
||||
$result = Pay::wechat()->scan($order);
|
||||
// 二维码内容: $qr = $result->code_url;
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`trade_type`,`appid`,`sign` 等参数,大家只需传入订单类主观参数即可。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_4_1.shtml),查看「请求参数」一栏。
|
||||
|
||||
### 调用支付
|
||||
|
||||
后续调起支付不再本文档讨论范围内,请参考[官方文档](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_4_4.shtml)
|
||||
|
||||
## 小程序
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
Pay::config($config);
|
||||
|
||||
$order = [
|
||||
'out_trade_no' => time().'',
|
||||
'description' => 'subject-测试',
|
||||
'amount' => [
|
||||
'total' => 1,
|
||||
'currency' => 'CNY',
|
||||
],
|
||||
'payer' => [
|
||||
'openid' => '123fsdf234',
|
||||
]
|
||||
];
|
||||
|
||||
$result = Pay::wechat()->mini($order);
|
||||
// 返回 Collection 实例。包含了调用 JSAPI 的所有参数,如appId,timeStamp,nonceStr,package,signType,paySign 等;
|
||||
// 可直接通过 $result->appId, $result->timeStamp 获取相关值。
|
||||
// 后续调用不在本文档讨论范围内,请自行参考官方文档。
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`trade_type`,`appid`,`sign` 等参数,大家只需传入订单类主观参数即可。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_1.shtml),查看「请求参数」一栏。
|
||||
|
||||
### 调用支付
|
||||
|
||||
后续调起支付不再本文档讨论范围内,请参考[官方文档](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_4.shtml)
|
||||
|
||||
## 账户转账
|
||||
|
||||
### 例子
|
||||
|
||||
```php
|
||||
Pay::config($config);
|
||||
|
||||
$order = [
|
||||
'out_batch_no' => time().'',
|
||||
'batch_name' => 'subject-测试',
|
||||
'batch_remark' => 'test',
|
||||
'total_amount' => 1,
|
||||
'total_num' => 1,
|
||||
'transfer_detail_list' => [
|
||||
[
|
||||
'out_detail_no' => time().'-1',
|
||||
'transfer_amount' => 1,
|
||||
'transfer_remark' => 'test',
|
||||
'openid' => 'MYE42l80oelYMDE34nYD456Xoy',
|
||||
// 'user_name' => '闫嵩达' // 明文传参即可,sdk 会自动加密
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
$result = Pay::wechat()->transfer($order);
|
||||
```
|
||||
|
||||
### 订单配置参数
|
||||
|
||||
**所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了**,比如,`appid`,`sign` 等参数,大家只需传入订单类主观参数即可。
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transfer/chapter3_1.shtml),查看「请求参数」一节。
|
||||
|
||||
|
||||
## 刷卡支付
|
||||
|
||||
:::warning
|
||||
微信支付 v3 版 api 并不支持刷卡支付,后续将接入微信支付 v2 版 API,敬请期待。如果确实有此需求,可以使用 [Pay 的 v2 版](/docs/v2/wechat/)
|
||||
:::
|
||||
|
||||
## 普通红包
|
||||
|
||||
:::warning
|
||||
微信支付 v3 版 api 并不支红包,后续将接入微信支付 v2 版 API,敬请期待。如果确实有此需求,可以使用 [Pay 的 v2 版](/docs/v2/wechat/)
|
||||
:::
|
||||
|
||||
## 裂变红包
|
||||
|
||||
:::warning
|
||||
微信支付 v3 版 api 并不支持红包,后续将接入微信支付 v2 版 API,敬请期待。如果确实有此需求,可以使用 [Pay 的 v2 版](/docs/v2/wechat/)
|
||||
:::
|
28
web/docs/v3/wechat/refund.md
Normal file
28
web/docs/v3/wechat/refund.md
Normal file
@ -0,0 +1,28 @@
|
||||
# 退款
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:------:|:------------:|:----------:|
|
||||
| refund | array $order | Collection |
|
||||
|
||||
## 退款操作
|
||||
|
||||
```php
|
||||
Pay::config($config);
|
||||
|
||||
$order = [
|
||||
'out_trade_no' => '1514192025',
|
||||
'out_refund_no' => time(),
|
||||
'amount' => [
|
||||
'refund' => 1,
|
||||
'total' => 1,
|
||||
'currency' => 'CNY',
|
||||
],
|
||||
];
|
||||
|
||||
$result = Pay::wechat()->refund($order);
|
||||
```
|
||||
|
||||
## 订单配置参数
|
||||
|
||||
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考[这里](https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_9.shtml),查看「请求参数」一栏。
|
||||
|
19
web/docs/v3/wechat/response.md
Normal file
19
web/docs/v3/wechat/response.md
Normal file
@ -0,0 +1,19 @@
|
||||
# 确认回调
|
||||
|
||||
| 方法名 | 参数 | 返回值 |
|
||||
|:-------:|:---:|:--------:|
|
||||
| success | 无 | Response |
|
||||
|
||||
## 例子
|
||||
|
||||
```php
|
||||
Pay::config($config);
|
||||
|
||||
// $result = Pay::wechat()->callback();
|
||||
|
||||
return Pay::wechat()->success();
|
||||
```
|
||||
|
||||
## 订单配置参数
|
||||
|
||||
无
|
18
web/index.md
Normal file
18
web/index.md
Normal file
@ -0,0 +1,18 @@
|
||||
---
|
||||
layout: home
|
||||
title: Pay - 让支付开发更简单
|
||||
|
||||
features:
|
||||
- title: 简洁至上
|
||||
details: 让我们用最少的代码写最复杂的功能,把更多时间花在游戏上。
|
||||
- title: 集成最新API
|
||||
details: 集成支付宝、微信最新API,与时俱进不用担心老代码没人维护了。
|
||||
- title: 统一标准
|
||||
details: 符合最新 PSR 标准,方便你集成到各种其他框架中,无惧束缚。
|
||||
- title: 丰富的事件系统
|
||||
details: 可以 hook 到绝大部分场景,自己的代码自己掌握。
|
||||
- title: 命名不那么乱七八糟
|
||||
details: 命名统一,终于可以不用记那些烂七八糟的名称了。
|
||||
- title: 文件结构清晰
|
||||
details: 文件结构清晰,架构明了,欢迎 PR。
|
||||
---
|
13
web/package.json
Normal file
13
web/package.json
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"scripts": {
|
||||
"docs:dev": "vitepress dev",
|
||||
"docs:build": "vitepress build",
|
||||
"docs:serve": "vitepress serve"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^18.7.8",
|
||||
"sass": "^1.54.5",
|
||||
"vitepress": "^1.0.0-alpha.9",
|
||||
"vue": "^3.2.37"
|
||||
}
|
||||
}
|
BIN
web/public/images/icon.png
Normal file
BIN
web/public/images/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 21 KiB |
BIN
web/public/images/jetbrains.png
Normal file
BIN
web/public/images/jetbrains.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.6 KiB |
BIN
web/public/images/logo.png
Normal file
BIN
web/public/images/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.2 KiB |
BIN
web/public/images/logo2.png
Normal file
BIN
web/public/images/logo2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 21 KiB |
BIN
web/public/images/pay.jpg
Normal file
BIN
web/public/images/pay.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 70 KiB |
727
web/yarn.lock
Normal file
727
web/yarn.lock
Normal file
@ -0,0 +1,727 @@
|
||||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@algolia/autocomplete-core@1.7.1":
|
||||
version "1.7.1"
|
||||
resolved "https://registry.npmmirror.com/@algolia/autocomplete-core/-/autocomplete-core-1.7.1.tgz#025538b8a9564a9f3dd5bcf8a236d6951c76c7d1"
|
||||
integrity sha512-eiZw+fxMzNQn01S8dA/hcCpoWCOCwcIIEUtHHdzN5TGB3IpzLbuhqFeTfh2OUhhgkE8Uo17+wH+QJ/wYyQmmzg==
|
||||
dependencies:
|
||||
"@algolia/autocomplete-shared" "1.7.1"
|
||||
|
||||
"@algolia/autocomplete-preset-algolia@1.7.1":
|
||||
version "1.7.1"
|
||||
resolved "https://registry.npmmirror.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.1.tgz#7dadc5607097766478014ae2e9e1c9c4b3f957c8"
|
||||
integrity sha512-pJwmIxeJCymU1M6cGujnaIYcY3QPOVYZOXhFkWVM7IxKzy272BwCvMFMyc5NpG/QmiObBxjo7myd060OeTNJXg==
|
||||
dependencies:
|
||||
"@algolia/autocomplete-shared" "1.7.1"
|
||||
|
||||
"@algolia/autocomplete-shared@1.7.1":
|
||||
version "1.7.1"
|
||||
resolved "https://registry.npmmirror.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.1.tgz#95c3a0b4b78858fed730cf9c755b7d1cd0c82c74"
|
||||
integrity sha512-eTmGVqY3GeyBTT8IWiB2K5EuURAqhnumfktAEoHxfDY2o7vg2rSnO16ZtIG0fMgt3py28Vwgq42/bVEuaQV7pg==
|
||||
|
||||
"@algolia/cache-browser-local-storage@4.14.2":
|
||||
version "4.14.2"
|
||||
resolved "https://registry.npmmirror.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.2.tgz#d5b1b90130ca87c6321de876e167df9ec6524936"
|
||||
integrity sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA==
|
||||
dependencies:
|
||||
"@algolia/cache-common" "4.14.2"
|
||||
|
||||
"@algolia/cache-common@4.14.2":
|
||||
version "4.14.2"
|
||||
resolved "https://registry.npmmirror.com/@algolia/cache-common/-/cache-common-4.14.2.tgz#b946b6103c922f0c06006fb6929163ed2c67d598"
|
||||
integrity sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg==
|
||||
|
||||
"@algolia/cache-in-memory@4.14.2":
|
||||
version "4.14.2"
|
||||
resolved "https://registry.npmmirror.com/@algolia/cache-in-memory/-/cache-in-memory-4.14.2.tgz#88e4a21474f9ac05331c2fa3ceb929684a395a24"
|
||||
integrity sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ==
|
||||
dependencies:
|
||||
"@algolia/cache-common" "4.14.2"
|
||||
|
||||
"@algolia/client-account@4.14.2":
|
||||
version "4.14.2"
|
||||
resolved "https://registry.npmmirror.com/@algolia/client-account/-/client-account-4.14.2.tgz#b76ac1ba9ea71e8c3f77a1805b48350dc0728a16"
|
||||
integrity sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w==
|
||||
dependencies:
|
||||
"@algolia/client-common" "4.14.2"
|
||||
"@algolia/client-search" "4.14.2"
|
||||
"@algolia/transporter" "4.14.2"
|
||||
|
||||
"@algolia/client-analytics@4.14.2":
|
||||
version "4.14.2"
|
||||
resolved "https://registry.npmmirror.com/@algolia/client-analytics/-/client-analytics-4.14.2.tgz#ca04dcaf9a78ee5c92c5cb5e9c74cf031eb2f1fb"
|
||||
integrity sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ==
|
||||
dependencies:
|
||||
"@algolia/client-common" "4.14.2"
|
||||
"@algolia/client-search" "4.14.2"
|
||||
"@algolia/requester-common" "4.14.2"
|
||||
"@algolia/transporter" "4.14.2"
|
||||
|
||||
"@algolia/client-common@4.14.2":
|
||||
version "4.14.2"
|
||||
resolved "https://registry.npmmirror.com/@algolia/client-common/-/client-common-4.14.2.tgz#e1324e167ffa8af60f3e8bcd122110fd0bfd1300"
|
||||
integrity sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q==
|
||||
dependencies:
|
||||
"@algolia/requester-common" "4.14.2"
|
||||
"@algolia/transporter" "4.14.2"
|
||||
|
||||
"@algolia/client-personalization@4.14.2":
|
||||
version "4.14.2"
|
||||
resolved "https://registry.npmmirror.com/@algolia/client-personalization/-/client-personalization-4.14.2.tgz#656bbb6157a3dd1a4be7de65e457fda136c404ec"
|
||||
integrity sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw==
|
||||
dependencies:
|
||||
"@algolia/client-common" "4.14.2"
|
||||
"@algolia/requester-common" "4.14.2"
|
||||
"@algolia/transporter" "4.14.2"
|
||||
|
||||
"@algolia/client-search@4.14.2":
|
||||
version "4.14.2"
|
||||
resolved "https://registry.npmmirror.com/@algolia/client-search/-/client-search-4.14.2.tgz#357bdb7e640163f0e33bad231dfcc21f67dc2e92"
|
||||
integrity sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw==
|
||||
dependencies:
|
||||
"@algolia/client-common" "4.14.2"
|
||||
"@algolia/requester-common" "4.14.2"
|
||||
"@algolia/transporter" "4.14.2"
|
||||
|
||||
"@algolia/logger-common@4.14.2":
|
||||
version "4.14.2"
|
||||
resolved "https://registry.npmmirror.com/@algolia/logger-common/-/logger-common-4.14.2.tgz#b74b3a92431f92665519d95942c246793ec390ee"
|
||||
integrity sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA==
|
||||
|
||||
"@algolia/logger-console@4.14.2":
|
||||
version "4.14.2"
|
||||
resolved "https://registry.npmmirror.com/@algolia/logger-console/-/logger-console-4.14.2.tgz#ec49cb47408f5811d4792598683923a800abce7b"
|
||||
integrity sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g==
|
||||
dependencies:
|
||||
"@algolia/logger-common" "4.14.2"
|
||||
|
||||
"@algolia/requester-browser-xhr@4.14.2":
|
||||
version "4.14.2"
|
||||
resolved "https://registry.npmmirror.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.2.tgz#a2cd4d9d8d90d53109cc7f3682dc6ebf20f798f2"
|
||||
integrity sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw==
|
||||
dependencies:
|
||||
"@algolia/requester-common" "4.14.2"
|
||||
|
||||
"@algolia/requester-common@4.14.2":
|
||||
version "4.14.2"
|
||||
resolved "https://registry.npmmirror.com/@algolia/requester-common/-/requester-common-4.14.2.tgz#bc4e9e5ee16c953c0ecacbfb334a33c30c28b1a1"
|
||||
integrity sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg==
|
||||
|
||||
"@algolia/requester-node-http@4.14.2":
|
||||
version "4.14.2"
|
||||
resolved "https://registry.npmmirror.com/@algolia/requester-node-http/-/requester-node-http-4.14.2.tgz#7c1223a1785decaab1def64c83dade6bea45e115"
|
||||
integrity sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg==
|
||||
dependencies:
|
||||
"@algolia/requester-common" "4.14.2"
|
||||
|
||||
"@algolia/transporter@4.14.2":
|
||||
version "4.14.2"
|
||||
resolved "https://registry.npmmirror.com/@algolia/transporter/-/transporter-4.14.2.tgz#77c069047fb1a4359ee6a51f51829508e44a1e3d"
|
||||
integrity sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ==
|
||||
dependencies:
|
||||
"@algolia/cache-common" "4.14.2"
|
||||
"@algolia/logger-common" "4.14.2"
|
||||
"@algolia/requester-common" "4.14.2"
|
||||
|
||||
"@babel/parser@^7.16.4":
|
||||
version "7.18.11"
|
||||
resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.18.11.tgz#68bb07ab3d380affa9a3f96728df07969645d2d9"
|
||||
integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==
|
||||
|
||||
"@docsearch/css@3.2.1", "@docsearch/css@^3.2.1":
|
||||
version "3.2.1"
|
||||
resolved "https://registry.npmmirror.com/@docsearch/css/-/css-3.2.1.tgz#c05d7818b0e43b42f9efa2d82a11c36606b37b27"
|
||||
integrity sha512-gaP6TxxwQC+K8D6TRx5WULUWKrcbzECOPA2KCVMuI+6C7dNiGUk5yXXzVhc5sld79XKYLnO9DRTI4mjXDYkh+g==
|
||||
|
||||
"@docsearch/js@^3.2.1":
|
||||
version "3.2.1"
|
||||
resolved "https://registry.npmmirror.com/@docsearch/js/-/js-3.2.1.tgz#d6856fb6223c7a47091640264d5144d59806bc30"
|
||||
integrity sha512-H1PekEtSeS0msetR2YGGey2w7jQ2wAKfGODJvQTygSwMgUZ+2DHpzUgeDyEBIXRIfaBcoQneqrzsljM62pm6Xg==
|
||||
dependencies:
|
||||
"@docsearch/react" "3.2.1"
|
||||
preact "^10.0.0"
|
||||
|
||||
"@docsearch/react@3.2.1":
|
||||
version "3.2.1"
|
||||
resolved "https://registry.npmmirror.com/@docsearch/react/-/react-3.2.1.tgz#112ad88db07367fa6fd933d67d58421d8d8289aa"
|
||||
integrity sha512-EzTQ/y82s14IQC5XVestiK/kFFMe2aagoYFuTAIfIb/e+4FU7kSMKonRtLwsCiLQHmjvNQq+HO+33giJ5YVtaQ==
|
||||
dependencies:
|
||||
"@algolia/autocomplete-core" "1.7.1"
|
||||
"@algolia/autocomplete-preset-algolia" "1.7.1"
|
||||
"@docsearch/css" "3.2.1"
|
||||
algoliasearch "^4.0.0"
|
||||
|
||||
"@esbuild/linux-loong64@0.14.54":
|
||||
version "0.14.54"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028"
|
||||
integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==
|
||||
|
||||
"@types/node@^18.7.8":
|
||||
version "18.7.8"
|
||||
resolved "https://registry.npmmirror.com/@types/node/-/node-18.7.8.tgz#6bbf2be6fbf9c187a5040d4277d24a06a18957a1"
|
||||
integrity sha512-/YP55EMK2341JkODUb8DM9O0x1SIz2aBvyF33Uf1c76St3VpsMXEIW0nxuKkq/5cxnbz0RD9cfwNZHEAZQD3ag==
|
||||
|
||||
"@types/web-bluetooth@^0.0.15":
|
||||
version "0.0.15"
|
||||
resolved "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.15.tgz#d60330046a6ed8a13b4a53df3813c44942ebdf72"
|
||||
integrity sha512-w7hEHXnPMEZ+4nGKl/KDRVpxkwYxYExuHOYXyzIzCDzEZ9ZCGMAewulr9IqJu2LR4N37fcnb1XVeuZ09qgOxhA==
|
||||
|
||||
"@vitejs/plugin-vue@^3.0.3":
|
||||
version "3.0.3"
|
||||
resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-3.0.3.tgz#7e3e401ccb30b4380d2279d9849281413f1791ef"
|
||||
integrity sha512-U4zNBlz9mg+TA+i+5QPc3N5lQvdUXENZLO2h0Wdzp56gI1MWhqJOv+6R+d4kOzoaSSq6TnGPBdZAXKOe4lXy6g==
|
||||
|
||||
"@vue/compiler-core@3.2.37":
|
||||
version "3.2.37"
|
||||
resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.37.tgz#b3c42e04c0e0f2c496ff1784e543fbefe91e215a"
|
||||
integrity sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==
|
||||
dependencies:
|
||||
"@babel/parser" "^7.16.4"
|
||||
"@vue/shared" "3.2.37"
|
||||
estree-walker "^2.0.2"
|
||||
source-map "^0.6.1"
|
||||
|
||||
"@vue/compiler-dom@3.2.37":
|
||||
version "3.2.37"
|
||||
resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz#10d2427a789e7c707c872da9d678c82a0c6582b5"
|
||||
integrity sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==
|
||||
dependencies:
|
||||
"@vue/compiler-core" "3.2.37"
|
||||
"@vue/shared" "3.2.37"
|
||||
|
||||
"@vue/compiler-sfc@3.2.37":
|
||||
version "3.2.37"
|
||||
resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz#3103af3da2f40286edcd85ea495dcb35bc7f5ff4"
|
||||
integrity sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==
|
||||
dependencies:
|
||||
"@babel/parser" "^7.16.4"
|
||||
"@vue/compiler-core" "3.2.37"
|
||||
"@vue/compiler-dom" "3.2.37"
|
||||
"@vue/compiler-ssr" "3.2.37"
|
||||
"@vue/reactivity-transform" "3.2.37"
|
||||
"@vue/shared" "3.2.37"
|
||||
estree-walker "^2.0.2"
|
||||
magic-string "^0.25.7"
|
||||
postcss "^8.1.10"
|
||||
source-map "^0.6.1"
|
||||
|
||||
"@vue/compiler-ssr@3.2.37":
|
||||
version "3.2.37"
|
||||
resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz#4899d19f3a5fafd61524a9d1aee8eb0505313cff"
|
||||
integrity sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==
|
||||
dependencies:
|
||||
"@vue/compiler-dom" "3.2.37"
|
||||
"@vue/shared" "3.2.37"
|
||||
|
||||
"@vue/devtools-api@^6.2.1":
|
||||
version "6.2.1"
|
||||
resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.2.1.tgz#6f2948ff002ec46df01420dfeff91de16c5b4092"
|
||||
integrity sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ==
|
||||
|
||||
"@vue/reactivity-transform@3.2.37":
|
||||
version "3.2.37"
|
||||
resolved "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz#0caa47c4344df4ae59f5a05dde2a8758829f8eca"
|
||||
integrity sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==
|
||||
dependencies:
|
||||
"@babel/parser" "^7.16.4"
|
||||
"@vue/compiler-core" "3.2.37"
|
||||
"@vue/shared" "3.2.37"
|
||||
estree-walker "^2.0.2"
|
||||
magic-string "^0.25.7"
|
||||
|
||||
"@vue/reactivity@3.2.37":
|
||||
version "3.2.37"
|
||||
resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.37.tgz#5bc3847ac58828e2b78526e08219e0a1089f8848"
|
||||
integrity sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==
|
||||
dependencies:
|
||||
"@vue/shared" "3.2.37"
|
||||
|
||||
"@vue/runtime-core@3.2.37":
|
||||
version "3.2.37"
|
||||
resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.37.tgz#7ba7c54bb56e5d70edfc2f05766e1ca8519966e3"
|
||||
integrity sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==
|
||||
dependencies:
|
||||
"@vue/reactivity" "3.2.37"
|
||||
"@vue/shared" "3.2.37"
|
||||
|
||||
"@vue/runtime-dom@3.2.37":
|
||||
version "3.2.37"
|
||||
resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz#002bdc8228fa63949317756fb1e92cdd3f9f4bbd"
|
||||
integrity sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==
|
||||
dependencies:
|
||||
"@vue/runtime-core" "3.2.37"
|
||||
"@vue/shared" "3.2.37"
|
||||
csstype "^2.6.8"
|
||||
|
||||
"@vue/server-renderer@3.2.37":
|
||||
version "3.2.37"
|
||||
resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.37.tgz#840a29c8dcc29bddd9b5f5ffa22b95c0e72afdfc"
|
||||
integrity sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==
|
||||
dependencies:
|
||||
"@vue/compiler-ssr" "3.2.37"
|
||||
"@vue/shared" "3.2.37"
|
||||
|
||||
"@vue/shared@3.2.37":
|
||||
version "3.2.37"
|
||||
resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.37.tgz#8e6adc3f2759af52f0e85863dfb0b711ecc5c702"
|
||||
integrity sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==
|
||||
|
||||
"@vueuse/core@^9.1.0":
|
||||
version "9.1.0"
|
||||
resolved "https://registry.npmmirror.com/@vueuse/core/-/core-9.1.0.tgz#f0fb13fd99768c0eb617169a2d2c1cbd5f5a52eb"
|
||||
integrity sha512-BIroqvXEqt826aE9r3K5cox1zobuPuAzdYJ36kouC2TVhlXvFKIILgFVWrpp9HZPwB3aLzasmG3K87q7TSyXZg==
|
||||
dependencies:
|
||||
"@types/web-bluetooth" "^0.0.15"
|
||||
"@vueuse/metadata" "9.1.0"
|
||||
"@vueuse/shared" "9.1.0"
|
||||
vue-demi "*"
|
||||
|
||||
"@vueuse/metadata@9.1.0":
|
||||
version "9.1.0"
|
||||
resolved "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.1.0.tgz#194d4bd47f7acb91e348c0f436e678ddf7ee235b"
|
||||
integrity sha512-8OEhlog1iaAGTD3LICZ8oBGQdYeMwByvXetOtAOZCJOzyCRSwqwdggTsmVZZ1rkgYIEqgUBk942AsAPwM21s6A==
|
||||
|
||||
"@vueuse/shared@9.1.0":
|
||||
version "9.1.0"
|
||||
resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.1.0.tgz#d8459a45324f32fb05a2a56ed754637c3d0efaeb"
|
||||
integrity sha512-pB/3njQu4tfJJ78ajELNda0yMG6lKfpToQW7Soe09CprF1k3QuyoNi1tBNvo75wBDJWD+LOnr+c4B5HZ39jY/Q==
|
||||
dependencies:
|
||||
vue-demi "*"
|
||||
|
||||
algoliasearch@^4.0.0:
|
||||
version "4.14.2"
|
||||
resolved "https://registry.npmmirror.com/algoliasearch/-/algoliasearch-4.14.2.tgz#63f142583bfc3a9bd3cd4a1b098bf6fe58e56f6c"
|
||||
integrity sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg==
|
||||
dependencies:
|
||||
"@algolia/cache-browser-local-storage" "4.14.2"
|
||||
"@algolia/cache-common" "4.14.2"
|
||||
"@algolia/cache-in-memory" "4.14.2"
|
||||
"@algolia/client-account" "4.14.2"
|
||||
"@algolia/client-analytics" "4.14.2"
|
||||
"@algolia/client-common" "4.14.2"
|
||||
"@algolia/client-personalization" "4.14.2"
|
||||
"@algolia/client-search" "4.14.2"
|
||||
"@algolia/logger-common" "4.14.2"
|
||||
"@algolia/logger-console" "4.14.2"
|
||||
"@algolia/requester-browser-xhr" "4.14.2"
|
||||
"@algolia/requester-common" "4.14.2"
|
||||
"@algolia/requester-node-http" "4.14.2"
|
||||
"@algolia/transporter" "4.14.2"
|
||||
|
||||
anymatch@~3.1.2:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
|
||||
integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
|
||||
dependencies:
|
||||
normalize-path "^3.0.0"
|
||||
picomatch "^2.0.4"
|
||||
|
||||
binary-extensions@^2.0.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
|
||||
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
|
||||
|
||||
body-scroll-lock@^4.0.0-beta.0:
|
||||
version "4.0.0-beta.0"
|
||||
resolved "https://registry.npmmirror.com/body-scroll-lock/-/body-scroll-lock-4.0.0-beta.0.tgz#4f78789d10e6388115c0460cd6d7d4dd2bbc4f7e"
|
||||
integrity sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==
|
||||
|
||||
braces@~3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
|
||||
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
|
||||
dependencies:
|
||||
fill-range "^7.0.1"
|
||||
|
||||
"chokidar@>=3.0.0 <4.0.0":
|
||||
version "3.5.3"
|
||||
resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
|
||||
integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
|
||||
dependencies:
|
||||
anymatch "~3.1.2"
|
||||
braces "~3.0.2"
|
||||
glob-parent "~5.1.2"
|
||||
is-binary-path "~2.1.0"
|
||||
is-glob "~4.0.1"
|
||||
normalize-path "~3.0.0"
|
||||
readdirp "~3.6.0"
|
||||
optionalDependencies:
|
||||
fsevents "~2.3.2"
|
||||
|
||||
csstype@^2.6.8:
|
||||
version "2.6.20"
|
||||
resolved "https://registry.npmmirror.com/csstype/-/csstype-2.6.20.tgz#9229c65ea0b260cf4d3d997cb06288e36a8d6dda"
|
||||
integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==
|
||||
|
||||
esbuild-android-64@0.14.54:
|
||||
version "0.14.54"
|
||||
resolved "https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be"
|
||||
integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==
|
||||
|
||||
esbuild-android-arm64@0.14.54:
|
||||
version "0.14.54"
|
||||
resolved "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771"
|
||||
integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==
|
||||
|
||||
esbuild-darwin-64@0.14.54:
|
||||
version "0.14.54"
|
||||
resolved "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25"
|
||||
integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==
|
||||
|
||||
esbuild-darwin-arm64@0.14.54:
|
||||
version "0.14.54"
|
||||
resolved "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73"
|
||||
integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==
|
||||
|
||||
esbuild-freebsd-64@0.14.54:
|
||||
version "0.14.54"
|
||||
resolved "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d"
|
||||
integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==
|
||||
|
||||
esbuild-freebsd-arm64@0.14.54:
|
||||
version "0.14.54"
|
||||
resolved "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48"
|
||||
integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==
|
||||
|
||||
esbuild-linux-32@0.14.54:
|
||||
version "0.14.54"
|
||||
resolved "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5"
|
||||
integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==
|
||||
|
||||
esbuild-linux-64@0.14.54:
|
||||
version "0.14.54"
|
||||
resolved "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652"
|
||||
integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==
|
||||
|
||||
esbuild-linux-arm64@0.14.54:
|
||||
version "0.14.54"
|
||||
resolved "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b"
|
||||
integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==
|
||||
|
||||
esbuild-linux-arm@0.14.54:
|
||||
version "0.14.54"
|
||||
resolved "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59"
|
||||
integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==
|
||||
|
||||
esbuild-linux-mips64le@0.14.54:
|
||||
version "0.14.54"
|
||||
resolved "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34"
|
||||
integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==
|
||||
|
||||
esbuild-linux-ppc64le@0.14.54:
|
||||
version "0.14.54"
|
||||
resolved "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e"
|
||||
integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==
|
||||
|
||||
esbuild-linux-riscv64@0.14.54:
|
||||
version "0.14.54"
|
||||
resolved "https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8"
|
||||
integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==
|
||||
|
||||
esbuild-linux-s390x@0.14.54:
|
||||
version "0.14.54"
|
||||
resolved "https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6"
|
||||
integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==
|
||||
|
||||
esbuild-netbsd-64@0.14.54:
|
||||
version "0.14.54"
|
||||
resolved "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81"
|
||||
integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==
|
||||
|
||||
esbuild-openbsd-64@0.14.54:
|
||||
version "0.14.54"
|
||||
resolved "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b"
|
||||
integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==
|
||||
|
||||
esbuild-sunos-64@0.14.54:
|
||||
version "0.14.54"
|
||||
resolved "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da"
|
||||
integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==
|
||||
|
||||
esbuild-windows-32@0.14.54:
|
||||
version "0.14.54"
|
||||
resolved "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31"
|
||||
integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==
|
||||
|
||||
esbuild-windows-64@0.14.54:
|
||||
version "0.14.54"
|
||||
resolved "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4"
|
||||
integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==
|
||||
|
||||
esbuild-windows-arm64@0.14.54:
|
||||
version "0.14.54"
|
||||
resolved "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982"
|
||||
integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==
|
||||
|
||||
esbuild@^0.14.47:
|
||||
version "0.14.54"
|
||||
resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2"
|
||||
integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==
|
||||
optionalDependencies:
|
||||
"@esbuild/linux-loong64" "0.14.54"
|
||||
esbuild-android-64 "0.14.54"
|
||||
esbuild-android-arm64 "0.14.54"
|
||||
esbuild-darwin-64 "0.14.54"
|
||||
esbuild-darwin-arm64 "0.14.54"
|
||||
esbuild-freebsd-64 "0.14.54"
|
||||
esbuild-freebsd-arm64 "0.14.54"
|
||||
esbuild-linux-32 "0.14.54"
|
||||
esbuild-linux-64 "0.14.54"
|
||||
esbuild-linux-arm "0.14.54"
|
||||
esbuild-linux-arm64 "0.14.54"
|
||||
esbuild-linux-mips64le "0.14.54"
|
||||
esbuild-linux-ppc64le "0.14.54"
|
||||
esbuild-linux-riscv64 "0.14.54"
|
||||
esbuild-linux-s390x "0.14.54"
|
||||
esbuild-netbsd-64 "0.14.54"
|
||||
esbuild-openbsd-64 "0.14.54"
|
||||
esbuild-sunos-64 "0.14.54"
|
||||
esbuild-windows-32 "0.14.54"
|
||||
esbuild-windows-64 "0.14.54"
|
||||
esbuild-windows-arm64 "0.14.54"
|
||||
|
||||
estree-walker@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
|
||||
integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
|
||||
|
||||
fill-range@^7.0.1:
|
||||
version "7.0.1"
|
||||
resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
|
||||
integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
|
||||
dependencies:
|
||||
to-regex-range "^5.0.1"
|
||||
|
||||
fsevents@~2.3.2:
|
||||
version "2.3.2"
|
||||
resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
|
||||
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
|
||||
|
||||
function-bind@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
|
||||
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
|
||||
|
||||
glob-parent@~5.1.2:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
|
||||
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
|
||||
dependencies:
|
||||
is-glob "^4.0.1"
|
||||
|
||||
has@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.npmmirror.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
|
||||
integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
|
||||
dependencies:
|
||||
function-bind "^1.1.1"
|
||||
|
||||
immutable@^4.0.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.npmmirror.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef"
|
||||
integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==
|
||||
|
||||
is-binary-path@~2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
|
||||
integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
|
||||
dependencies:
|
||||
binary-extensions "^2.0.0"
|
||||
|
||||
is-core-module@^2.9.0:
|
||||
version "2.10.0"
|
||||
resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed"
|
||||
integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==
|
||||
dependencies:
|
||||
has "^1.0.3"
|
||||
|
||||
is-extglob@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
|
||||
integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
|
||||
|
||||
is-glob@^4.0.1, is-glob@~4.0.1:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
|
||||
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
|
||||
dependencies:
|
||||
is-extglob "^2.1.1"
|
||||
|
||||
is-number@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
|
||||
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
|
||||
|
||||
jsonc-parser@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.1.0.tgz#73b8f0e5c940b83d03476bc2e51a20ef0932615d"
|
||||
integrity sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==
|
||||
|
||||
magic-string@^0.25.7:
|
||||
version "0.25.9"
|
||||
resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c"
|
||||
integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==
|
||||
dependencies:
|
||||
sourcemap-codec "^1.4.8"
|
||||
|
||||
nanoid@^3.3.4:
|
||||
version "3.3.4"
|
||||
resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
|
||||
integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
|
||||
|
||||
normalize-path@^3.0.0, normalize-path@~3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
|
||||
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
|
||||
|
||||
path-parse@^1.0.7:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
|
||||
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
|
||||
|
||||
picocolors@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
|
||||
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
|
||||
|
||||
picomatch@^2.0.4, picomatch@^2.2.1:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
|
||||
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
|
||||
|
||||
postcss@^8.1.10, postcss@^8.4.16:
|
||||
version "8.4.16"
|
||||
resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.16.tgz#33a1d675fac39941f5f445db0de4db2b6e01d43c"
|
||||
integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==
|
||||
dependencies:
|
||||
nanoid "^3.3.4"
|
||||
picocolors "^1.0.0"
|
||||
source-map-js "^1.0.2"
|
||||
|
||||
preact@^10.0.0:
|
||||
version "10.10.6"
|
||||
resolved "https://registry.npmmirror.com/preact/-/preact-10.10.6.tgz#1fe62aecf93974b64e6a42e09ba1f00f93207d14"
|
||||
integrity sha512-w0mCL5vICUAZrh1DuHEdOWBjxdO62lvcO++jbzr8UhhYcTbFkpegLH9XX+7MadjTl/y0feoqwQ/zAnzkc/EGog==
|
||||
|
||||
readdirp@~3.6.0:
|
||||
version "3.6.0"
|
||||
resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
|
||||
integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
|
||||
dependencies:
|
||||
picomatch "^2.2.1"
|
||||
|
||||
resolve@^1.22.1:
|
||||
version "1.22.1"
|
||||
resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
|
||||
integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
|
||||
dependencies:
|
||||
is-core-module "^2.9.0"
|
||||
path-parse "^1.0.7"
|
||||
supports-preserve-symlinks-flag "^1.0.0"
|
||||
|
||||
"rollup@>=2.75.6 <2.77.0 || ~2.77.0":
|
||||
version "2.77.3"
|
||||
resolved "https://registry.npmmirror.com/rollup/-/rollup-2.77.3.tgz#8f00418d3a2740036e15deb653bed1a90ee0cc12"
|
||||
integrity sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==
|
||||
optionalDependencies:
|
||||
fsevents "~2.3.2"
|
||||
|
||||
sass@^1.54.5:
|
||||
version "1.54.5"
|
||||
resolved "https://registry.npmmirror.com/sass/-/sass-1.54.5.tgz#93708f5560784f6ff2eab8542ade021a4a947b3a"
|
||||
integrity sha512-p7DTOzxkUPa/63FU0R3KApkRHwcVZYC0PLnLm5iyZACyp15qSi32x7zVUhRdABAATmkALqgGrjCJAcWvobmhHw==
|
||||
dependencies:
|
||||
chokidar ">=3.0.0 <4.0.0"
|
||||
immutable "^4.0.0"
|
||||
source-map-js ">=0.6.2 <2.0.0"
|
||||
|
||||
shiki@^0.11.1:
|
||||
version "0.11.1"
|
||||
resolved "https://registry.npmmirror.com/shiki/-/shiki-0.11.1.tgz#df0f719e7ab592c484d8b73ec10e215a503ab8cc"
|
||||
integrity sha512-EugY9VASFuDqOexOgXR18ZV+TbFrQHeCpEYaXamO+SZlsnT/2LxuLBX25GGtIrwaEVFXUAbUQ601SWE2rMwWHA==
|
||||
dependencies:
|
||||
jsonc-parser "^3.0.0"
|
||||
vscode-oniguruma "^1.6.1"
|
||||
vscode-textmate "^6.0.0"
|
||||
|
||||
"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
|
||||
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
|
||||
|
||||
source-map@^0.6.1:
|
||||
version "0.6.1"
|
||||
resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
|
||||
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
|
||||
|
||||
sourcemap-codec@^1.4.8:
|
||||
version "1.4.8"
|
||||
resolved "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
|
||||
integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
|
||||
|
||||
supports-preserve-symlinks-flag@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
|
||||
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
|
||||
|
||||
to-regex-range@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
|
||||
integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
|
||||
dependencies:
|
||||
is-number "^7.0.0"
|
||||
|
||||
vite@^3.0.8:
|
||||
version "3.0.9"
|
||||
resolved "https://registry.npmmirror.com/vite/-/vite-3.0.9.tgz#45fac22c2a5290a970f23d66c1aef56a04be8a30"
|
||||
integrity sha512-waYABTM+G6DBTCpYAxvevpG50UOlZuynR0ckTK5PawNVt7ebX6X7wNXHaGIO6wYYFXSM7/WcuFuO2QzhBB6aMw==
|
||||
dependencies:
|
||||
esbuild "^0.14.47"
|
||||
postcss "^8.4.16"
|
||||
resolve "^1.22.1"
|
||||
rollup ">=2.75.6 <2.77.0 || ~2.77.0"
|
||||
optionalDependencies:
|
||||
fsevents "~2.3.2"
|
||||
|
||||
vitepress@^1.0.0-alpha.9:
|
||||
version "1.0.0-alpha.9"
|
||||
resolved "https://registry.npmmirror.com/vitepress/-/vitepress-1.0.0-alpha.9.tgz#3426c8c6da2a63a811356f27e42fb9d521038aeb"
|
||||
integrity sha512-+VxgjflIcssbuyUBRYjZRpQ8w25v6XnIbXFmm9qwLVaqZdC0rN6qViEp7oRwA3HUlrGxj7GEzqQjW7xj4+E83w==
|
||||
dependencies:
|
||||
"@docsearch/css" "^3.2.1"
|
||||
"@docsearch/js" "^3.2.1"
|
||||
"@vitejs/plugin-vue" "^3.0.3"
|
||||
"@vue/devtools-api" "^6.2.1"
|
||||
"@vueuse/core" "^9.1.0"
|
||||
body-scroll-lock "^4.0.0-beta.0"
|
||||
shiki "^0.11.1"
|
||||
vite "^3.0.8"
|
||||
vue "^3.2.37"
|
||||
|
||||
vscode-oniguruma@^1.6.1:
|
||||
version "1.6.2"
|
||||
resolved "https://registry.npmmirror.com/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz#aeb9771a2f1dbfc9083c8a7fdd9cccaa3f386607"
|
||||
integrity sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==
|
||||
|
||||
vscode-textmate@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.npmmirror.com/vscode-textmate/-/vscode-textmate-6.0.0.tgz#a3777197235036814ac9a92451492f2748589210"
|
||||
integrity sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ==
|
||||
|
||||
vue-demi@*:
|
||||
version "0.13.8"
|
||||
resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.8.tgz#5c568fb3b4d8f848acc658dfccd3d875035b5653"
|
||||
integrity sha512-Vy1zbZhCOdsmvGR6tJhAvO5vhP7eiS8xkbYQSoVa7o6KlIy3W8Rc53ED4qI4qpeRDjv3mLfXSEpYU6Yq4pgXRg==
|
||||
|
||||
vue@^3.2.37:
|
||||
version "3.2.37"
|
||||
resolved "https://registry.npmmirror.com/vue/-/vue-3.2.37.tgz#da220ccb618d78579d25b06c7c21498ca4e5452e"
|
||||
integrity sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==
|
||||
dependencies:
|
||||
"@vue/compiler-dom" "3.2.37"
|
||||
"@vue/compiler-sfc" "3.2.37"
|
||||
"@vue/runtime-dom" "3.2.37"
|
||||
"@vue/server-renderer" "3.2.37"
|
||||
"@vue/shared" "3.2.37"
|
Loading…
Reference in New Issue
Block a user