微信支付(小程序)-java实现与小程序实现

一:java配置

二:工具类:获取本地IP与Enum类 与订单支付返回数据

1: 2:订单 Enum类

package com.io.common.enums;

public enum OrderStatusEnum {
          
   
    CANCEL(0,"已取消"),
    NOT_YET_SHIPPED(1,"待支付"),
    PART_OF_THE_SHIPMENT(2,"待发货"),
    WAIT_RECEIVING(3,"待收货"),
    ACHIEVE(4,"已完成"),
    ;
    private Integer key;
    private String desc;

    OrderStatusEnum(Integer key, String desc){
          
   
        this.key = key;
        this.desc = desc;
    }

    public Integer getKey() {
          
   
        return key;
    }

    public String getDesc() {
          
   
        return desc;
    }
}

3:支付方式Enum类

package com.io.order.form;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.math.BigDecimal;

/**
 * @author ts
 * @version 1.0
 * @date 2022/08/05
 */
@Data
public class WxPayForm {
          
   

    private Integer orderId;

    @ApiModelProperty("订单号")
    private String orderNo;

    @ApiModelProperty("支付订单号")
    private String orderPayNo;

    @ApiModelProperty("实际支付金额")
    private BigDecimal payAmount;


}
package com.io.order.vo;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;


@Data
public class AfterPayVO {
          
   

    @ApiModelProperty("timeStamp")
    private String timeStamp;

    @ApiModelProperty("nonceStr")
    private String nonceStr;

    @ApiModelProperty("packageValue")
    private String packageValue;

    @ApiModelProperty("signType")
    private String signType;

    @ApiModelProperty("paySign")
    private String paySign;
}

三:service与controller

1:支付 service类

2:支付 service类实现

3: Controller类

package com.io.order.controller;

import com.io.base.BaseController;
import com.io.order.service.PayService;
import com.io.util.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;

@RestController
@RequestMapping("/pay")
@Api(tags = "支付接口")
@Slf4j
public class PayController{
          
   

    @Autowired
    private PayService payService;

    @PostMapping("/payNotify/{appid}")
    @ApiOperation("支付回调")
    public R payNotify(@PathVariable String appid, @RequestBody String xmlData, HttpServletResponse response) throws Exception {
          
   
        payService.payNotify(appid, xmlData, response);
        return R.ok();
    }

三:小程序调用 支付接口

注:res.data.purchase  是先走下单逻辑(去后台下单并且调用了 支付接口)
返回参数: AfterPayVO类;
小程序前端所用到的参数是 订单支付返回的参数
wx.requestPayment({
          
   
  timeStamp: res.data.purchase.timeStamp,
  nonceStr: res.data.purchase.nonceStr,
  package: res.data.purchase.packageValue,
  signType: MD5,
  paySign: res.data.purchase.paySign,
  success (res) {
          
   
    支付成功
  },
  fail (res) {
          
   
    支付取消或失败
  }
})

2: 开发工具中测试支付接口 所展示的样子 3:正式环境样式

经验分享 程序员 微信小程序 职场和发展