Серия «От нуля к веселью» Платежи через WeChat Практические платежи через ПК Создание интерфейса возврата денег через WeChat Техническое творчество Специальный тренировочный лагерь Этап 1
Серия «От нуля к веселью» Платежи через WeChat Практические платежи через ПК Создание интерфейса возврата денег через WeChat Техническое творчество Специальный тренировочный лагерь Этап 1

1. Предисловие

Вслед за предыдущей статьей об интерфейсе отмены заказа и интерфейсе запроса заказа, эта статья посвящена процессу подачи заявки на возврат. Эта статья слишком длинная, и я буду публиковать ее в несколько этапов (доступен исходный код проекта, мини-программа и ПК).

Ранее мы обновили начало платежей WeChat, безопасность платежей WeChat и практическую базовую структуру WeChat. Это обновление касается фактической конструкции интерфейса ПК для платежей WeChat. Практическая глава разделена на несколько глав, потому что объем кода действительно велик. немного большой.

Введите описание изображения
Введите описание изображения

В этом проекте используется стек технологий

Серверная часть: SpringBoot3.1.x, Mysql8.0, MybatisPlus.

Интерфейс: Vue3, Vite, ElementPlus.

Мини программы: Uniapp, Uview

Просмотр демо-адреса ВЕБ-сторона Мини программа

1. Возврат заказа

Что такое возврат заказа?

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

сцена

Подать заявку на возврат Есть много сцен средств,Вот некоторые распространенные ситуации:

  1. Дефекты товара: потребитель получаетиз Товар поврежден、Дефект или несоответствиеописывать,Может Подать заявку на возврат средствполучить компенсацию или скидки。
  2. Неудовлетворительный сервис: Услуги, приобретенные потребителями, не оправдали их ожиданий, например, плохие впечатления от ужина в ресторане и туристические услуги, которые оказались не так хороши, как ожидалось.
  3. Ошибка заказа: Потребители могут разместить неправильный заказ из-за неправильной эксплуатации или неверной информации, и им придется отменить заказ и подать заявку на возврат средств.
  4. Задержка доставки: Если продавец задерживает доставку заказа, потребители могут подать заявку на возврат средств.
  5. Повторный платеж: Потребители, возможно, дважды заплатили за заказ из-за системных проблем или сбоев сети, и им необходимо подать заявку на возврат средств.
  6. Невозможно оказать услугу: Продавец не может предоставить согласованные услуги, такие как отмена выступления, недоступность отеля и т. д.
  7. непригодный: Купленные товары или услуги не подходят потребителям, например, они приобрели неподходящий для них размер, неподходящее для них программное обеспечение и т. д.
  8. вернуть товар: После того как потребитель приобрел физический товар, он решил вернуть его и получить возмещение.

Вышеуказанное является профессиональным ответом GPT3.5.

думать

думать Требуется в нашей программеизшагПервоначальное формирование

  1. После оплаты мы получим порядковый номер заказа.
  2. По номеру Чтобы запросить статус таблицы журнала платежей в нашей базе данных, платеж должен быть успешным.
  3. Поскольку в настоящее время у нас нет функции входа в систему, мы не знаем, какие заказы кому принадлежат, поэтому нам нужно судить о заказе этого клиента на основе уникального номера.
  4. ‼️ Приложение WeChat Возврат выполнен успешно инициирую запрос на обратный звонок. Это будет обсуждаться позже!!!!!!
думать
думать

Мы все знаем, что после успешного платежа WeChat сообщит нам, что платеж прошел успешно, и будет создана запись транзакции. Если мы нажмем на нее, мы увидим номер заказа транзакции.

Хорошо, давайте проверим, будет ли в документе указан этот номер.

торговля Номер заказа
торговля Номер заказа

Очевидно, мы это получим~ Затем мы сохраним его, когда придет время, и оценим его в комментариях пользователя. Все будет закончено~.

Инструкции по WeChat

Если возврат средств требуется покупателю или продавцу в течение одного года после совершения транзакции, продавец может вернуть сумму платежа покупателю через интерфейс возврата. WeChat Pay выплатит сумму после получения запроса на возврат и его успешной проверки. Верните его на счет покупателя по первоначальному маршруту.

⚠️Внимание

1. Заказы со временем транзакции более одного года не могут быть предъявлены к возврату.

2. Возврат через WeChat Pay поддерживает несколько возвратов за одну транзакцию (не более 50 раз). Для многократного возврата вам необходимо указать номер заказа продавца исходного платежного поручения и установить разные номера заказов на возврат. Общая сумма, запрошенная для возврата, не может превышать сумму заказа. Если вы отправляете заявку повторно после того, как возврат средств не был выполнен, не меняйте номер заказа на возврат. Используйте исходный номер заказа на возврат, предоставленный продавцом.

3. Ограничение частоты ошибок или недействительных запросов: 6qps, то есть не более 6 ненормальных или ошибочных запросов на возврат средств в секунду.

4. Количество частичных возвратов по каждому платежному поручению не может превышать 50 раз.

5. Если для одного и того же пользователя производится несколько возвратов средств, рекомендуется возвращать их разными пакетами, чтобы избежать одновременных возвратов средств, приводящих к сбоям в возврате средств.

6. Возврат интерфейса заявки на возврат представляет собой только статус принятия бизнеса. Чтобы определить, был ли возврат успешным, вам необходимо получить результат через интерфейс запроса на возврат.

7. Ограничение частоты запросов на возврат средств за заказы, сделанные месяц назад, составляет: 5000/мин.

8. Несколько запросов на возврат средств по одному и тому же заказу должны быть разделены 1 минутой.

взаимодействие

Статус возврата меняется следующим образом:

процесс
процесс

Параметры запроса обязательны.

Имя параметра

переменная

Ограничение длины типа

Необходимый

описывать

Номер платежного поручения WeChat

transaction_id

string1, 32

Выберите один

Номер заказа WeChat, соответствующий исходной платежной транзакции тела. Пример значения: 1217752501201407033233368018.

Номер заказа продавца

out_trade_no

string6, 32

Выберите один

Номер заказа продавца, соответствующий исходной платежной транзакции body. Пример значения: 1217752501201407033233368018.

Номер заказа продавца на возврат средств

out_refund_no

string1, 64

да

Номер заказа на возврат в основной системе продавца уникален в системе продавца и может состоять только из цифр, заглавных и строчных букв _-|*@. Несколько запросов на один и тот же номер заказа на возврат допускают только один возврат. Пример значения: 1217752501201407033233368018.

Причина возврата

reason

string1, 64

нет

Заполнять не обязательно

Информация о сумме

amount

object

да

bodyЗаказ Информация о сумме

Сумма возврата

refund

int

да

Сумма возврата в центах может быть только целым числом и не может превышать первоначальную сумму оплаты заказа. Пример значения: 888

Исходная сумма заказа

total

int

да

Общая сумма заказа исходной платежной транзакции в центах может быть только целым числом. Пример значения: 888

2. Переходите к делу

Измените WechatNativeController, чтобы написать интерфейс приложения возврата средств.

Язык кода:java
копировать
/**
     * Подать заявку на возврат средств
     * @param заказ Нет номера заказа
     * @param refundsNo Номер заказа на возврат (Номер транзакции заказа)
     * @param reason Причина возврата
     */
    @PostMapping("/refunds/{orderNo}/{refundsNo}/{reason}")
    public R refunds(@PathVariable String orderNo, @PathVariable String refundsNo, @PathVariable String reason) {
        log.info("Подать заявку на возврат средств");
        wxPayService.refund(orderNo, reason, refundsNo);
        return R.ok();
    }

Измените wxPayService, чтобы создать метод возврата.

Язык кода:java
копировать
    /**
     * Подать заявку на возврат средств
     *
     * @param orderNo   Номер заказа
     * @param reason    Причина возврата
     * @param refundsNo Номер заказа на возврат
     */
    @SneakyThrows
    public void refund(String orderNo, String reason, String refundsNo) {
        // ............
    }

Как упоминалось ранее, вам необходимо проверить наличие и статус заказа, чтобы убедиться, что платеж прошел успешно.

Язык кода:java
копировать
    log.info("Проверка начинается");
    PaymentInfo paymentInfo = paymentInfoService.lambdaQuery().eq(PaymentInfo::getOrderNo, orderNo)
            .eq(PaymentInfo::getTradeState, WxTradeState.SUCCESS.getType()).one();
    if (null == paymentInfo) {
        throw new RuntimeException("Заказ не найден, повторите попытку позже!");
    }

При проверке правильности транзакции «Номер заказаданет», введенной клиентом, я буду судить по последним четырем цифрам.

Язык кода:java
копировать
// Собственный приказ судьи Данетды
String transactionNo = paymentInfo.getTransactionId().substring(paymentInfo.getTransactionId().length() - 4);
        if (!transactionNo.equals(refundsNo)) {
        throw new RuntimeException("Возможно, это не ваш заказ. Пожалуйста, подтвердите транзакцию в уведомлении WeChat после успешной оплаты" заказывайте последние четыре!");
        }

После того, как мы это сделали, нам еще нужно сделать еще кое-что.,Разве нам не нужно записать такую ​​важную ссылку на возврат денег?, я просто разделил их и не заработал денег~

думать
думать

Тогда давайте проверим таблицу записей возврата, упомянутую в предыдущей статье.,Некоторые студенты могут растеряться и поехать туда на прямом автобусе.Глава 3. Создание практической базовой основы для платежей WeChat в серии с нулясредиизсоздавать Упомянутая трехслойная структура

Язык кода:sql
копировать
CREATE TABLE `t_refund_info` (
                                 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'идентификатор платежного поручения',
                                 `order_no` varchar(50) DEFAULT NULL COMMENT 'Номер заказа продавца',
                                 `refund_no` varchar(50) DEFAULT NULL COMMENT 'Номер заказа на возврат средств продавцу',
                                 `refund_id` varchar(50) DEFAULT NULL COMMENT 'Номер платежной системы заказа на возврат',`total_fee` int(11) DEFAULT NULL COMMENT 'Исходная сумма заказа(точка)',`refund` int(11) DEFAULT NULL COMMENT 'Сумма возврата(точка)',                                 `reason` varchar(50) DEFAULT NULL COMMENT 'Причина возврата',
                                 `refund_status` varchar(10) DEFAULT NULL COMMENT «Статус возврата»,
                                 `content_return` text COMMENT 'Подать заявку на возврат средства возвращают параметры',
                                 `content_notify` text COMMENT 'Параметры уведомления о результате возврата',`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT 'создаватьвремя',                                 `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'время обновления',
                                 PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

Как только это будет сделано, мы создадим запись о заказе на возврат и сохраним ее в базе данных.

Измените returnInfoService, чтобы создать метод createRefundByOrderNo.

Язык кода:java
копировать
log.info("создавать запись заказа на возврат");
//Заказ на возврат средств по номеру создателя заказа
        RefundInfo refundsInfo = refundInfoService.createRefundByOrderNo(orderNo, reason);

        log.info("Вызов API возврата");
Введите описание изображения
Введите описание изображения

Обработка логики создания заказа на возврат средств

Язык кода:java
копировать
 // По номеру заказать Создать заказ на возврат средств
 RefundInfo refundInfo = new RefundInfo();
         returnInfo.setOrderNo(orderNo);//Номер заказа
         returnInfo.setRefundNo(OrderNoUtils.getRefundNo());//номер заказа на возврат
         refundInfo.setTotalFee();//Исходная сумма заказа(точка)         refundInfo.setRefund();//Сумма возврата(точка)         refundInfo.setReason(reason);//Причина возврата

Создайте сущность и введите параметры. Нам все еще не хватает суммы заказа. Мы передали параметр номер заказа Итак, давайте подумаем, где это сделать?

Позвоните в службу заказов, чтобы узнать сумму💰

Служба ввода заказов IOC

Язык кода:java
копировать
/**
 * Заказать информационную услугу
 */
private final OrderInfoService orderInfoService;

Инициировать запрос информации о заказе интерфейса

Язык кода:java
копировать
// По номеру заказать Получить информацию о заказе
OrderInfo orderInfo = orderInfoService.lambdaQuery().eq(OrderInfo::getOrderNo, orderNo).one();

Наконец добавлено в базу данных

Язык кода:java
копировать
/**
 * создавать Возвращать деньги Заказ По номеру заказа
 *
 * @param заказ Нет номера заказа
 * @param reason  Причина возврата
 * @return {@link RefundInfo}
 */
public RefundInfo createRefundByOrderNo(String orderNo, String reason) {
        // По номеру заказать Получить информацию о заказе
        OrderInfo orderInfo = orderInfoService.lambdaQuery().eq(OrderInfo::getOrderNo, orderNo).one();

        // По номеру заказать Создать заказ на возврат средств
        RefundInfo refundInfo = new RefundInfo();
        returnInfo.setOrderNo(orderNo);//Номер заказа
        returnInfo.setRefundNo(OrderNoUtils.getRefundNo());//номер заказа на возврат
        refundInfo.setTotalFee(orderInfo.getTotalFee());//Исходная сумма заказа(точка)        refundInfo.setRefund(orderInfo.getTotalFee());//Сумма возврата(точка)        refundInfo.setReason(reason);//Причина возврата

        //Сохраняем заказ на возврат
        baseMapper.insert(refundInfo);

        return refundInfo;
        }

Вызов API возврата

URL-адрес запроса:https://api.mch.weixin.qq.com/v3/refund/domestic/refunds

Метод запроса:POST

Параметры запроса:

Имя параметра

переменная

Ограничение длины типа

Необходимый

описывать

Номер платежного поручения WeChat

transaction_id

string1, 32

Выберите один

Номер заказа WeChat, соответствующий исходной платежной транзакции тела. Пример значения: 1217752501201407033233368018.

Номер заказа продавца

out_trade_no

string6, 32

Выберите один

Номер заказа продавца, соответствующий исходной платежной транзакции body. Пример значения: 1217752501201407033233368018.

Номер заказа продавца на возврат средств

out_refund_no

string1, 64

да

Номер заказа на возврат в основной системе продавца уникален в системе продавца и может состоять только из цифр, заглавных и строчных букв _-|*@. Несколько запросов на один и тот же номер заказа на возврат допускают только один возврат. Пример значения: 1217752501201407033233368018.

Причина возврата

reason

string1, 64

нет

Заполнять не обязательно

Информация о сумме

amount

object

да

bodyЗаказ Информация о сумме

Сумма возврата

refund

int

да

Сумма возврата в центах может быть только целым числом и не может превышать первоначальную сумму оплаты заказа. Пример значения: 888

Исходная сумма заказа

total

int

да

Общая сумма заказа исходной платежной транзакции в центах может быть только целым числом. Пример значения: 888

Запустить предисловие к API

  1. API вызова сборки
  2. Запрашивает параметр сборки
  3. Анализ возвращенных данных ответа
  4. Обновите статус заказа, обновите заказ на возврат и сохраните этот возврат в формате JSON.
  5. В соответствии с ранее упомянутым возвратом средств, WeChat инициирует обработку информации об обратном возврате средств.

WxApiType запрашивает перечисление API. Не забывайте о содержании базовой конструкции проекта.

Язык кода:java
копировать
// Вызов API единого заказа
String url = wxPayConfig.getDomain().concat(WxApiType.DOMESTIC_REFUNDS.getType());
        HttpPost httpPost = new HttpPost(url);

// Параметры тела запроса
        Map<String, Object> paramsMap = new HashMap<>();
        paramsMap.put("out_trade_no", orderNo);//номер заказа
        paramsMap.put("out_refund_no", refundsInfo.getRefundNo());//номер заказа на возврат
        paramsMap.put("reason", reason);//Причина возврата
        paramsMap.put("notify_url", wxPayConfig.getNotifyDomain().concat(WxNotifyType.REFUND_NOTIFY.getType()));//Уведомление о возвратеадрес        Map<String, Object> amountMap = new HashMap<>();
        amountMap.put("refund", refundsInfo.getRefund());// Сумма возврата
        amountMap.put("total", refundsInfo.getTotalFee());// Исходная сумма заказа
        amountMap.put("currency", "CNY");// Возврат валюты
        paramsMap.put("amount", amountMap);

//Преобразуем параметры в строку json
        String jsonParams = JSONUtil.toJsonStr(paramsMap);
        log.info("Параметры запроса ===> {}", jsonParams);

        StringEntity entity = new StringEntity(jsonParams, "utf-8");
        entity.setContentType("application/json");//Устанавливаем формат сообщения запроса
        httpPost.setEntity(entity);//Помещаем сообщение запроса в объект запроса
        httpPost.setHeader("Accept", "application/json");//Установим формат ответного сообщения

После сборки выполнить запрос

Язык кода:java
копировать
// Завершите подпись и выполните запрос, а также завершите проверку подписи.

try (CloseableHttpResponse response = wxPayClient.execute(httpPost)) {
        //Разбираем результаты ответа
        JSONObject resultMap = buildBodyParams(response, JSONObject.class);
        log.info("Результат возврата возврата ===> {}", resultMap);
        // Обновить статус заказа
        orderInfoService.lambdaUpdate().eq(OrderInfo::getOrderNo, orderNo).set(OrderInfo::getOrderStatus, OrderStatus.REFUND_PROCESSING.getType()).update();
        // Обновить заказ на возврат средств
        refundInfoService.updateRefund(resultMap);

        }

Исправлять refundInfoService создавать updateRefund Способ сохранить важную информацию об этом ответе на возврат средств.

Параметры возврата возврата:

Введите описание изображения
Введите описание изображения

обновить логику

  1. по нашему мнениюсоздаватьиз Возвращать деньги单из Номер заказа на возвраткак условие
  2. Заполните соответствующие поля параметров базы данных
  3. Определить токданетОтвет возвращен для возвратаНетдаВозврат обратного звонкаизпараметры ответа
  4. Выполнить оператор обновления

Для начала поговорим о выпуске серийного номера три.

Подать заявку на возврат средств
Подать заявку на возврат средств

Может Видеть Подать заявку на возврат средствинтерфейс возвращаетизполе статуса ответада status

Возврат обратного звонка
Возврат обратного звонка

Может ВидетьВозврат обратного звонкаинтерфейс возвращаетизполе статуса ответада refund_status

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

Полная логика обработки

Язык кода:java
копировать
/**
 * Обновить заказ на возврат средств
 *
 * @param resultMap Результат ответа на возврат
 */
public void updateRefund(JSONObject resultMap) {

        // Заказ на возврат по номеру заказа на возврат Исправлять
        QueryWrapper<RefundInfo> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("refund_no", resultMap.getStr("out_refund_no"));

        // Установите поля, которые вы хотите редактировать
        RefundInfo refundInfo = new RefundInfo();

        returnInfo.setRefundId(resultMap.getStr("refund_id"));//Номер платежа WeChat заказа на возврат

        // Запросить возврат средств и Подать заявку на возврат средствсерединаиз Возвращаемые параметры
        if (resultMap.get("status") != null) {
        RefundInfo.setRefundStatus(resultMap.getStr("status"));//Статус возврата
        returnInfo.setContentReturn(resultMap.toString());//сохраняем все результаты ответа в поле содержимого базы данных
        }

        // Параметры обратного вызова в обратном вызове возврата
        if (resultMap.get("refund_status") != null) {
        RefundInfo.setRefundStatus(resultMap.getStr("refund_status"));//Статус возврата
        returnInfo.setContentNotify(resultMap.toString());//сохраняем все результаты ответа в поле содержимого базы данных
        }

        //Обновить заказ на возврат средств
        baseMapper.update(refundInfo, queryWrapper);
        }

3. Тест

проникновение в интранет

Откройте скорлупу арахиса или другие продукты, чтобы получить заказы на обновление обратного вызова об успешном платеже.

Введите описание изображения
Введите описание изображения

Выполнить заказ

Введите описание изображения
Введите описание изображения

Создать QR-код

копироватьcodeUrlпараметр Открытькорм https://cli.im/url Сканируйте QR-код для оплаты!

img
img

После успешной оплаты перейдите к уведомлению о платеже WeChat, чтобы проверить номер нашего заказа на транзакцию.

Введите описание изображения
Введите описание изображения

Вызов интерфейса приложения возврата

Объяснение интерфейса в спокойном стиле

/api/wx-pay/native/refunds/{orderNo}/{refundsNo}/{reason}

заказ Нет номера заказа

Возврат Нет Номер заказа транзакции. В настоящее время в нашей программе необходимы только последние четыре цифры.

Причина Причина возврата (необязательно)

Введите описание изображения
Введите описание изображения

Возврат выполнен успешно

Введите описание изображения
Введите описание изображения
Введите описание изображения
Введите описание изображения

Это еще не конец ~ Ранее мы упоминали об обратном вызове возврата. На данный момент возврат средств поступил на счет пользователя, а данные заказа, соответствующие нашей собственной базе данных, еще не обновлены.

4. API уведомления о результате возврата

После изменения статуса возврата WeChat отправит продавцу соответствующие результаты возврата.

Уведомление:

В фоновом режиме уведомления взаимодействия,Если ответ, полученный WeChat, не является успешным или истекло время ожидания,WeChat считает, что уведомление не удалось отправить,WeChat будет регулярно повторно инициировать уведомления с помощью определенных стратегий.,Максимизируйте вероятность успеха уведомлений,Однако WeChat не гарантирует, что уведомление в конечном итоге будет успешным.

• Одно и то же уведомление может быть отправлено в торговую систему несколько раз. Торговые системы должны иметь возможность правильно обрабатывать повторяющиеся уведомления. рекомендоватьизупражнятьсяда,Когда торговая система получает уведомление и обрабатывает его,Сначала проверьте статус соответствующих бизнес-данных.,И определить, что уведомление данет обработано. если не обработано,затем обработать еще раз, если он был обработан;,Результат будет возвращен как успех. Перед проверкой статуса и обработкой бизнес-данных,Используйте блокировки данных для управления параллелизмом,Чтобы избежать путаницы данных, вызванной повторным входом функции.

• Если обратный вызов со стороны WeChat не получен после всех частот уведомлений. Продавцам следует вызвать интерфейс запроса заказа, чтобы подтвердить статус заказа.

Специальное напоминание:Пара торговых систем ВВключить уведомления о результатахиз Содержимое должно быть подписано для проверки.,И убедитесь, что информация в уведомлении соответствует информации на стороне продавца.,Предотвратите «фальшивые уведомления» об утечке данных,причинение финансовых потерь.

Описание интерфейса

Метод запроса:POST

URL-адрес запроса:ссылкадапроходить Подать заявку на возврат средств Обозначение интерфейсаизnotify_url,Должен быть протокол https. Если ссылка недоступна,Продавцы не смогут получать уведомления WeChat. URL-адрес уведомления должен быть URL-адресом прямого доступа.,Нет能携带параметр。Пример:“https://pay.weixin.qq.com/wxpay/pay.action

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

Исправлять WechatNativeController НовыйrefundsNotify метод обратного вызова

⚠️Та же логика, что и уведомление о платеже, только объекты, обрабатываемые да, отличаются. Вы можете наглядно понять, непосредственно введя код.

Студенты начали вводить код

Введите описание изображения
Введите описание изображения

ИсправлятьwxPayService создавать processRefundметод Уведомление о возврате Обработка данных заказа на возврат средств

Логика здесь такая же, как и при обратном вызове об успешном платеже. Если вы забыли, пройдите обучение. Глава 5. Игра с серией платежей WeChat с нуля: создание интерфейса обратного вызова WeChat для платежей на стороне ПК

  1. Параметры, возвращаемые при расшифровке, представляют собой обычный текст.
  2. Получите номер заказа для запроса или обновления информации.
  3. Включите блокировки, чтобы предотвратить дублирование заявок.
  4. Обновить статус заказа и форму возврата
  5. разблокировать замок

Студенты, пожалуйста, введите код вручную~

Введите описание изображения
Введите описание изображения

5. Тестовый обратный звонок для возврата средств

Действия такие же, как и в приведенном выше тесте.

  1. Открытьпроникновение в интранетинструмент
  2. создавать Заказ
  3. Корм Создать QR-код оплата прошла успешно
  4. Вызов интерфейса приложения возврата
  5. Пульт наблюденияиз Распечататьданет Возврат обратного звонкауспех

⚠️ Если через 3 секунды Возврат обратного звонка Если он не пришел, проверьте настройки.из Возврат обратного звонкаадресданетправильный

Введите описание изображения
Введите описание изображения
Обратный звонок о возврате средств завершен.
Введите описание изображения
Введите описание изображения
over~
over~

наконец

Этот вопрос исчерпан. Увидимся в следующий раз👋~. Следуйте за мной, чтобы не потеряться. Если эта статья вам полезна или у вас есть какие-либо вопросы, оставьте сообщение в разделе комментариев, я обычно отвечу. Я вижу это. Пожалуйста, поставьте лайк и поддержите~ 💗

【Идеи выбора темы】

«Технологии приходят из жизни» Зачем писать статью о таком проекте, как WeChat Pay, потому что я увидел, что статьи на рынке не полны, содержат подробности, не на просторечии и не содержат подтверждающих демо-версий!!! Мой опыт игры с WeChat Pay с нуля родился La~ С разными реализациями на ПК и Uniapp.

【Написание плана】

I. Предисловие

А. Выражайте то, что я пишу каждый раз, через Предисловие.

II. Реализация интерфейса возврата заказа.

А. Соберите людей для анализа его логики.

III. Перейдем к делу.

А. Соберите предыдущие теоретические знания для написания функционального кода.

IV. Тестирование.

A. Пошаговое устранение ошибок при написании данета с помощью тестового варианта использования

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose