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

OSCHINA-MIRROR/helei112g-payment

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

Использование документа Payment

Лицензии JetBrains OS

Разработка payment велась с использованием PhpStorm на основе бесплатных лицензий Open Source от JetBrains s.r.o., за что выражаем благодарность.

Количество наблюдателей со временем

![Лицензия на программное обеспечение][ico-license] [![Последняя версия разработки][ico-version-dev]][link-packagist] [![Ежемесячные установки][ico-downloads-monthly]][link-downloads]

Старая версия документа: http://helei112g.github.io/payment

Новая версия документа следующая:

Количество наблюдателей со временем

![Количество наблюдателей со временем][starchart-cc]


Контакты и вознаграждения

Список вознаграждений

Пожалуйста, используйте пример кода при использовании, напрямую отправляйте issue при обнаружении ошибок; предоставляется платная техническая поддержка.

Содержание

Объявление

Некоторые важные обновления и информация о проекте, связанные с третьей стороной платежей.

Важные уведомления

  1. 2019-04: Напоминание: сертификат CA WeChat был обновлён, пожалуйста, обновите проект до последней версии. После 29 мая оплата будет невозможна.

Официальное объявление: https://pay.weixin.qq.com/index.php/public/cms/content_detail?lang=zh&id=56602

План

  1. С 28 марта 2019 года началась перестройка всего проекта, doing... ...

После перестройки проект несовместим с версией до 4.x, обратите внимание!

Проблемы, решаемые с помощью Payment

Цель Payment — упростить процесс чтения документации третьих сторон при интеграции с ними, а также часто возникающие проблемы. Payment разумно моделирует все интерфейсы третьих сторон и предоставляет унифицированный вход, позволяя пользователям сосредоточиться только на собственной бизнес-логике и дизайне платёжной системы.

В настоящее время интегрированы: Alipay, WeChat и большинство функций Taobao. Также приветствуются вклады от всех участников. Руководство по вкладам

Как использовать

Установка

Текущий проект Payment поддерживает только версию PHP > 7.0 и может быть установлен только через composer.

Необходимые расширения PHP:

- ext-curl
- ext-mbstring
- ext-bcmath
- package-Guzzle

Способ установки composer:

Непосредственно в командной строке:

composer require "riverslei/payment:*"

Через файл конфигурации проекта:

"require": {
    "riverslei/payment": "*"
}

Интеграция проекта

После завершения установки вы можете использовать его в своём проекте.

Для всего процесса предоставляется уникальный класс входа \Payment\Client, каждый канал представляет только демонстрацию APP оплаты и уведомления асинхронно/синхронно, как подключиться. Будет подробно объяснено, какие параметры поддерживаются каждым запросом.

Демонстрация APP оплаты

$config = [
    // Конфигурация, см. соответствующий подкаталог для шаблона конфигурации каждого канала
];

// Параметры запроса, полные параметры см. в соответствующей таблице
$payData = [
    'body'         => 'test body',
    'subject'      => 'test subject',
    'trade_no'     => 'trade no',// Реализовать самостоятельно
    'time_expire'  => time() + 600, // Указывает, что оплата должна быть произведена в течение 600 секунд
    'amount'       => '5.52', // Для режима песочницы WeChat требуется фиксированная сумма 3.01
    'return_param' => '123',
    'client_ip'    => isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '127.0.0.1', // Адрес клиента
];``

// Использование
try {
    $client = new \Payment\Client(\Payment\Client::WECHAT, $wxConfig);
    $res    = $client->pay(\Payment\Client::WX_CHANNEL_APP, $payData);
} catch (InvalidArgumentException $e) {
    echo $e->getMessage();
    exit;
} catch (\Payment\Exceptions\GatewayException $e) {
    echo $e->getMessage();
    var_dump($e->getRaw());
    exit;
} catch (\Payment\Exceptions\ClassNotFoundException $e) {
    echo $e->getMessage();
    exit;
} catch (Exception $e) {
    echo $e->getMessage();
    exit;
}

Асинхронные/синхронные уведомления

// Реализуйте свой собственный класс, наследуя этот интерфейс
class TestNotify implements \Payment\Contracts\IPayNotify
{
    /**
     * Обрабатывает собственную бизнес-логику, такую как обновление статуса транзакции, сохранение данных уведомлений и т. д.
     * @param string $channel Канал уведомления, такой как Alipay, WeChat, Taobao
     * @param string $notifyType Тип уведомления, например оплата, возврат
     * @param string $notifyWay Способ уведомления, например асинхронный async, синхронный sync
     * @param array $notifyData Данные уведомления
     * @return bool
     */
    public function handle(
        string $channel,
        string $notifyType,
        string $notifyWay,
        array $notifyData
    ) {
        //var_dump($channel, $notifyType, $notifyWay, $notifyData);exit;
        return true;
    }
}

$config = [
    // Конфигурация, см. соответствующий подкаталог для шаблона конфигурации каждого канала
];

// Экземпляр класса, унаследовавшего интерфейс
$callback = new TestNotify();

try {
    $client = new \Payment\Client(\Payment\Client::ALIPAY, $config);
    $xml = $client->notify($callback);
} catch (InvalidArgumentException $e) {
    echo $e->getMessage();
    exit;
} catch (\Payment\Exceptions\GatewayException $e) {
    echo

*Примечание: В ответе могут быть неточности или ошибки перевода, так как некоторые фрагменты текста были не полностью понятны.* ```
$e->getMessage();
exit;
} catch (\Payment\Exceptions\ClassNotFoundException $e) {
    echo $e->getMessage();
    exit;
} catch (Exception $e) {
     echo $e->getMessage();
     exit;
 }

Из приведённого примера кода можно сделать вывод, что это язык PHP. Указанные данные представляют собой запрос на оплату с использованием различных платёжных каналов и возможностей.

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

  • trade_no — уникальный номер заказа, который присваивается продавцом;
  • amount — сумма платежа в юанях с точностью до двух знаков после запятой;
  • body — описание конкретной транзакции;
  • subject — заголовок или ключевое слово для транзакции;
  • time_expire — крайний срок оплаты;
  • goods_detail — информация о товарах;
  • return_params — общие параметры возврата;
  • extend_params — расширенные параметры;
  • goods_type — тип товара: 0 — виртуальный товар, 1 — физический товар;
  • promo_params — параметры скидок (доступны только после согласования с платёжной системой);
  • royalty_info — информация о распределении платежей;
  • sub_merchant — информация об участвующем посреднике;
  • store_id — идентификатор магазина;
  • qr_pay_mode — режим оплаты с помощью QR-кода: 2 — предваряющий режим;
  • qrcode_width — ширина QR-кода, задаётся продавцом;
  • settle_info — сведения о расчётах;
  • invoice_info — данные счёта;
  • agreement_sign_params — параметры соглашения (используются при оплате по договору);
  • integration_type — способ интеграции запроса;
  • request_from_url — адрес источника запроса.

Это неполный список параметров. В запросе также присутствуют поля для запросов на возврат средств, отмену транзакции, закрытие сделки и перевод средств.

Для получения более точного перевода необходимо обратиться к специалисту в области IT. | Объяснение| Обязательно |---|---| subject | Краткое описание товара, это поле должно быть заполнено строго в соответствии со спецификацией. Подробнее см. Параметры спецификации | Да body | Поле для однотоварной скидки (в настоящее время не доступно) | Да trade_no | Номер заказа внутренней системы продавца, 32 символа, может содержать буквы. Дополнительные сведения см. в Номер заказа продавца| Да amount | Общая сумма заказа, единица измерения — юань | Да client_ip | Необходимо передать правильный IP-адрес пользователя, поддерживаются IPv4 и IPv6. Подробные инструкции см. в разделе Получение указания IP-адреса пользователя | Да device_info | Идентификатор устройства (идентификатор магазина или идентификатор платёжного терминала), обратите внимание: при оплате через веб-страницу или общедоступный аккаунт передаётся «WEB» | Нет return_param | Дополнительные данные, которые передаются без изменений в запросах API и платёжных уведомлениях. Это поле в основном используется для передачи пользовательских данных вместе с заказом | Нет time_expire | Время истечения срока действия заказа, временная метка | Нет goods_tag | Метка товара, параметры функции купонов или скидок, подробные сведения см. в Купоны или скидки | Нет scene_info | Это поле используется для отправки информации о платеже, подробности см. в документации WeChat | Нет

При использовании необходимо самостоятельно создать массив на основе вышеуказанных полей и передать его в соответствующий метод экземпляра \Payment\Client. Далее всё одинаково, повторяться не будем.

Параметры запроса счёта

Поле Объяснение Обязательно
bill_date Дата счёта Да
bill_type ALL (по умолчанию), возвращает информацию обо всех заказах за день. SUCCESS, возвращает успешные заказы за день. REFUND, возвращает возвратные заказы за день. RECHARGE_REFUND, возвращает пополняемые возвратные заказы за день Нет

Запрос на закрытие транзакции

Поле Объяснение Обязательно
trade_no Номер заказа внутренней системы продавца. Требуется 32 символа. Уникален в пределах одного номера продавца. Да

Запрос на отмену транзакции

Поле Объяснение Обязательно
trade_no Номер заказа внутренней системы продавца. Требуется 32 символа. Если указаны transaction_id и trade_no, приоритет отдаётся transaction_id. Да
transaction_id Номер заказа WeChat. Приоритет использования. Да

Запрос на возврат платежа

Поле Объяснение Обязательно
transaction_id Номер заказа WeChat, который возвращается в платёжном уведомлении. Да
trade_no Номер заказа внутренней системы продавца. Требуется 32 символа. Если указаны transaction_id и trade_no, приоритет отдаётся transaction_id. Да
refund_no Внутренний номер возврата платежа продавца. Внутренний номер возврата уникален. Можно использовать один и тот же внутренний номер возврата для многократного запроса на возврат. Да
total_fee Общая сумма заказа, единица измерения — юань. Да
refund_fee Сумма возврата, единица измерения — юань. Да
refund_desc Если продавец передаёт, будет отображаться в сообщении о возврате. Нет
refund_account Только для старых финансовых потоков. Нет

Запрос на запрос возврата платежа

Поле Объяснение Обязательно
transaction_id Приоритет запроса: refund_id > refund_no > transaction_id > trade_no. Да
trade_no Номер заказа внутренней системы продавца. Требуется 32 символа. Да
refund_no Внутренний номер возврата платежа продавца. Внутренний номер возврата уникален. Да
refund_id Номер возврата, созданный WeChat, возвращается в запросе на возврат. Да
offset Смещение, можно использовать, когда количество частичных возвратов превышает 10, чтобы указать начальную запись возвращаемого результата. Нет

Запрос счёта финансов

Поле Объяснение Обязательно
bill_date Дата загрузки счёта, формат: 20140603 Да
bill_type Тип счёта: Basic — основной счёт. Operation — операционный счёт. Fees — счёт операционных издержек. Да

Платёжный запрос

Поле Объяснение Обязательно
transaction_id Рекомендуется использовать номер заказа WeChat. Да
trade_no Номер заказа внутренней системы продавца. Требуется 32 символа. Уникальный в пределах одного номера продавца. Да

Запрос оплаты на счёт мобильного телефона

Поле Объяснение Обязательно
channel Канал оплаты: bank — оплата на банковский счёт; account — оплата на счёт. Да
device_info Идентификатор устройства, назначенный WeChat. Нет
trans_no Номер заказа продавца, должен быть уникальным (только буквы или цифры, без других символов). Да
openid Идентификатор пользователя в приложении продавца. Да
check_name NO_CHECK — не проверять настоящее имя. FORCE_CHECK — принудительная проверка настоящего имени. Да
re_user_name Настоящее имя получателя платежа. При установке check_name на FORCE_CHECK необходимо указать настоящее имя. Да
amount Сумма платежа, единица измерения — юани. Да
desc Описание платежа, обязательно. Обратите внимание: в описании могут быть заменены чувствительные слова символом *. Да
client_ip Этот IP-адрес не связан с IP-адресом в белом списке платёжной платформы продавца. Этот IP-адрес может быть IP-адресом пользователя или сервера. Да

Запроса оплаты на банковский счёт

Поле Объяснение Обязательно
channel Канал оплаты: bank — оплата на банковский счёт; account — оплата на счёт. Да
trans_no Номер заказа продавца, должен быть уникальным (только буквы или цифры, без других символов). Да
enc_bank_no Банковский номер получателя платежа (используется стандартный алгоритм RSA, открытый ключ предоставляется WeChat). Да
enc_true_name Имя получателя платежа (использует стандартный алгоритм RSA, открытый ключ предоставляется WeChat). Да
bank_code Код банка, в котором открыт счёт получателя платежа, см. Список кодов банков. Да
amount Сумма платежа, единица измерения — юани. Да
desc Описание платежа, обязательно. Нет

Запрос платежа на счёт мобильного телефона / банковский счёт

Поле Объяснение Обязательно
trans_no Номер заказа продавца, должен быть уникальным (только цифры [0–9] или буквы [A–Z] и [a–z], минимум 8 цифр, максимум 32 цифры). Да
--- ---
time_expire время истечения срока
return_param в случае успешного уведомления о платеже, результат будет возвращён продавцу в исходном виде
body отображается на странице оплаты с помощью сканирования кода; требуется для оплаты через ПК
client_ip IP-адрес клиента, при наличии нескольких адресов используется разделитель «,» (запятая)
sub_mch_id требуется для заказа от вторичного мерчанта
sub_mch_name требуется для заказа от вторичного мерчанта
sub_mch_tp_code требуется для заказа от вторичного мерчанта; должен быть представлен цифрами или буквами
sub_mch_tp_name требуется для заказа от вторичного мерчанта
mode_type по умолчанию не ограничено, разрешено использование WeChat Pay
agr_no номер соглашения
merchant_serial_no серийный номер соглашения, обязательный для открытия соглашения
user_id уникальный идентификатор пользователя для идентификации мерчанта
mobile номер телефона
lon долгота
lat широта
risk_level уровень риска пользователя в системе мерчанта

Параметры запроса открытого ключа

Не требуются параметры, можно использовать напрямую

####Параметры запроса возврата платежа

Параметр Описание Обязательно
date дата заказа мерчанта, дата заказа во время оплаты в формате ггггММдд Да
trade_no номер заказа мерчанта, номер заказа во время оплаты Да
refund_no номер возврата, генерируется мерчантом, в рамках одного заказа может быть только один возврат по одному номеру возврата; может использоваться для предотвращения повторных возвратов Да
refund_fee сумма возврата, формат xxxx.xx, единица измерения — юань Да
reason описание возврата Нет
operator_id номер оператора системы учёта мерчанта, если указан, то будет проведена проверка номера и пароля оператора; если не указан, проверка не проводится Нет

####Параметры запроса заказа

Параметр Объяснение Обязательно
type тип запроса: A — поиск по банковскому номеру заказа; B — поиск по дате заказа и номеру заказа мерчанта Нет
transaction_id банковский номер заказа, тип = A обязателен Да
date дата заказа мерчанта, формат ггггММдд Да
trade_no номер заказа мерчанта, тип = B обязателен Нет
operator_id номер оператора системы учёта мерчанта Нет

####Параметры уже проведённого учёта

Параметр Объяснение Обязательно
mode режим запроса: bank — поиск по банковской дате; mch — поиск по дате мерчанта Да
start_time начальная дата, время в секундах Да
end_time конечная дата, время в секундах Да
operator_id номер оператора системы учёта мерчанта Да
next_key_value передаваемое значение, длина должна быть 0 или 40; при первом запросе указывается «пусто»; при последующих запросах передаётся значение nextKeyValue из ответа на предыдущий запрос Нет

####Параметры поиска возврата платежа

Параметр Объяснение Обязательно
type тип поиска: A — по банковскому номеру возврата платежа; B — по номеру заказа мерчанта и номеру возврата платежа; C — по номеру заказа мерчанта Да
trade_no номер заказа мерчанта Да
date дата заказа мерчанта, время в секундах Да
refund_no номер возврата платежа, максимальная длина 20 символов Да
bank_serial_no банковский номер возврата платежа, максимальная длина 20 символов Да

####Параметры запроса счёта

Параметр Объяснение Обязательно
date дата заказа мерчанта, время в секундах Да
message_key транзакционный ключ, уникальный внутренний ключ Да

Коммерческие предложения

  • Платежи через приложение;
  • H5 платежи;
  • Платёж с помощью сканирования кода на ПК;
  • Оплата с помощью QR-кода;
  • Возврат средств;
  • Запрос транзакции;
  • Запрос возврата средств;
  • Запроc протокола;
  • Отмена протокола;
  • Детализация зачисления средств;
  • Загрузка формы возврата средств;
  • Форма расчёта для продавца;
  • Форма расчёта для банка;
  • Скачивание детализации расчётов;
  • Поиск открытого ключа банка.

Руководство по внесению вклада

Дизайн кода

Требуется доработка структуры всего кода.

Руководство по разработке

Необходимо дополнить информацию о том, как использовать новую функцию.

Документация третьих сторон

Лицензия

Код для платёжной системы распространяется на условиях лицензии MIT (см. LICENSE).

[ico-license]: изображение иконки лицензии [ico-version-dev]: изображение иконки версии разработки [ico-downloads-monthly]: изображение иконки ежемесячных загрузок [link-packagist]: ссылка на Packagist [link-downloads]: ссылка на статистику загрузок Packagist [starchart-cc]: ссылка на Starchart

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

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

Введение

Описание недоступно Развернуть Свернуть
MIT
Отмена

Обновления

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

Участники

все

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

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