Весь процесс разработки платежей в публичном аккаунте WeChat (версия Java)

Java задняя часть WeChat

Если в статье есть что-то неуместное, пожалуйста, поправьте меня.Если вам нравится читать в WeChat, вы также можете подписаться на мой публичный аккаунт WeChat:好好学java, доступ к высококачественным учебным ресурсам.

1. Официальный документ WeChat Процесс разработки платежа WeChat (оплата через публичный счет)

Первым делом переходим к официальным документам оплаты WeChat.Шаги развитияраздел, чтобы увидеть необходимые настройки. [Ошибка загрузки изображения...(image-5eb825-1531014079742)]

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

к документуБизнес-процессраздел, проверьте процесс оплаты WeChat (Я думаю, что это все еще нужно понять и рассмотреть очень внимательно, что поможет вам понять процесс разработки WeChat.).

这里写图片描述

Затем необходимо передать множество параметров при доступе к платежному интерфейсу WeChat, см.единый порядок[Ошибка загрузки изображения... (image-df7051-1531014079742)]

Глядя на эти вышеОфициальная документация WeChat PayПосле этого, я считаю, что вы должны иметь определенное представление об этом, но все же чувствовать, чтоWeChat PayРазработка очень хлопотная, поэтому для разработки будем использовать сторонний sdk.

2. Разработка стороннего sdk для оплаты WeChat (оплата через публичный аккаунт)

Это официальная оплата аккаунта, мы используем **best-pay-sdk**, этот SDK используетPayRequestиPayResponseБыло сделано большое количество инкапсуляций интерфейса запросов и соответствующих результатов.Основные параметры, которые необходимо динамически передавать:openid(уникальный идентификатор пользователя) иorderId. Далее давайте посмотрим, как его развивать.

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

 //微信公众账号支付配置
    WxPayH5Config wxPayH5Config = new WxPayH5Config();
    wxPayH5Config.setAppId("xxxxx");
    wxPayH5Config.setAppSecret("xxxxxxxx");
    wxPayH5Config.setMchId("xxxxxx");
    wxPayH5Config.setMchKey("xxxxxxx");
    wxPayH5Config.setNotifyUrl("http://xxxxx");
            
    //支付类, 所有方法都在这个类里
    BestPayServiceImpl bestPayService = new BestPayServiceImpl();
    bestPayService.setWxPayH5Config(wxPayH5Config);

2. Инициировать платеж

  PayRequest payRequest = new PayRequest();
     payRequest.setPayTypeEnum(BestPayTypeEnum.WXPAY_H5);
     payRequest.setOrderId("123456");
     payRequest.setOrderName("微信公众账号支付订单");
     payRequest.setOrderAmount(0.01);
     payRequest.setOpenid("openid_xxxxxx");
     bestPayService.pay(payRequest);

3. Асинхронный обратный вызов

  bestPayService.asyncNotify();

Вот что говорит этот SDK10 строк кодаРешите оплату WeChat.

После завершения платежа WeChat вернет нам результат платежа в виде фрагмента платежных данных xml, нам нужно передать эти данные в асинхронное уведомление.url(notify_url), чтобы завершить проверку результата платежа (проверить подпись, проверить статус платежа), эти два шага делает за нас SDK, просто вызовите вот такbestPayService.asyncNotify(notifyData);, После завершения проверки нам нужно вернуть в WeChat такой кусок данных:

<xml>

  <return_code><![CDATA[SUCCESS]]></return_code>
  <return_msg><![CDATA[OK]]></return_msg>
</xml>

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

Все еще не совсем уверены, как интегрироваться в проект? Не беда, есть еще демо-пример, может быть понятнее.

3. Демонстрационная работа

Демонстрационный URL-адрес: https://github.com/Pay-Group/best-pay-demo.

наш главныйcontrollerУстановите это здесь:

@Controller
@Slf4j
public class PayController {

    @Autowired
    private BestPayServiceImpl bestPayService;

    /**
     * 发起支付
     */
    @GetMapping(value = "/pay")
    public ModelAndView pay(@RequestParam("openid") String openid,
                            Map<String, Object> map) {
        PayRequest request = new PayRequest();
        Random random = new Random();

        //支付请求参数
        request.setPayTypeEnum(BestPayTypeEnum.WXPAY_H5);
        request.setOrderId(String.valueOf(random.nextInt(1000000000)));
        request.setOrderAmount(0.01);
        request.setOrderName("最好的支付sdk");
        request.setOpenid(openid);
        log.info("【发起支付】request={}", JsonUtil.toJson(request));

        PayResponse payResponse = bestPayService.pay(request);
        log.info("【发起支付】response={}", JsonUtil.toJson(payResponse));

        map.put("payResponse", payResponse);

        return new ModelAndView("pay/create", map);
    }

    /**
     * 异步回调
     */
    @PostMapping(value = "/notify")
    public ModelAndView notify(@RequestBody String notifyData) throws Exception {
        log.info("【异步回调】request={}", notifyData);
        PayResponse response = bestPayService.asyncNotify(notifyData);
        log.info("【异步回调】response={}", JsonUtil.toJson(response));

        return new ModelAndView("pay/success");
    }


}

Это можно скачать самостоятельно, давайте посмотрим, как это работает

инструкция проекта

Необходимо запустить на версии Jdk> 1.8 Этот проект разработан с помощью SpringBoot1.5.1

Структура проекта

src/main/java/com/github/lly835
├── PayDemoApplication.java    
├── ServletInitializer.java
├── config
│   └── PayConfig.java       //支付密钥配置类
└── controller
    └── PayController.java   //支付调用

Запустите пример

Ключ необходимо настроить перед запуском, см.PayConfig.javaКоманда Run

git clone https://github.com/Pay-Group/best-pay-demo
cd best-pay-demo
mvn clean package
java -jar target/*.war

доступ через браузерhttp://127.0.0.1:8080/pay