java springboot 如何实现小程序支付

今天给大家分享java小程序支付

首先我们学习任何东西要先看官网

下面是支付业务流程

我们具体用代码去实现上面的业务流程

功能截图

代码截图

复制代码
 pay(){
    //调用后台生成订单
    var orderNumber = "20210101123456";
    var amount = 0.01;


    WxPay.wxpay(app, amount, orderNumber, '支付测试', function(code) {
      // 下单成功,跳转到订单管理界面
      if (code == 0) {
        
      }
    });
  },

function wxpay(app, money, orderNum, goodsName, callback) {
  wx.request({
    header: {
      "token": app.globalData.token
    },
    url: app.globalData.domain + '/api/pay/wechat/unifiedOrder',
    data: {
      storeId: app.globalData.storeId,
      orderNum: orderNum,
      totalAmount: money,
      goodsName: goodsName
    },
    success: function (res) {
      if (res.data.code == 0) {
        // 发起支付
        wx.requestPayment({
          timeStamp: res.data.data.timeStamp,
          nonceStr: res.data.data.nonceStr,
          package: res.data.data.package,
          signType: 'MD5',
          paySign: res.data.data.paySign,
          fail: function (resp) {
            wx.showToast({
              title: '支付失败',
              icon: 'none'
            })
            callback(1);
          },
          success: function () {
            wx.showToast({
              title: '支付成功',
              icon: 'none'
            })
            callback(0);
          }
        })
      } else {
        wx.showToast({
          title: res.data.msg,
          icon: 'none'
        })
        callback(1);
      }
    }
  })
}

/**
     * 统一下单(详见https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1)
     * 在发起微信支付前,需要调用统一下单接口,获取"预支付交易会话标识"
     * 接口地址:https://api.mch.weixin.qq.com/pay/unifiedorder
     *
     * @param request 请求对象,注意一些参数如appid、mchid等不用设置,方法内会自动从配置对象中获取到(前提是对应配置中已经设置)
     */
    @GetMapping("/unifiedOrder")
    public R unifiedOrder(@RequestAttribute("userId") Long userId, String orderNum, BigDecimal totalAmount, String goodsName, HttpServletRequest req) throws WxPayException {
    	WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
    	request.setOutTradeNo(orderNum);
    	MemberEntity member = memberService.queryObject(userId);
    	request.setOpenid(member.getOpenid());
    	request.setBody(goodsName);
    	request.setNotifyUrl(notifyUrl);
    	request.setTotalFee(totalAmount.multiply(new BigDecimal(100)).intValue());
    	request.setSpbillCreateIp(IPUtils.getIpAddr(req));
    	request.setTradeType("JSAPI");
    	WxPayUnifiedOrderResult result = wxPayService.unifiedOrder(request);
    	
    	String timeStamp = String.valueOf(System.currentTimeMillis() / 1000);
        String nonceStr = String.valueOf(System.currentTimeMillis());
    			
    	//signKey 商户平台设置的密钥key
    	//签名字段:appId,timeStamp,nonceStr,package,signType
    			
    	Map params = new HashMap();
    	params.put("appId", wxPayService.getConfig().getAppId());
    	params.put("timeStamp", timeStamp);
    	params.put("nonceStr", nonceStr);
    	params.put("package", "prepay_id=" + result.getPrepayId());
    	params.put("signType", "MD5");
    	
    	String sign = SignUtils.createSign(params, "MD5",    wxPayService.getConfig().getMchKey(), new String[0]);
    	
    	params.put("paySign", sign);
    	
    	return R.ok().put("data", params);
    }
相关推荐
_周游3 分钟前
Kaptcha—Google验证码工具
java·intellij-idea·jquery
我真会写代码22 分钟前
深入理解JVM GC:触发机制、OOM关联及核心垃圾回收算法
java·jvm·架构
本喵是FW29 分钟前
C语言手记1
java·c语言·算法
洛阳泰山37 分钟前
MaxKB4j Docker Compose 部署指南
java·docker·llm·springboot·rag·maxkb4j
森林里的程序猿猿1 小时前
垃圾收集器G1和ZGC
java·jvm·算法
weixin_404157681 小时前
Java高级面试与工程实践问题集(五)
java·开发语言·面试
fengci.1 小时前
ctfshow(web入门)295-300
java·开发语言·学习
2601_952013761 小时前
新麦同城到家预约上门小程序V3全开源版 vueadmin+unipp开源前端+小程序端
小程序
重庆小透明1 小时前
【面试问题】java字节八股部分
java·面试·职场和发展
小王不爱笑1321 小时前
Java 对象拷贝(浅拷贝 / 深拷贝)
java·开发语言·python