1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/china_wangyu-pay

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Платежи

Scrutinizer Code Quality Linter Status Tester Status Latest Stable Version Total Downloads Latest Unstable Version License

Текущая ветка master содержит разрабатываемую версию v3. Если вы отправляете PR, пожалуйста, отправляйте на ветку v2.

Этот документ относится к версии v2.x. Если вы ищете документацию для версии v1.x, перейдите по ссылке.

Внимание: версии v1.x и v2.x несовместимы.

После нескольких разработок платежей для Alipay и WeChat Pay, естественно возникло отвращение, и снова появилась лень, хотелось найти готовое решение на вебе, но ничего подходящего не нашлось, либо слишком сложно было понять, либо структура файлов была слишком запутанной, пришлось взяться за дело самому.

!! Пожалуйста, ознакомьтесь с документацией Alipay/WeChat Pay !! Пожалуйста, обладайте базовыми навыками отладки !!

Пожалуйста, ставьте звезды, отправляйте PR!расширение для Laravel перейдите по ссылке расширение для Yii перейдите по ссылке

QQ общение: 690027516

Особенности

  • Обширная система событий
  • Логичное и понятное именование
  • Скрытие деталей, которые не требуются разработчикам
  • Разработано на основе последних API Alipay и WeChat
  • Высокоуровневые классы, избавляющие от необходимости манипулировать json и xml
  • Соответствует стандартам PSR, что позволяет легко интегрировать с вашим фреймворком
  • Ясная структура файлов, позволяющая легко добавлять новые платежные шлюзы
  • Элегантное использование методов, позволяющее не изучать непонятные имена методов или классов

Запуск окружения

  • PHP 7.0+ (с версии 2.8.0 требуется >= 7.1.3)
  • composer

Для PHP 5 используйте версию v1.x https://github.com/yansongda/pay/tree/v1.x

Поддерживаемые методы оплаты

1. Алипай

  • Платеж на компьютере
  • Платеж на мобильном сайте
  • Платеж в приложении
  • Платеж с использованием карты
  • Платеж с использованием QR-кода
  • Перевод средств на счет
  • Платеж в малом приложении
method описание
web Платеж на компьютере
wap Платеж на мобильном сайте
app Платеж в приложении
pos Платеж с использованием карты
scan Платеж с использованием QR-кода
transfer Перевод средств на счет
mini Платеж в малом приложении
  • Платеж через официальный аккаунт
  • Платеж в малом приложении
  • Платеж через H5
  • Платеж с использованием QR-кода
  • Платеж с использованием карты
  • Платеж в приложении
  • Перевод средств на счет компании
  • Обычный красный пакет
  • Разделенный красный пакет
method описание
mp Платеж через официальный аккаунт
miniapp Платеж в малом приложении
wap Платеж через H5
scan Платеж с использованием QR-кода
pos Платеж с использованием карты
app Платеж в приложении
transfer Перевод средств на счет компании
redpack Обычный красный пакет
groupRedpack Разделенный красный пакет

Поддерживаемые методы

Все шлюзы поддерживают следующие методы

  • find(array/string $order)
    Описание: метод поиска заказа
    Параметры: $order в виде string передает системный номер заказа, соответствующий out_trade_no в Алипай или Вейчжуне; в виде array передает параметры, указанные в официальной документации Алипай или Вейчжун.
    Возврат: при успешном поиске возвращает экземпляр Yansongda\Supports\Collection, доступ к данным сервера можно получить через $collection->xxx или $collection['xxx'].
    Исключения: GatewayException или InvalidSignException- refund(array $order)
    Описание: метод возврата средств
    Параметры: $order в виде массива передает параметры возврата.
    Возврат: при успешном возврате средств возвращает экземпляр Yansongda\Supports\Collection, доступ к данным сервера можно получить через $collection->xxx или $collection['xxx'].
    Исключения: GatewayException или InvalidSignException- cancel(array/string $order)
    Описание: метод отмены заказа
    Параметры: $order в виде string передает системный номер заказа, соответствующий out_trade_no в Alipay или WeChat; в виде array передает параметры, указанные в официальной документации Alipay или WeChat.
    Возврат: при успешной отмене возвращает экземпляр Yansongda\Supports\Collection, доступ к данным сервера можно получить через $collection->xxx или $collection['xxx'].
    Исключения: GatewayException или InvalidSignException- close(array/string $order)
    Описание: Закрытие заказа
    Параметры: При типе $order равном string, передайте системный номер заказа, соответствующий out_trade_no в Alipay или WeChat; при типе array, используйте параметры, указанные в официальной документации Alipay или WeChat.
    Возврат: При успешном закрытии заказа, возвращается экземпляр Yansongda\Supports\Collection, доступ к данным сервера можно получить через $collection->xxx или $collection['xxx'].
    Исключения: GatewayException или InvalidSignException

  • verify()
    Описание: Проверка легальности сообщения, возвращенного сервером
    Возврат: При успешной проверке, возвращается экземпляр Yansongda\Supports\Collection, доступ к данным сервера можно получить через $collection->xxx или $collection['xxx'].
    Исключения: GatewayException или InvalidSignException- PAYMETHOD(array $order)
    Описание: Выполнение платежа; для конкретных имен методов платежа, обратитесь к разделу «Поддерживаемые методы платежа»
    Возврат: При успешном выполнении, возвращается экземпляр Yansongda\Supports\Collection, доступ к данным сервера можно получить через $collection->xxx или $collection['xxx'], или экземпляр Symfony\Component\HttpFoundation\Response, доступ к которому можно получить через return $response->send() (в фреймворке Laravel можно использовать return $response), подробности см. в документации.
    Исключения: GatewayException или InvalidSignException## Установка

composer require yansongda/pay -vvv

Инструкции по использованию

Alipay

<?php

namespace App\Http\Controllers;
``````php
use Yansongda\Pay\Pay;
use Yansongda\Pay\Log;

```markdown
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==',
``````php
        // Используйте публичный сертификат, пожалуйста, настройте два параметра ниже, при этом измените ali_public_key на путь к публичному сертификату支付宝公钥证书路径,如(.  /cert/alipayCertPublicKey_RSA2.crt)
     ];
 }
 ```php
        // 'app_cert_public_key' => '.  /cert/appCertPublicKey.  crt', // путь к публичному ключу сертификата приложения
          // 'alipay_root_cert' => '.  /cert/alipayRootCert.  crt', // путь к корневому сертификату Alipay
          'log' => [ // необязательный параметр
              'file' => '.  /logs/alipay.  log',
              'level' => 'info', // рекомендуется установить уровень логирования на info для продакшена и на debug для разработки
              'type' => 'single', // необязательный параметр, может быть также daily
              'max_file' => 30, // необязательный параметр, действует при type = daily, по умолчанию 30 дней
          ],
          'http' => [ // необязательный параметр
              'timeout' => 5.0,
              'connect_timeout' => 5.0,
              // для более подробной информации о дополнительных параметрах обратитесь к [Guzzle](https://guzzle-cn.  readthedocs.  io/zh_CN/latest/request-options.  html)
          ],
          'mode' => 'dev', // необязательный параметр, установка этого параметра вводит режим песочницы
      ];```php
 <?php
```namespace App\Http\Controllers;

use Yansongda\Pay\Pay;
use Yansongda\Pay\Log;

    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
        // Номер транзакции Alipay: $data->trade_no
        // Общая сумма заказа: $data->total_amount
    }

    public function notify()
    {
        $alipay = Pay::alipay($this->config);
    
        try{
            $data = $alipay->verify(); // Да, проверка подписи так проста!

            // Пожалуйста, самостоятельно проверьте состояние транзакции trade_status и другие логические проверки. В уведомлениях от Alipay бизнеса, только когда состояние транзакции равно TRADE_SUCCESS или TRADE_FINISHED, Alipay считает, что покупатель успешно оплатил заказ.
            // 1. Магазин должен проверить, является ли out_trade_no в уведомлении номером заказа, созданным в системе магазина.
            // 2. Проверьте, совпадает ли total_amount с фактической суммой заказа (той суммой, которая была указана при создании заказа).
            // 3. Проверьте, соответствует ли seller_id (или seller_email) продавцу, связанному с этим заказом (иногда у одного продавца может быть несколько seller_id/seller_email).
            // 4. Проверьте, соответствует ли app_id текущему магазину.
            // 5. Другие бизнес-логические проверки
    }```markdown
class PayController
{
    protected $config = [
        'appid' => 'wxb3fxxxxxxxxxxx', // APP APPID
        'app_id' => 'wxb3fxxxxxxxxxxx', // Идентификатор приложения публичного аккаунта
        'miniapp_id' => 'wxb3fxxxxxxxxxxx', // Идентификатор приложения мини-чат
        'mch_id' => '14577xxxx',
        'key' => 'mF2suE9sU6Mk1Cxxxxxxxxxxx',
        'notify_url' => 'http://yanda.net.cn/notify.php',
        'cert_client' => './cert/apiclient_cert.pem', // Необязательно, используется при возврате средств
        'cert_key' => './cert/apiclient_key.pem', // Необязательно, используется при возврате средств
        'log' => [ // Необязательно
            'file' => './logs/wechat.log',
            'level' => 'info', // Рекомендуется установить уровень логирования на info для рабочей среды и на debug для среды разработки
            'type' => 'single', // Необязательно, может быть daily.
            'max_file' => 30, // Необязательно, действует при type = daily, по умолчанию 30 дней
        ],
        'http' => [ // Необязательно
            'timeout' => 5.0,
            'connect_timeout' => 5.0,
            // Дополнительные параметры конфигурации см. в [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
        ],
        'mode' => 'dev', // Необязательно, dev/hk; при значении `hk` используется шлюз в Гонконге.
    ];
}

Основной метод

    public function index()
    {
        $order = [
            'out_trade_no' => time(),
            'total_fee' => '1', // **Единица: центы**
            'body' => 'test body - тест',
            'openid' => 'onkVf1FjWS5SBIixxxxxxx',
        ];
    }

        // $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()`
    }

Система событий

Полная документация

Подробная документация

Подробное описание

Ошибки

Если при вызове 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 — указывает на неудачное получение данных от серверов Alipay/Wechat, такие как ошибки параметров, отсутствие отчетов и т.д.

Вклад в код

В связи с ограничениями тестирования и использования, в данном проекте реализованы только шлюзы платежей для Alipay и Wechat Pay.Если у вас есть требования к другим шлюзам платежей или вы заметили необходимость улучшения кода в данном проекте, добро пожаловать к форку и отправке PR!

Поддержка

pay

Лицензия

MIT


Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Данный проект доступен по ссылке: https://github.com/yansongda. *Примечание: в запросе недостаточно информации для определения основного языка текста.* Развернуть Свернуть
PHP
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/china_wangyu-pay.git
git@api.gitlife.ru:oschina-mirror/china_wangyu-pay.git
oschina-mirror
china_wangyu-pay
china_wangyu-pay
master