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

OSCHINA-MIRROR/leapy-unionpay

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

Статус безопасности

Пакет для разработки UnionPay Mini Program

Неофициальный пакет для разработки UnionPay Mini Program, поддерживающий импорт через Composer. Все относящиеся к Mini Program и платежам API были полностью обновлены.

Адрес на Gitee https://gitee.com/leapy/unionpay
Адрес на GitHub https://github.com/ileapy/unionpay

cfn/unionpay Mini Program Development Package

Зависимости

PHP >= 5.6

Установка

composer require cfn/unionpay:^1.0.9

Адрес документации (обновлён)

https://e.leapy.cn/## Интерфейсы 🌈| Модуль | Сценарий использования | Интерфейсные методы | |-------------------|-------------------------------|----------------------------------------------------| | MiniProgram | BackendToken | getToken
backendToken — это токен доступа к API серверной части приложения backendToken, который контролирует доступ к серверным API. Время жизни backendToken возвращается через интерфейс и установлено в 7200 секунд. Получив соответствующий базовый токен доступа, сторонний сервис должен хранить его в кэше и регулярно обновлять. | | MiniProgram | BackendToken | getRefreshedToken
Обновление и получение нового токена доступа backendToken | | MiniProgram | AccessToken | getToken
Получение авторизованного токена доступа accessToken, после завершения пользовательской авторизации можно использовать этот токен для вызова соответствующих серверных API с правами доступа. | | MiniProgram | AccessToken | getRefreshedToken
Обновление и получение нового авторизованного токена accessToken | | MiniProgram | FrontToken | getToken
Вызов базового токена доступа upsdk | | MiniProgram | FrontToken | getRefreshedToken
Обновление и получение нового базового токена доступа upsdk | | MiniProgram | User | mobile
После завершения авторизации номера телефона scope.mobile через этот интерфейс можно получить номер телефона пользователя. || MiniProgram
小程序 | User
Получение данных верификации пользователя | auth
После завершения авторизации данных верификации scope.auth через этот интерфейс можно получить данные верификации пользователя. | | MiniProgram
小程序 | User
Получение списка привязанных карт банка (только для банковских mini-program) | card
После завершения авторизации данных карт банка scope.bank через этот интерфейс банковская mini-program может получить список привязанных карт этого банка. | | MiniProgram
小程序 | User
Получение токена авторизации карты | cardToken
После получения токена авторизации карты scope.token через этот интерфейс можно получить токен авторизации указанной карты token. | | MiniProgram
小程序 | User
Запрос состояния пользователя | userStatus
С помощью этого интерфейса можно проверить текущее состояние пользователя || | MiniProgram
小程序 | Contract
Запрос на заключение договора | apply
Незаметное подписывание договора для платежей, когда пользователи подписываются незаметно с областью действия: upapi_contract. После того как пользователи соглашаются на авторизацию, система может использовать этот интерфейс для запуска процесса подписания договора. После завершения подписания можно начать транзакцию через все каналы в соответствии с номером договора. || MiniProgram
小程序 | Contract
Запрос на расторжение договора | relieve
Расторжение договора с помощью номера договора, предоставленного стороной при подключении. Этот интерфейс запускает процесс расторжения договора. | | MiniProgram
小程序 | Contract
Проверка состояния подписания договора | signStatus
Проверка состояния подписания договора между пользователем и стороной подключения. Имеется механизм кэширования на 5 минут, чтобы обеспечить точность результатов запроса. Для получения точной информации рекомендуется делать запросы с интервалом более 5 минут. | | MiniProgram
小程序 | Contract
Проверка наличия незавершенных заказов | unFinishedOrder
Проверка наличия незавершенных заказов у уже подписанных пользователей. | | MiniProgram
小程序 | Message
Отправка шаблонных сообщений в мини-приложение | send
Используя платформу управления мини-приложением, отправка шаблонных сообщений пользователям YunShangPay, таких как уведомления о сервисах или движении средств. | | MiniProgram
小程序 | Secure
Получение номера транзакции для проверки пароля | verifyPwd
Получение номера транзакции для вызова компонента проверки пароля. | | MiniProgram
小程序 | Redpack
Эксклюзивный подарочный чек | given
Сторона подключения дарит эксклюзивный подарочный чек пользователям YunShangPay. || MiniProgram
小程序 | Redpack
Проверка баланса счета стороны подключения (подарочные чеки) | orgQuery
Проверка баланса счета стороны подключения для подарочных чеков. | | MiniProgram
小程序 | Redpack
Проверка баланса эксклюзивного подарочного чека | excQuery
Проверка баланса эксклюзивного подарочного чека пользователя по ID мероприятия. | | MiniProgram
小程序 | Qual
Подарок права участия в лотерее | given
Сторона подключения дарит право участия в лотерее пользователям YunShangPay. | | MiniProgram
小程序 | Qual
Проверка прав участия в лотерее | query
Сторона подключения проверяет права участия в лотерее пользователей YunShangPay. | | MiniProgram
小程序 | Qual
Участие в лотерее | lotto
Сторона подключения дарит (нефиксированную сумму или фиксированную сумму) подарочные чеки или магазинные купоны пользователям YunShangPay через интерфейс подарка прав участия в лотерее. | | MiniProgram
小程序 | Qual
Прямое участие в лотерее | directLotto
Используется для прямого участия в маркетинговых акциях. | | MiniProgram
小程序 | Coupon
Подарок купона со скидкой | given
Интерфейс подарка купона со скидкой, который позволяет стороне подключения дарить купоны пользователям YunShangPay в рамках маркетинговой акции. | | MiniProgram
小程序 | Coupon
Подарочные купоны | query
Запрос на получение информации о подарочных купонах. | | MiniProgram
小程序 | Coupon
Оставшееся количество купонов в акции | quota
Возвращает оставшееся количество купонов в маркетинговой системе. | | MiniProgram
小程序 | Face
Распознавание лиц | image
Получает фотографию лица для распознавания. | | MiniProgram
小程序 | Face
Распознавание лиц | video
Получает видео для распознавания лица. | | MiniProgram
小程序 | Base
Инициализация конфигурации мини-приложения | config
Получает параметры инициализации конфигурации (можно включить режим отладки). | | MiniProgram
小程序 | Crypto
Шифрование/расшифровка | encrypt
3DES шифрование (шифрует информацию). | | MiniProgram
小程序 | Crypto
Шифрование/расшифровка | decrypt
3DES расшифровка (расшифровывает информацию, например, номер телефона). | | MiniProgram
小程序 | Crypto
Шифрование/расшифровка | verify
Проверка подписи (проверяет цифровую подпись с использованием публичного ключа UnionPay). | | MiniProgram
小程序 | Crypto
Шифрование/расшифровка | sign
Подписание (подписывает данные с помощью приватного RSA ключа). | | MiniProgram
小程序 | Notify
Унифицированный обратный вызов мини-приложения | unit
Обрабатывает сообщения уведомлений унифицированно. | | Payment
Мобильный платежный модуль | Order
Конечная операция | pay
Конечная операция — это транзакция, когда владелец карты совершает покупку через сайт продавца внутри страны или за её пределами. |После одобрения сумма покупки сразу отображается в балансе счета держателя карты. (Получение TN-номера).

| Payment
Мобильный платежный модуль | Order
Отмена конечной операции | cancel
Отмена завершенной конечной операции по причине ошибки человека. Продавец может отправить запрос на отмену конечной операции через SDK к платформе UnionPay All-in-One Payments. Отмена должна быть выполнена в тот же день и ту же партию, что и сама конечная операция. Одобренная сумма отмены будет немедленно отражаться в балансе счета держателя карты. Процесс отмены не требует взаимодействия с держателем карты и является фоновым процессом. |

| Payment
Мобильный платежный модуль | Order
Возврат средств | refund
В случае необходимости возврата средств после некоторого времени после проведения конечной операции, продавец может использовать интерфейс возврата средств для возврата денег держателю карты. После получения запроса на возврат и его успешной проверки UnionPay осуществляет возврат средств согласно правилам возврата, направляя деньги обратно на счет держателя карты тем же путем, которым они были отправлены. |

| Payment
Мобильный платежный модуль | Order
Запрос состояния заказа | query
Этот интерфейс позволяет получить информацию обо всех заказах UnionPay, включая платежи, возвраты и отмены конечных операций. |Продавец может активно запрашивать состояние заказа через этот интерфейс для выполнения следующего шага бизнес-логики.

| Оплата
Контроллер мобильной оплаты | Предварительный заказ
Интерфейс предварительного заказа | pay
Интерфейс предварительного заказа используется для получения подтверждения от эмитента карты о разрешении на проведение операции. Обработка направляет предполагаемую сумму покупки как сумму предварительного заказа эмитенту карты. | | Оплата
Контроллер мобильной оплаты | Отмена предварительного заказа
Интерфейс отмены предварительного заказа | cancel
Отменяет успешный POS предварительный заказ после проведения, но до окончательного расчета. Отмена предварительного заказа должна полностью аннулировать первоначальный предварительный заказ или последующий предварительный заказ. | | Оплата
Контроллер мобильной оплаты | Отмена завершения предварительного заказа
Интерфейс отмены завершения предварительного заказа | refund
Отмена завершения предварительного заказа должна полностью аннулировать первоначальное завершение предварительного заказа. После отмены завершения предварительного заказа предварительный заказ остаётся действительным. || Оплата
Контроллер мобильной оплаты | Завершение предварительного заказа
Интерфейс завершения предварительного заказа | finish
Завершение предварительного заказа используется для окончательного расчета после одобрения предварительного заказа. | | Оплата
Контроллер мобильной оплаты | Уведомление
Обработка обратных вызовов | unit
Обработка обратных вызовов для интерфейсов платежа, отмены платежа, возвратов, предварительного заказа, отмены предварительного заказа, завершения предварительного заказа и отмены завершения предварительного заказа. | | Оплата
Контроллер мобильной оплаты | Подпись
Добавление подписи и проверка подписи | validate
Проверка подписи возвращаемых данных | | Оплата
Контроллер мобильной оплаты | Подпись
Добавление подписи и проверка подписи | sign
Добавление подписи к отправляемым данным | | Оплата
Контроллер мобильной оплаты | Файл
Интерфейсы транзакций с файлами | download
Магазин может использовать этот интерфейс для получения файлов сверки счетов. | | Оплата
Контроллер мобильной оплаты | Файл
Метод сохранения файла | save
Сохранение полученного файла сверки счетов || Оплата
Контроллер мобильной оплаты | Файл
Интерфейс запроса обновления публичного ключа шифрования UnionPay (этот интерфейс временно недоступен, нет подробной документации от UnionPay) | updatePublicKey
Магазины регулярно (раз в день) запрашивают информацию о публичном ключе шифрования у системы полнокомплексных услуг UnionPay. В период обновления сертификата публичного ключа шифрования система полнокомплексных услуг UnionPay поддерживает совместное использование нового и старого сертификатов. Новый и старый сертификаты используются параллельно в течение одного месяца. Система полнокомплексных услуг UnionPay возвращает магазину новый сертификат публичного ключа шифрования, который заменяет локальный сертификат на сервере магазина. |

Пример### Получение BackendToken:

<?php
/**
 * User: cfn <cfn@leapy.cn>
 * Datetime: 2021/8/15 22:34
 * Copyright: php
 */

use unionpay\Factory;

$options = [
    'appid' => '*********', // приложение ID
    'secret' => '*********', // секрет
    'symmetricKey' => '*********', // симметричный ключ
    'merId' => '*********', // номер магазина
    'signCertPath' => '*********', // путь до сертификата подписи pfx конец
    'signCertPwd' => '*********', // пароль сертификата подписи
    'encryptCertPath' => '*********', // путь до сертификата шифрования cer конец
    'debug' => false // режим отладки
];

$app = Factory::miniProgram($options);

$backendToken = $app->backend_token->getToken(false);

print_r($backendToken);

// Вывод:
// Array
// (
//     [backendToken] => GLnIGxENS6eDke7hvrZVjQ==
//     [expiresIn] => 7200
// )

Получение AccessToken:

$accessToken = $app->access_token->getToken('DD8jVkc1TwaCSohdazL8+w==', false);

print_r($accessToken);

// Вывод
// Array
// (
//     [expiresIn] => 3600
//     [unionId] => 77e5ad3128eade6dd1222fbf722a7a1a7becfe9d715ace8841d429d29a87a700
//     [openId] => YbknmZra+VRPee76j+IVFeQHQ0vQ3pAZHVaCw7ovJQk/jTof+GMd6DSDRQAf/gaf
//     [scope] => upapi_mobile
//     [accessToken] => J39i0JZlD8uLxF3uEM6DzynLYJatTaSOmYah1ybVTnYy3dq7lTZzaLI1c/fJbQ+k+0eRdGj9fcx4BFtBbqu5VN/wAbP2aodWmuHQt5vKkMg=
//     [refreshToken] => DACgw7edTz29xCx9lcjwhw==
// )

Получение FrontToken:

$frontToken = $app->front_token->getToken();

print_r($frontToken);

// Вывод
// Array
// (
//     [expiresIn] => 7200
//     [frontToken] => YO1p4AFJRCy0TLZMu4MNHw==
// )

Получение зашифрованной строки мобильного телефона:```php

// Разбор параметров //* @param string $code Код авторизации пользователя или тихий способ получения доступа, обязательный параметр при передаче openId, но не является обязательным //* @param string $openId Уникальный идентификатор пользователя, обязательный параметр при передаче code, но не является обязательным //* @param bool $decrypt Расшифровка возвращаемого значения, не является обязательным


Здесь все необходимые изменения были сделаны, чтобы текст был более понятен и корректен с точки зрения грамматики и стилистики.```md
## Получение номера мобильного телефона:

```php
print_r($mobile);

// Вывод
// Array
// (
//     [mobile] => Bth5XXdhUQIQLYXOcAreTQ==
// )

Расшифровка номера мобильного телефона:

$mobile = $app->crypto->decrypt('Bth5XXdhUQIQLYXOcAreTQ==');

var_dump($mobile);

// Вывод
// string(11) "1**********"

Уведомление о сообщении в маленьком приложении:

// По умолчанию автоматическая проверка подписи, второй параметр установите в false для отключения автоматической проверки подписи, можно самостоятельно проверять подпись, обратите внимание, что при неудачной проверке подписи будет выброшено исключение
$response = $app->notify->unit(function ($message) use ($app){
    // Самостоятельная проверка подписи
    $res = $app->crypto->verify($_message);
    if ($res) {
        // Проверка подписи успешна
        echo "Проверка подписи успешна";
    } else {
        // Проверка подписи неудачна
        echo "Проверка подписи неудачна";
    }
}, false);

$response->send();

Получение TN-номера для платежа:

<?php
/**
 * User: cfn <cfn@leapy.cn>
 * Datetime: 2021/8/15 22:34
 * Copyright: php
 */

use unionpay\Factory;
```\$\$options = [
    'appid' => '*********', // идентификатор приложения
    'secret' => '*********', // секретный ключ
    'symmetricKey' => '*********', // симметричный ключ
    'merId' => '*********', // идентификатор мерча
    'signCertPath' => '*********', // путь до сертификата подписи pfx
    'signCertPwd' => '*********', // пароль сертификата подписи
    'encryptCertPath' => '*********', // путь до сертификата шифрования cer
    'debug' => False // режим отладки
];```php
$app = Factory::payment($options);

// txnAmt - сумма платежа (центы), orderId - уникальный номер заказа мерча
$data = $app->order->pay(['txnAmt' => 1, 'orderId' => date('YmdHis') . rand(1000, 9999)]);

// Проверка подписи возвращаемого ответа
if ($app->signature->validate($data)) {
    // TODO: проверка подписи успешна
}

В данном примере исправлены знаки препинания и добавлены пробелы между словами. Также заменено словестное описание чисел на числовое значение.```php print_r($data);

// Array
// (
//     [bizType] => 000201
//     [txnSubType] => 01
//     [orderId] => **************
//     [txnType] => 01
//     [encoding] => utf-8
//     [version] => 5.1.0
//     [accessType] => 0
//     [txnTime] => **************
//     [respMsg] => Success[0000000]
//     [merId] => **************
//     [tn] => **************
//     [signMethod] => 01
//     [respCode] => 00
//     [signPubKeyCert] => -----BEGIN CERTIFICATE-----
// MIIEKzCCAxOgAwIBAgIFEpVGRCEwDQYJKoZIhvcNAQEFBQAwITELMAkGA1UEBhMC
// Q04xEjAQBgNVBAoTCUNGQ0EgT0NBMTAeFw0yMDA3MTYwOTM4MzRaFw0yNTA3MTYw
// OTM4MzRaMIGWMQswCQYDVQQGEwJjbjESMBAGA1UEChMJQ0ZDQSBPQ0ExMRYwFAYD
// VQQLEw1Mb2NhbCBSQSBPQ0ExMRQwEgYDVQQLEwtFbnRlcnByaXNlczEFFMEMGA1UE
// Aww8MDQxQDgzMTAwMDAwMDAwODMwNDBA5Lit5Zu96ZO26IGU6IKh5Lu95pyJ6ZmQ
// 5YWs5Y+4QDAwMDE2NDk0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
// r50XGgVgM+8NnK3fDoMkqy0E+KcnnA6lQflB0Oet1zemVIzzn+76tPS0vV02OcpV
// u9dPt5iq83pMKBLY9isUuyRUWz8fn8Z7o3KvBoCRK4edtui/ihUt5vysJ920s8aG
// CbBRAdRmdIa44ha6W61KEJqrhw5iI2QkDK6OgVxs7imXgYiMc5lxLQL+9bRRGbKq
// zCAidolds633dQC58GZCtKIGvnwuDo8GGVTtjci7OU4c+54vtss2aDnE4QfLY4OY
// 1y+YXqy0D8Pax9T8ZnX7op8rCcO7FyH+0xgYA6gGnFlE3puiqxCFXCD7QI0np/bA
// XuZ6tIoBrqKGvsUobVO3swIDAQABo4HzMIHwMB8GA1UdIwQYMBaAFNHb6YiC5d0a
// j0yqAIy+fPKrG/bZMEgGA1UdIARBMD8wPQYIYIEchu8qAQEwMTAvBggrBgEFBQcC
// ARYjaHR0cDovL3d3dy5jZmNhLmNvbS5jbi91cy91cy0xNC5odG0wOAYDVR0fBDEw
// LzAtoCugKYYnaHR0cDovL2NybC5jZmNhLmNvbS5jbi9SU0EvY3JsMjQ5NjMuY3Js
// MAsGA1UdDwQEAwID6DAdBgNVHQ4EFgQUQP9Yqy8KJGuiHVVGrE1k+OryQyYwHQYD
// VR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMA0GCSqGSIb3DQEBBQUAA4IBAQBk
// OfvkzBq1GSgBCED+ETg15xpIz/Zujb9PkgNY0UinywYIjkn6dfluMIk2cNiCOMfM
// Rg6LhtFi01Fnn3qwHe2vCEVBPJlazSsFE61tRCBTTWm8p/zfZKI9wGyir5aYBiPC
// TRPgXaQ4cYqSAh1n98a4ONBy2/StBl+TfKvCIoXARUSp12lOVY/aKg+8Jk4MIvEw
// 8WCL98tTVxXe1nWPlpFDS9y0ivMyfYlWkTb6+0gMrYA2nzrfFGS1KZNRBS7p3Bh5
// tdBPIgSd5gLZpAun8d0C3CcRZhcIof9hmxIc9ieQoWas52oVZDzsaGTo9rsTo9nU
// 3N3BThugW+P/koUnIFRG
// -----END CERTIFICATE-----
//     [signature] => fxLxEKV4GGLpvUnYsaCILUh6YyYI/jgwdeh94dGrT75nwGCOnspmB06cuzNj7G47mIR/TJZ0EEafJjaL2gkanVQMk4RfSMWGc+xcj8IYhdprbqZHyy7tbMCIMCDRlz1QKK2+UXXHs+dYDWHwqp3t4ZXpZ/GkmFNCRuExtzCcdotgzLGAc6PhGCKmL0nKC+ekGB48uLsg3lsmSTO08RUk9G32cOxqcFoVjhDJRjeqnccBo16GEjOT8TiyJOqFiG8Jk+E3ZZcYo1JM1FVRzR7TXuVcxEJmdePM3Akmtxa9MsuHMM0YP8YqPwN9Z9PH72fAplsAFPCAwhQrCeNjX6+f9g==
// )
```### Обработка единой обработки платежных возвратов:```php
// По умолчанию автоматическая проверка подписи; если второй параметр установлен как false, то проверка подписи будет выполнена самостоятельно. При этом важно отметить, что при неудачной проверке подписи будет выброшено исключение.
$response = $app->notify->unit(function ($message) use ($app){
    // Самостоятельная проверка подписи
    $res = $app->signature->validate($message);
    if ($res) {
        // Проверка подписи успешна
        echo "Проверка подписи успешна";
    } else {
        // Проверка подписи не удалась
        echo "Проверка подписи не удалась";
    }
}, false);

$response->send();

Группа для технического обмена опытом WeChat Pay Mini Programs

Добавьте меня в WeChat, чтобы присоединиться к группе.

Автор

Электронная почта: cfn@leapy.cn
WeChat: SH-CFN

Поддержка 🌙

Ваша поддержка — наш самый большой мотиватор. Проект принимает любую форму пожертвований, вы также можете звездить проект.

Лицензия

MIT

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

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

Введение

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

Участники

все

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

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