Использование документа Payment
Разработка 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 при обнаружении ошибок; предоставляется платная техническая поддержка.
Некоторые важные обновления и информация о проекте, связанные с третьей стороной платежей.
Официальное объявление: https://pay.weixin.qq.com/index.php/public/cms/content_detail?lang=zh&id=56602
После перестройки проект несовместим с версией до 4.x, обратите внимание!
Цель 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. Указанные данные представляют собой запрос на оплату с использованием различных платёжных каналов и возможностей.
В запросе присутствуют следующие параметры:
Это неполный список параметров. В запросе также присутствуют поля для запросов на возврат средств, отмену транзакции, закрытие сделки и перевод средств.
Для получения более точного перевода необходимо обратиться к специалисту в области 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 | транзакционный ключ, уникальный внутренний ключ | Да |
Требуется доработка структуры всего кода.
Необходимо дополнить информацию о том, как использовать новую функцию.
Код для платёжной системы распространяется на условиях лицензии MIT (см. LICENSE).
[ico-license]: изображение иконки лицензии [ico-version-dev]: изображение иконки версии разработки [ico-downloads-monthly]: изображение иконки ежемесячных загрузок [link-packagist]: ссылка на Packagist [link-downloads]: ссылка на статистику загрузок Packagist [starchart-cc]: ссылка на Starchart
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )