微信小程序支付(前后端都包含)

本文详细介绍了如何在Java中通过微信小程序进行支付,包括统一下单获取预支付ID,创建支付签名,以及处理异步支付通知,确保订单状态更新和业务逻辑的正确执行。
摘要由CSDN通过智能技术生成

Java中换取微信支付唯一订单号(用于换取支付窗口)

   /**
     * 微信小程序支付
     */
    @PostMapping(value = "/xcxPay")
    @ResponseBody
    public Map<String,Object> miniAppPay(@RequestBody byte[] req) {
        HashMap<String, Object> objectObjectMap = new HashMap<>();
        JSONObject json = JSONObject.parseObject(new String(req, Charset.forName("UTF-8")));
        System.out.println("请求参数"+json);
       
      
       
        String ip = "127.0.0.1";

        String money = null;
        String remark = null;
   
   


        Map<String, String> params = UnifiedOrderModel
                .builder()
                .appid(小程序appid)
                .mch_id(微信商家商户号)
                .nonce_str(WxPayKit.generateStr())
                .body(remark)
                .attach(remark)
                .out_trade_no(订单号)
                .total_fee(金额)
                .spbill_create_ip(ip)
                .notify_url(回调地址)
                .trade_type(TradeType.JSAPI.getTradeType())
                .openid(小程序openid)
                .build()
                .createSign(微信官方商户密钥, SignType.HMACSHA256);

        String xmlResult = WxPayApi.pushOrder(false, params);

        System.out.println(xmlResult);
        Map<String, String> result = WxPayKit.xmlToMap(xmlResult);

        String returnCode = result.get("return_code");
        String returnMsg = result.get("return_msg");

        String resultCode = result.get("result_code");

        // 以下字段在 return_code 和 result_code 都为 SUCCESS 的时候有返回
        String prepayId = result.get("prepay_id");
        Map<String, String> packageParams = WxPayKit.miniAppPrepayIdCreateSign(wxspAppid, prepayId,
                wxspSecret, SignType.HMACSHA256);
        String jsonStr = JSON.toJSONString(packageParams);
        System.out.println("小程序支付的参数:" + jsonStr);

        objectObjectMap.put("status","0000");
        objectObjectMap.put("payMess",packageParams);

        return objectObjectMap;
    }

支付结果异步通知接口

  /**
     * 异步通知
     * 这里面可以写判断支付成功之后的及具体业务需求
     */
    @RequestMapping(value = "/payNotify", method = {RequestMethod.POST, RequestMethod.GET})
    @ResponseBody
    public String payNotify(HttpServletRequest request) {
        System.out.println("支付通知=1" + request);
        String xmlMsg = HttpKit.readData(request);
        System.out.println("支付通知=" + xmlMsg);
        Map<String, String> params = WxPayKit.xmlToMap(xmlMsg);

        String returnCode = params.get("return_code");

        //通过支付订单号处理业务
        String order = params.get("out_trade_no");
        System.out.println("支付订单号:"+order);

     
//         注意重复通知的情况,同一订单号可能收到多次通知,请注意一定先判断订单状态
//         注意此处签名方式需与统一下单的签名类型一致
        if (WxPayKit.verifyNotify(params, wxspSecret, SignType.HMACSHA256)) {
            if (WxPayKit.codeIsOk(returnCode)) {
                // 更新订单信息
                //支付成功

                // 发送通知等
                Map<String, String> xml = new HashMap<String, String>(2);
                xml.put("return_code", "SUCCESS");
                xml.put("return_msg", "OK");
                return WxPayKit.toXml(xml);
            }
        }
        return "success";
    }

前端唤起支付窗口

	pay(e){
			
			 var that = this;
			wx.requestPayment({
					         // "appId":e.appId,     //公众号ID,由商户传入     
					         "timeStamp":e.timeStamp,         //时间戳,自1970年以来的秒数     
					         "nonceStr":e.nonceStr, //随机串     
					         "package":e.package,     
					         "signType":e.signType,         //微信签名方式:     
					         "paySign":e.paySign, //微信签名 
					      success (res) {  
							  //支付成功
							  
						  },
					        fail (res) { },
							})
		},

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值