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

OSCHINA-MIRROR/jialeo-payment

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Wechatpay.md 7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 03.03.2025 14:20 b8c54e0

Wechatpay Веб-платежи

Конфигурация

$config = array(
    'appid' => '',            // Укажите app id для расширенных вызовов функций
    'appsecret' => '',        // Укажите app secret для расширенных вызовов функций
    'mchid' => '',            // ID мерчанта
    'key' => '',              // Укажите ключ, который вы установили
    'sslcert_path' => '/ваш/путь/cert/wechatpay/apiclient_cert.pem',
    'sslkey_path' => '/ваш/путь/cert/wechatpay/apiclient_key.pem',
    'transfer_rsa_public_path' => '/ваш/путь/cert/wechatpay/rsa_public.pem',   // Путь к сертификату RSA публичного ключа для корпоративных переводов на банковскую карту
);

Оповещение о платежах в реальном времени

  1. Определение устройства для выбора экземпляров:

Публичный аккаунт

$wechatpay = new \JiaLeo\Payment\Wechatpay\MpPay($config);  

App

$wechatpay = new \JiaLeo\Payment\Wechatpay\AppPay($config);

H5

$wechatpay = new \JiaLeo\Payment\Wechatpay\H5Pay($config);

Native

$wechatpay = new \JiaLeo\Payment\Wechatpay\NativePay($config);

Пример кода:

if ($data['device'] == 'mp') {
	$wechatpay = new \JiaLeo\Payment\Wechatpay\MpPay($config);
} elseif ($data['device'] == 'app') {
	$wechatpay = new \JiaLeo\Payment\Wechatpay\AppPay($config);
} elseif ($data['device'] == 'h5') {
	$wechatpay = new \JiaLeo\Payment\Wechatpay\H5Pay($config);
} elseif ($data['device'] == 'native') {
    $wechatpay = new \JiaLeo\Payment\Wechatpay\NativePay($config);
}

$out_trade_no = date('YmdHis') . rand(10000, 99999);

$pay_data = [
	'body' => $data['body'], // Описание товара
	'attach' => $wechatpay->setPassbackParams($return_params), // Данные от продавца
	'out_trade_no' => $out_trade_no, // Номер заказа мерчанта
	'total_fee' => $data['amount'], // Сумма платежа (единица измерения: центы)
	'openid' => $openid,
	'notify_url' => 'http://domain/api/wechatpay/notifies/' . $data['device'] // Адрес обратного вызова сервера
];

$url = $wechatpay->handle($pay_data);

Метод MpPay и AppPay возвращают URL с подписью, которую можно передать клиенту.

Метод H5Pay возвращает URL от WeChat, требует дополнительной переадресации и указания адреса перехода после завершения платежа.

Метод NativePay возвращает URL для платежей WeChat, который можно преобразовать в QR-код с помощью сторонней библиотеки.

Обработка оповещений о платежах

Пример кода:

$wechatpay = new \JiaLeo\Payment\Wechatpay\Notify($config);

try {
	// Проверка подписи
	$data = $wechatpay->handle();

	$wechatpay->returnSuccess();
	$result = true;
} catch (\Exception $e) {
	$error_msg = $e->getMessage();
	$wechatpay->returnFailure($error_msg);
}

Возврат средств

Пример кода:

$wechatpay_refund = new \JiaLeo\Payment\Wechatpay\Refund($config);
$out_refund_no = date('YmdHis') . rand(10000, 99999);

// Возврат средств на тот же счет
$refund_data = [
	'out_refund_no' => $out_refund_no, // Номер возврата мерчанта
	'total_fee' => $amount, // Сумма оригинального заказа (единица измерения: центы)
	'refund_fee' => $refund_amount, // Сумма возврата (единица измерения: центы)
	'out_trade_no' => $out_trade_no // Номер заказа мерчанта
];
$wechatpay_refund->handle($refund_data);

Корпоративные переводы

  • Корпоративный перевод на кошелек пользователя

Пример кода:

$config = config('payment.wechatpay.mp');
$payment = new \JiaLeo\Payment\Wechatpay\Transfer($config);
$params = array(
	'partner_trade_no' => time() . rand(10000, 99999), // Номер заказа партнера
	'openid' => 'oErxPsxn6XTQQyFzauQW9qZYtI_k', // openid
	'amount' => 100, // Сумма перевода (единица измерения: центы)
	'desc' => 'Тестовый перевод', // Примечание
	//'check_name' => true // Проверка имени
);
$res = $payment->handle($params);
if (!$res) {
	var_dump($payment->errorCode, $payment->errorCodeDes);
}
var_dump($res);
  • Корпоративный перевод на банковскую карту
  1. Вызов API для получения RSA публичного ключа, запись ключа в локальный файл, допустим, rsa_public.pem
$config = config('payment.wechatpay.che');
$wechatpay = new \JiaLeo\Payment\Wechatpay\Tools($config);
$url = $wechatpay->getPublicKey();
var_dump($url['pub_key']);
  1. Преобразование PKCS#1 в PKCS#8 (WeChat предоставляет ключ в формате PKCS#1, PHP требует PKCS#8)
openssl rsa -RSAPublicKey_in -in <filename> -pubout

Замена содержимого оригинального сертификата

  1. Выполнение
$config = config('payment.wechatpay.che');
$wechatpay = new \JiaLeo\Payment\Wechatpay\Transfer($config);

$data = array(
	'partner_trade_no' => time(),
	'amount' => 100,
	'bank_no' => '62148312XXXXXX',
	'true_name' => 'XXX',
	'bank_code' => '1001',
	'desc' => 'test',
);
var_dump($wechatpay->handleToBank($data));

Красивые подарочные деньги

Обычные подарочные деньги:

$config = config('payment.wechatpay.mp');
$payment = new \JiaLeo\Payment\Wechatpay\RedPack($config);

$params = array(
	'mch_billno' => time() . rand(10000, 99999),
	'send_name' => '汉字科技',
	'openid' => 'oErxPsxn6XTQQyFzauQW9qZYtI_k',
	'wishing' => '汉字科技恭喜发财',
	'act_name' => '汉子科技哈哈',
	'remark' => '备注',
	'total_amount' => 300
);
$res = $payment->sendRedPack($params);

if (!$res) {
	dump($payment->errorCode, $payment->errorCodeDes);
}

dump($res);

Разделенные подарочные деньги:

$config = config('payment.wechatpay.mp');
$payment = new \JiaLeo\Payment\Wechatpay\RedPack($config);

$params = array(
	'mch_billno' => time() . rand(10000, 99999),
	'send_name' => '汉字科技',
	'openid' => 'oErxPsxn6XTQQyFzauQW9qZYtI_k',
	'wishing' => '汉字科技恭喜发财',
	'act_name' => '汉子科技哈哈',
	'remark' => '备注',
	'total_amount' => 300,
	'total_num' => 3
);
$res = $payment->sendGroupRedPack($params);

if (!$res) {
	dump($payment->errorCode, $payment->errorCodeDes);
}

dump($res);

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/jialeo-payment.git
git@api.gitlife.ru:oschina-mirror/jialeo-payment.git
oschina-mirror
jialeo-payment
jialeo-payment
master