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

OSCHINA-MIRROR/iteming-egg-wxpay

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
README.md 7.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 07:48 ce35b7b

В запросе скорее всего текст технической направленности из области разработки и тестирования программного обеспечения. Основной язык текста запроса — китайский.

Перевод текста на русский язык:

egg-wxpay

Введение

NodeJS Egg Framework, WeChat Payment SDK.

Пример WeChat Pay Demo

WeChat Pay NodeJS Demo.

Этапы разработки

1. Импорт расширенных пакетов
1.1 app/extend/util.js (библиотека общих инструментов)
1.2 app/extend/wxpay.js (библиотека WeChat Pay)
2. Добавление зависимостей WeChat Pay в packages.json
"dependencies": {
    "MD5": "^1.2.1",
    "request": "^2.88.0",
    "body-parser": "^1.18.3",
    "xml2js": "^0.4.6"
},
3. Установка зависимостей с помощью команды mpn install
4. В файле, который необходимо использовать, добавьте объявление WeChat Pay app/controller/home.js
// Импортируем плагин WeChat Pay (обратите внимание на путь к плагину и путь к файлу)
const WXPay = require('../extend/wxpay');
const fs = require('fs');
const wxpay = WXPay({
    appid: '公众号ID',
    mch_id: '商户号ID',
    partner_key: '商户密钥(证书密码)',
    pfx: fs.readFileSync('././证书路径.p12'),
});
5. Вызов в методе, который нужно использовать
5.1 Создание оплаты со сканированием кода (не фиксированный QR-код, интерфейс для создания единого заказа)
const result = await wxpay.createUnifiedOrder({
    body: '扫码支付测试', // Описание товара
    out_trade_no: ctx.request.body.orderNum, // Номер заказа
    total_fee: 1, // Общая сумма платежа (единица измерения: юань)
    spbill_create_ip: '192.168.2.210', // IP-адрес оплаты
    notify_url: 'http://mp.ngrok.xiaomiqiu.cn/receive/wxReceive',// Адрес обратного вызова для оплаты
    trade_type: 'NATIVE',// Способ оплаты: оплата со сканированием
});

console.log(result);

ctx.status = 200;
// Обработка события после отправки формы, здесь возвращается содержимое формы
ctx.body = `${JSON.stringify(result)}`;
5.2 Создание оплаты через публичный аккаунт (JSAPI, аналогично оплате через мини-программу)
// Вызов на стороне сервера
const result = await wxpay.getBrandWCPayRequestParams({
    openid: 'om5QFwFZ15e60lUej4uHN5-DGn8Y', // Идентификатор пользователя WeChat
    body: 'Оплата через публичный аккаунт', // Содержание платежа
    detail: 'Оплата через публичный аккаунт',// Содержание платежа
    out_trade_no: ctx.request.body.orderNum, // Номер заказа
    total_fee: 1, // Сумма платежа (единица измерения: юань)
    spbill_create_ip: '192.168.2.210',
    notify_url: 'http://mp.ngrok.xiaomiqiu.cn/receive/wxReceive',// Обратный вызов для оплаты
});

console.log(result);

// Рендеринг статической страницы, имитация отправки формы
await ctx.render('home/jsapiresult', { payargs: `${JSON.stringify(result)}` });


// Параметры вызова веб-страницы (например, nunjucks)
<input id="payargs" type="text" value="{{payargs}}">

<script>
    function jsApiCall() {
        WeixinJSBridge.invoke(
        "getBrandWCPayRequest",
        JSON.parse($("#payargs").val()),
        function (res) {
            if (res.err_msg == "get_brand_wcpay_request:ok")//успех
            {
                window.location.href = "/jsapi?result=success";
            }
            else if (res.err_msg == "get_brand_wcpay_request:fail")//неудача
            {
                $("#msg").text("Оплата не удалась, пожалуйста, попробуйте ещё раз");
            }
            else if (res.err_msg == "get_brand_wcpay_request:cancel")//отмена
            {
                window.history.go(-1);
            }
        });
    }

    if (typeof WeixinJSBridge == "undefined") {
        if (document.addEventListener) {
            document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
        }
        else if (document.attachEvent) {
            document.attachEvent('WeixinJSBridgeReady', jsApiCall);
            document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
        }
    }
    else {
        jsApiCall();
    }
</script>
5.3 Создание оплаты H5 (MWEB)
const result = await wxpay.createOutH5Pay({
    body: 'H5 Оплата теста', // Описание товара
    out_trade_no: ctx.request.body.orderNum, // Номер заказа
    total_fee: 1, // Общая сумма платежа (единица измерения: юань)
    spbill_create_ip: '192.168.2.210', // Платёжный IP-адрес
    notify_url: 'http://mp.ngrok.xiaomiqiu.cn/receive/wxReceive',// Обратный звонок для оплаты
    trade_type: 'NATIVE',// Способ оплаты: оплата со сканированием
});

if (result.return_code == "SUCCESS") {
    // Рендеринг статической страницы, имитирующая отправку формы
    // Здесь необходимо добавить путь возврата после завершения или отмены оплаты
    result.mweb_url = result.mweb_url + "&redirect_url=" + urlencode("http://mp.ngrok.xiaomiqiu.cn/h5pay")
}

console.log(result);

ctx.status = 200;
// Обработка событий после отправки формы, здесь возвращаются данные формы
ctx.body = `${JSON.stringify(result)}`;
5.4 Запрос результатов оплаты по номеру заказа продавца
const result = await wxpay.queryOrder({
    out_trade_no: ctx.request.body.orderNum, // Номер заказа
});

ctx.status = 200;
// Обработка событий после отправки формы, здесь возвращаются данные формы
ctx.body = `${JSON.stringify(result)}`;
5.5 Возврат средств по номеру заказа продавца
wxpay.refundOrder({
    out_trade_no: 'API2019010100001003',
    total_fee: 1,
    refund_fee: 1,
    notify_url: 'http://mp.ngrok.xiaomiqiu.cn/receive/wxRefund',
    out_refund_no: 'RFD2019010100001002'
}, function(err, result){
    console.log(result);
});

6 Функции обратного вызова

6.1 Обработка обратных вызовов от WeChat на сервере (express в качестве примера)
// 6.1 Асинхронное уведомление о результатах оплаты
app.use('/receive/wxReceive',

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

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

1
https://api.gitlife.ru/oschina-mirror/iteming-egg-wxpay.git
git@api.gitlife.ru:oschina-mirror/iteming-egg-wxpay.git
oschina-mirror
iteming-egg-wxpay
iteming-egg-wxpay
master