Java 微信小程序笔记 二、 微信支付退款案例

一、前期准备工作:
上篇博客配置的一些参数和文件Jar包 都要用到
微信支付需要小程序和商户绑定
APP绑定微信商户平台获取商户id(mchID)、
证书(商户后台下载)、
支付签名密钥(商户后台设置api密钥)、
退款签名密钥(商户后台设置api密钥ipv3)等
可以去微信官方文档那里查看怎么获取生成后台所需要的参数

官方文档:
支付异步回调通知:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_7&index=8

退款异步回调通知:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_16&index=11

二、支付流程:
在这里插入图片描述

个人理解:
微信支付需要提供三个接口 :
第一步是你的创建订单的动作
第二步前端确认用户支付的情况下 通过订单ID查询生成调用微信支付的参数 执行扣款动作
第三步微信支付成功后会自动调你提供给微信的回调地址
在回调操作里面修改订单状态 完成你支付成功后的后续动作。

PS:
支付退款的回调地址 必须是外网可以访问的

微信支付金额是分 支付宝是元

三、微信支付详细代码案例:

日期工具类:

import cn.njcool.common.enums.DateEnum;
import cn.njcool.common.enums.NumberEnum;
import org.apache.commons.lang3.StringUtils;
import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalField;
import java.time.temporal.WeekFields;
import java.util.ArrayList;
import java.util.List;

/**
 * @Name: DateUtil
 * @Author: zhu
 * @Date: 2020-02-07
 * @Description: 日期时间处理工具类
 */
public class DateUtil {
   

    private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd");

    private static final DateTimeFormatter DATE_TIME_FORMAT = DateTimeFormatter
            .ofPattern("yyyy-MM-dd HH:mm:ss");

    private static final DateTimeFormatter NO_SPACE_DATE_TIME_FORMAT = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");

    private static final DateTimeFormatter DATE_TIME_WITH_HMS_FORMAT = DateTimeFormatter
            .ofPattern("HH:mm:ss");

    public static String formatDateTime(LocalDateTime date, DateEnum dateEnum) {
   
        if (date != null) {
   
            switch (dateEnum) {
   
                case DATE: {
   
                    return DATE_FORMAT.format(date);
                }
                case DATE_TIME: {
   
                    return DATE_TIME_FORMAT.format(date);
                }
                case NO_SPACE_DATE_TIME: {
   
                    return NO_SPACE_DATE_TIME_FORMAT.format(date);
                }
                case TIME_WITH_HMS: {
   
                    return DATE_TIME_WITH_HMS_FORMAT.format(date);
                }
            }
        }
        return null;
    }

    public static LocalDateTime formatDateTime(String dateStr) {
   
        if (StringUtils.isNotEmpty(dateStr)) {
   
            if (dateStr.length() == DateEnum.DATE.getValue()) {
   
                dateStr += " 00:00:00";
                return LocalDateTime.parse(dateStr, DATE_TIME_FORMAT);
            } else if (dateStr.length() == DateEnum.DATE_TIME.getValue()) {
   
                return LocalDateTime.parse(dateStr, DATE_TIME_FORMAT);
            } else if (dateStr.length() == DateEnum.NO_SPACE_DATE_TIME.getValue()) {
   
                return LocalDateTime.parse(dateStr, NO_SPACE_DATE_TIME_FORMAT);
            } else if (dateStr.length() == DateEnum.TIME.getValue()) {
   
                dateStr = "2020-01-01 " + dateStr + ":00";
                return LocalDateTime.parse(dateStr, DATE_TIME_FORMAT);
            }
        }
        return null;
    }

    public static List<String> getWeekDateList(int week, String endDate, List<String> excludeDateList) {
   
        LocalDateTime now = LocalDateTime.now();
        List<String> resultList = new ArrayList<>();
        TemporalField temporalField = WeekFields.of(DayOfWeek.of(1), 1).dayOfWeek();
        LocalDateTime localDateTime = now.with(temporalField, week);
        if (localDateTime.isBefore(now)) {
   
            localDateTime = localDateTime.plusWeeks(1);
        }
        while (true) {
   
            String localDateTimeStr = formatDateTime(localDateTime, DateEnum.DATE);
            if (localDateTimeStr.compareTo(endDate) > NumberEnum.ZERO.getValue()) {
   
                break;
            }
            if (!excludeDateList.contains(localDateTimeStr)) {
   
                resultList.add
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值