gorden 8 ماه پیش
والد
کامیت
43d86ec3e2

+ 107 - 0
app/api/controller/pay/AlipayController.php

@@ -0,0 +1,107 @@
+<?php
+
+namespace app\api\controller\pay;
+
+use app\api\controller\Log;
+use Yansongda\Pay\Pay;
+
+class AlipayController
+{
+    protected $config = [
+        'app_id' => '2021004155613207',
+        'notify_url' => 'http://yansongda.cn/notify.php',
+        'return_url' => 'http://yansongda.cn/return.php',
+        'ali_public_key' => 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmlAp3QIQuDVJqQP5C+33LO6P5D9OOGXszClHNH/5Iep+/A+00vhLaSc9izgxV8XTWpqHcss/gGYfmjNtpDwF0RS1po6J7dTg8d6UJtqaNGCEMUc/r/+Jo+zrmSeoFRdwb5a+tIPC2xb58qrRuL4wYpvzSAwr9DNveKO30RJT3cXX98sYMs6gWhXOz5jBGFUlYQZ5WB1Nx8HM39spW7/QNINX0y4Wqqp0reWieMRE1aKrV9Fb4ehrJ3nDm64KHWfRw/g3Me9FvqkP03dkfPT4hykeHfWTUbuh+ifTjGMcVLxBnBX74vnNzk9zwn9l+UUuEg/1RbMcEF5ppMnt/Kog6wIDAQAB',
+        // 加密方式: **RSA2**
+        'private_key' => 'MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCaUCndAhC4NUmpA/kL7fcs7o/kP044ZezMKUc0f/kh6n78D7TS+EtpJz2LODFXxdNamodyyz+AZh+aM22kPAXRFLWmjont1ODx3pQm2po0YIQxRz+v/4mj7OuZJ6gVF3Bvlr60g8LbFvnyqtG4vjBim/NIDCv0M294o7fRElPdxdf3yxgyzqBaFc7PmMEYVSVhBnlYHU3Hwczf2ylbv9A0g1fTLhaqqnSt5aJ4xETVoqtX0Vvh6GsnecObrgodZ9HD+Dcx70W+qQ/Td2R89PiHKR4d9ZNRu6H6J9OMYxxUvEGcFfvi+c3OT3PCf2X5RS4SD/VFsxwQXmmkye38qiDrAgMBAAECggEAE3EgJSE6fAryseG3QgKETtvrsyUqtL5avEpDF2E8QUKrJxTPgnkX/zKbdWvqA5YAD/1CLXtgD8xOFP5/xN5vGS2TyV1SEW3tvWt+nPqTzR+P6CmC46i9bbLO6Cfv7GBcoSKL+nBTX4kgiqts6urDa9kcKKqn6weD9t4hrayydlFhiXGT+zUtnkZobJIWmzG+ZLjusn/wp4vyQyXQGnjyiEmzCHab/n8hLfPR9d/3mfG/rj/mIJ9630H+mstMTGoZxDKobeC+k5HQpICyY9bbmug7IgZtqHCO0xou8tpinMRmk/wRD/Bg4XIDdAYgGucb0rpRvbI9KxgGpzpGFXFkuQKBgQDdY/eMdrwnH13XQT4l+ZrjEi7fkCTFvmfafJy1G55feFK9k+YmX7UXtcbw/bc59CqjIL/bpkYy1t+0SrB0eywGvMFBD3G3EZQnQmFmHW7bAba3pTcEoVlyhm9Oz9igvbpI1fZmaeqE+9DOVlWwtcLjhpBh/wuHP5KgyfWKBqwrBQKBgQCyb8PgKklTNFS7iHKBKTIx/ES4xZBSej/Q/lLY0ZGc2LTTGn2HxmmbcJIH5fR4+opOGSGsXc/vfp2pGk1yq42rRVVjUG7Y68J2VpIjELQ8SNbSK+4YqS8VI+Kez0m7ZDEWTwxMRbQTiCaBRUwGhjkReLyLrfXmz5Syxaf7rBg/LwKBgQDE4eQCDI2jFSf1B9ZnGyT9DuyUcLHjEUN2cB9EiH09VdnvMhoYwkBgB44WPuu1JEjOrY8xnRsMlz52LX3i+K7chvwuCbgNIBrrFwNbNo2hQlLl2o2lFoBfcuKF6h0yRcfmgjEQPt0Kyo6VEP4/mkTo5oB8Rb5Q1t5lE3XC+9AcqQKBgEJDENkguuQEDecqL2NZegNn69k1vHd0YFhq6TcM8+br7pJqRu1xt+v6LLB0K4n1eACygnewyrPkMAYI93O60zwj3iaoStGRE0DAuzn8TQIKBoQ7vgo4YXyXO+O/lGDbPwNKzYVRaSLLr4jXw/i0RWMAk/vG2QciVNTiY5Qo/0QPAoGANqq2RacHmcevwp3S3iXfHGxb8kfG90aGDtTr9AY965IGmy4ckKEZJ5+XkhH8Yi+YYWyIkTpgsSQUCDoBSvQ7FBSFnYn5CcX8MIpsx833DpGEK4PMeje0q/rbQ4P1/gOgvgICGWJsOYkzooFhX+TVGXCXE4EE3E471GadQOhy3EQ=',
+        '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' => '0.01',
+            'subject'      => 'test subject-测试订单',
+        ];
+
+        $alipay = Pay::alipay($this->config)->app($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()`
+    }
+
+    private function getConfig()
+    {
+        return [
+            'alipay' => [
+                'default' => [
+                    // 必填-支付宝分配的 app_id
+                    'app_id' => '2021004155613207',
+                    // 必填-应用私钥 字符串或路径
+                    // 在 https://open.alipay.com/develop/manage 《应用详情->开发设置->接口加签方式》中设置
+                    'app_secret_cert' => 'MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCaUCndAhC4NUmpA/kL7fcs7o/kP044ZezMKUc0f/kh6n78D7TS+EtpJz2LODFXxdNamodyyz+AZh+aM22kPAXRFLWmjont1ODx3pQm2po0YIQxRz+v/4mj7OuZJ6gVF3Bvlr60g8LbFvnyqtG4vjBim/NIDCv0M294o7fRElPdxdf3yxgyzqBaFc7PmMEYVSVhBnlYHU3Hwczf2ylbv9A0g1fTLhaqqnSt5aJ4xETVoqtX0Vvh6GsnecObrgodZ9HD+Dcx70W+qQ/Td2R89PiHKR4d9ZNRu6H6J9OMYxxUvEGcFfvi+c3OT3PCf2X5RS4SD/VFsxwQXmmkye38qiDrAgMBAAECggEAE3EgJSE6fAryseG3QgKETtvrsyUqtL5avEpDF2E8QUKrJxTPgnkX/zKbdWvqA5YAD/1CLXtgD8xOFP5/xN5vGS2TyV1SEW3tvWt+nPqTzR+P6CmC46i9bbLO6Cfv7GBcoSKL+nBTX4kgiqts6urDa9kcKKqn6weD9t4hrayydlFhiXGT+zUtnkZobJIWmzG+ZLjusn/wp4vyQyXQGnjyiEmzCHab/n8hLfPR9d/3mfG/rj/mIJ9630H+mstMTGoZxDKobeC+k5HQpICyY9bbmug7IgZtqHCO0xou8tpinMRmk/wRD/Bg4XIDdAYgGucb0rpRvbI9KxgGpzpGFXFkuQKBgQDdY/eMdrwnH13XQT4l+ZrjEi7fkCTFvmfafJy1G55feFK9k+YmX7UXtcbw/bc59CqjIL/bpkYy1t+0SrB0eywGvMFBD3G3EZQnQmFmHW7bAba3pTcEoVlyhm9Oz9igvbpI1fZmaeqE+9DOVlWwtcLjhpBh/wuHP5KgyfWKBqwrBQKBgQCyb8PgKklTNFS7iHKBKTIx/ES4xZBSej/Q/lLY0ZGc2LTTGn2HxmmbcJIH5fR4+opOGSGsXc/vfp2pGk1yq42rRVVjUG7Y68J2VpIjELQ8SNbSK+4YqS8VI+Kez0m7ZDEWTwxMRbQTiCaBRUwGhjkReLyLrfXmz5Syxaf7rBg/LwKBgQDE4eQCDI2jFSf1B9ZnGyT9DuyUcLHjEUN2cB9EiH09VdnvMhoYwkBgB44WPuu1JEjOrY8xnRsMlz52LX3i+K7chvwuCbgNIBrrFwNbNo2hQlLl2o2lFoBfcuKF6h0yRcfmgjEQPt0Kyo6VEP4/mkTo5oB8Rb5Q1t5lE3XC+9AcqQKBgEJDENkguuQEDecqL2NZegNn69k1vHd0YFhq6TcM8+br7pJqRu1xt+v6LLB0K4n1eACygnewyrPkMAYI93O60zwj3iaoStGRE0DAuzn8TQIKBoQ7vgo4YXyXO+O/lGDbPwNKzYVRaSLLr4jXw/i0RWMAk/vG2QciVNTiY5Qo/0QPAoGANqq2RacHmcevwp3S3iXfHGxb8kfG90aGDtTr9AY965IGmy4ckKEZJ5+XkhH8Yi+YYWyIkTpgsSQUCDoBSvQ7FBSFnYn5CcX8MIpsx833DpGEK4PMeje0q/rbQ4P1/gOgvgICGWJsOYkzooFhX+TVGXCXE4EE3E471GadQOhy3EQ=',
+                    // 必填-应用公钥证书 路径
+                    // 设置应用私钥后,即可下载得到以下3个证书
+                    'app_public_cert_path' => config_path('cert/alipay/appCertPublicKey.crt'),
+                    // 必填-支付宝公钥证书 路径
+                    'alipay_public_cert_path' => config_path('cert/alipay/alipayCertPublicKey_RSA2.crt'),
+                    // 必填-支付宝根证书 路径
+                    'alipay_root_cert_path' => config_path('cert/alipay/alipayRootCert.crt'),
+                    // 回调地址
+                    'return_url' => 'https://xxx.cn/api/pay/alipay/return',
+                    // 通知地址
+                    'notify_url' => 'https://xxx.cn/api/pay/alipay/notify',
+                    // 选填-第三方应用授权token
+                    'app_auth_token' => '',
+                    // 选填-服务商模式下的服务商 id,当 mode 为 Pay::MODE_SERVICE 时使用该参数
+                    'service_provider_id' => '',
+                    // 选填-默认为正常模式。可选为: MODE_NORMAL, MODE_SANDBOX, MODE_SERVICE
+                    'mode' => Pay::MODE_NORMAL,
+                ]
+            ]
+        ];
+    }
+}

+ 87 - 0
app/api/controller/pay/WxpayController.php

@@ -0,0 +1,87 @@
+<?php
+
+namespace app\api\controller\pay;
+
+use Yansongda\Pay\Pay;
+
+class WxpayController
+{
+    protected $config = [
+        'appid' => 'wx089c26eaf96c3d51', // APP APPID
+//        'app_id' => 'wxb3fxxxxxxxxxxx', // 公众号 APPID
+//        'miniapp_id' => 'wxb3fxxxxxxxxxxx', // 小程序 APPID
+        'mch_id' => '1680393367',
+        'key' => 'c451cedbab8058e3502a35c6dacf0919',
+        '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(),
+            'body' => 'subject-测试',
+            'total_fee' => '1',
+        ];
+
+        $pay = Pay::wechat($this->getConfig())->app($order)->send();
+
+        // $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()`
+    }
+
+    private function getConfig()
+    {
+        return [
+            'appid' => 'wx089c26eaf96c3d51', // APP APPID
+            'mch_id' => '1680393367',
+            'key' => 'c451cedbab8058e3502a35c6dacf0919',
+            'notify_url' => 'http://yanda.net.cn/notify.php',
+            'cert_client' => config_path('cert/wxpay/apiclient_cert.pem'), // optional,退款等情况时用到
+            'cert_key' => config_path('cert/wxpay/apiclient_key.pem'),// optional,退款等情况时用到
+            'log' => [ // optional
+                'file' => runtime_path('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。
+        ];
+    }
+}

+ 2 - 1
composer.json

@@ -42,7 +42,8 @@
     "hhink/webman-sms": "^1.0",
     "ldy/payment": "^3.6",
     "intervention/image": "^2.7",
-    "webman/console": "^1.3"
+    "webman/console": "^1.3",
+    "yansongda/pay": "v2.10"
   },
   "suggest": {
     "ext-event": "For better performance. "

+ 25 - 0
config/cert/wxpay/apiclient_cert.pem

@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEMTCCAxmgAwIBAgIUdSyf/ht1qrSM2gua2KVGSeXe3HcwDQYJKoZIhvcNAQEL
+BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
+FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
+Q0EwHhcNMjQwNzA0MDU0NzQ4WhcNMjkwNzAzMDU0NzQ4WjCBijETMBEGA1UEAwwK
+MTY4MDM5MzM2NzEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTYwNAYDVQQL
+DC3ljJfkuqzkuIfmgqbmgqbkuqvlrrblgaXlurfnp5HmioDmnInpmZDlhazlj7gx
+CzAJBgNVBAYTAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBAM4zUzKi5RqARHM570rLQFWAkNBybpNRoppGAflD8cmz
+Rh7IPxt6XtfAoMUCEC5QNgpadxGROleomOxGxLji5LUPXVwD+iqUF49/hI2Datrn
+voKfYqPzB/bZ/M5SSo9rxlgYjBv1/rNNlN8YVGhdQ5SRN3UYER6i7NG2XmBrqjqu
+MpQrCAX9m1W+j7YD+A+Xviys8kMDdzVUzVxvvJCEnMiYftkEYWQjkct3l+HlcBkv
+GDi3u9IKJVMnwgDocEm51BqN1uSvDM8063WUFeZV3CQG0xm+PHsl7bQmw1neJjPd
+ioCziqZRKvhjYAF0l7NnLLMx6I/y3XwSDmjhFJfBOTECAwEAAaOBuTCBtjAJBgNV
+HRMEAjAAMAsGA1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGEaHR0
+cDovL2V2Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIw
+RTUwREJDMDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFCNjU0
+MjJFMTJCMjdBOUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEBCwUA
+A4IBAQCHLVJ/xfao87AItqpPQW6E5iy4I+tvfrt9WKAcJzRw+4cL4c72md5/kAip
+lQl1bffL4VC/rI8AmEg8ngy2GtBaX+D3CVOQ/ieYC4KX77JToLQrO2CjmxrYzA2P
+pbH6NkaFq8DhQBu2rWXEK1GuHq8UBNGjY266SE2VQ9k6DZI4taIVvpWy8b/DTzEd
+jD4hCHANHIMWpDPt5Qckoze7Xs5CyCbKaWfReHsCQD3RIHapYAeGAabu2PgSX+by
+XzLuMzXiCWKFzPmPtNjZX4ipbmAzNMmgSDEhKjGctkd0sh/BTgVZ4j67cX8ffwJf
+U0VVVEgcqYdAodvATB1ZwJYj35qx
+-----END CERTIFICATE-----

+ 28 - 0
config/cert/wxpay/apiclient_key.pem

@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDOM1MyouUagERz
+Oe9Ky0BVgJDQcm6TUaKaRgH5Q/HJs0YeyD8bel7XwKDFAhAuUDYKWncRkTpXqJjs
+RsS44uS1D11cA/oqlBePf4SNg2ra576Cn2Kj8wf22fzOUkqPa8ZYGIwb9f6zTZTf
+GFRoXUOUkTd1GBEeouzRtl5ga6o6rjKUKwgF/ZtVvo+2A/gPl74srPJDA3c1VM1c
+b7yQhJzImH7ZBGFkI5HLd5fh5XAZLxg4t7vSCiVTJ8IA6HBJudQajdbkrwzPNOt1
+lBXmVdwkBtMZvjx7Je20JsNZ3iYz3YqAs4qmUSr4Y2ABdJezZyyzMeiP8t18Eg5o
+4RSXwTkxAgMBAAECggEAPneSBs8OdP7Svc2ZTqFQdhaiyGNCWGLszavTwT3yK9ah
+sYWciKiDvvzeN5CucjlehbhuReYnNJMg8MNnqVMjUi67a7rQuMFwecp5z502a+a0
+8kFy0pQ3n3LegWqwp85QojOdjoLxjEQ+i2+FcrB+Xq23jUOjPBLDh6yl3rP/OBMu
+AjUpiUd25uMWVzz04OgLt98FNaWW4TMdKWyYUdG84oIMRu6hIY3qL/fzfgMzQrtT
+TLc0XoC2AOYyt6UoU/bS3KFCRTIDxObSJ4IDrinG9WU/Vpa12zn3onmdBsZYLWDZ
+KrZxE/lgcUjdPiPzYxZATsi5HZbrC2PZg7cQM79DIQKBgQD7DNaWWozS4O1eVRNx
+Vwrdf+bVZ+6/7nsbAs1n7kVvuf5kIyVbM9zhdzg5G0nC6OlS8lpcGXG/KCVhv/Ob
+sJKDNlJxTmHfQLRD0tyUirVVjmhvpo/lfwKcR/bm3cliIB7FnKlwz1Fv4oL89lDU
+/ycImTwqV55AokYkiWxM3pF95QKBgQDSRBxOaVUViGqXZI8YwvTzcydE2EJ7uLSi
+YVkRyQgVTYoAmZ8RiHVebVZ1KRWjd57/YBGyerch1YtePoisxEhQdc4e0XtaLy56
+1lEi60ZNzzODMod76h0/KKg/TN71mBpjQxmaNVowzOD/vuuFwMnOeJbrwhCtoovr
+1qEPRny5XQKBgEC4E43ZNBqdD7RU3FlIpi1p7pkvXPYvxZ61/zv+yfm+ih1IjjXP
+ze517JGUPlS39IaEodTCXnd4IwLrGCMXxv16gJBjM4n5RT+C2YiVpZ+zwaqe1tPE
+BWlCiB0GKgdY3nX1KB1D5OuiCkCqQzZVvLtTvZXw1oQ1ET4UC05ZxkodAoGBAM9c
+zG2oA3kQ584WJelNmzTcQ8XpYOeS6NGbH7Qihg48QfUFi5JG+Tj+q10v/18PAYbo
+v4s86o47gw6WrUN077wp8fUCspvmG/iYk7vUO6lQxoSEuIjEAcPf3M1QijG6p4tt
+CTrDkwa9hsexCaUG0/8DfhNTeA9FVqhnKr9dzHMhAoGBAIh6Nl9HhiDEtWgdc+rS
+918ZjUMjrTWpvmp/TBydCTqglPiTaRhB+uB+XWctycLFEGBy3Xt/oOxH00KGUchz
+Y84xv+UzB0G7UmLB62JRIalMaZPlQvwmgNhcEiua7c6/DtZvFByT2HE6aqo9EkDZ
+5+rgufGxqyE+9zAyPI22muqS
+-----END PRIVATE KEY-----

+ 8 - 1
route/api.php

@@ -1,3 +1,10 @@
 <?php
 
-use Webman\Route;
+use Webman\Route;
+
+Route::group('/api',function (){
+    Route::group('/pay',function (){
+        Route::post('/alipay',[\app\api\controller\pay\AlipayController::class,'index']);
+        Route::post('/wxpay',[\app\api\controller\pay\WxpayController::class,'index']);
+    });
+});