zoukankan      html  css  js  c++  java
  • java小程序微信支付

    小程序调用统一的下单接口生成预付款订单   支付完成 调用回调地址

    wx.requestPayment({
                'appId':res.appId,
                'timeStamp': res.timeStamp,
                'nonceStr': res.nonceStr,
                'package': res.package,
                'signType': 'MD5',//也可以其他的加密方式
                'paySign': res.paySign,
                'success':function(res){
                 //如果支付成功或异步推送到后台地址  此处没有返回值
                  wx.showToast({
                    title: "支付成功",
                    icon: 'none',
                    duration: 2000
                  })
                },
                'fail':function(res){
                  if(res.errMsg=="requestPayment:fail cancel"){
                    wx.showModal({
                      content: '确定取消支付吗?',
                    })
                  }else{
                    wx.showModal({
                      content: '支付失败',
                    })
                  }
                },
              })
    /**
         * 微信支付
         * 统一下单接口
         * @throws ParseException 
         */
        @ResponseBody
        @RequestMapping(value = "/payRechargeGold", method = RequestMethod.GET)
        public void weixinPayWap(HttpServletRequest request, HttpServletResponse response){
            String openid = request.getParameter("wxSession");
            String merchantId = request.getParameter("merchantId");//商户
            Map<String,String> orderMap = new HashMap<String, String>();
            Double amount = 1.2;
            String bodyName = "置顶充值";
            orderMap.put("merchantId", merchantId);
            orderMap.put("amount", amount.toString());//金额
            String orderNum = GetOrderNumUtil.generateOrderNum(merchantId);
            //此处我会存入缓存  在支付成功后回调是在将数据插入数据库
            redisUtil.hset("rechargeOrder", orderNum , orderMap,10*60*60);
            try {
                //拼接统一下单地址参数
                Map<String, String> paraMap = new HashMap<String, String>();
                //获取请求ip地址
                String ip = GetIpUtil.getIp(request);
                Double money = amount*100;//获取金额,单位分
                paraMap.put("appid", applets.getAppID());
                paraMap.put("body", bodyName); //商品名称
                paraMap.put("mch_id", pay.getMchId());//商户ID
                paraMap.put("nonce_str", WxPayUtil.generateNonceStr()); //String 随机字符串
                paraMap.put("attach", "test");
                paraMap.put("out_trade_no", orderNum);//订单号
                paraMap.put("notify_url", pay.getNotifyUrl());
                paraMap.put("openid", openid);
                paraMap.put("spbill_create_ip", ip);//请求IP
                paraMap.put("total_fee", money.intValue()+""); //金额
                paraMap.put("trade_type", pay.getTradeType()); //类型
                String sign = WxPayUtil.generateSignature(paraMap, pay.getKey());
                paraMap.put("sign", sign);
                String xml = WxPayUtil.mapToXml(paraMap);//将所有参数(map)转xml格式
                String unifiedorder_url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
                String xmlStr = HttpUtil.doPostJson(unifiedorder_url, xml);
                //xmlStr统一订单下发接口获取的参数
                //以下内容是返回前端页面的json数据
                if (xmlStr.indexOf("SUCCESS") != -1) {
              //微信官方会提供工具类 也可以自己封装 Map
    <String, String> map = WxPayUtil.xmlToMap(xmlStr); String prepayId = map.get("prepay_id"); String nonceStr = map.get("nonce_str"); long time = System.currentTimeMillis() / 1000; Map<String, String> payMap = new HashMap<String, String>(); payMap.put("appId", applets.getAppID()); payMap.put("nonceStr", nonceStr); payMap.put("package", "prepay_id="+ prepayId); payMap.put("timeStamp", time+""); payMap.put("signType", "MD5"); String newSign = WxPayUtil.generateSignature(payMap, pay.getKey()); JSONObject jo = new JSONObject(); jo.put("appId", applets.getAppID()); jo.put("timeStamp", time+""); jo.put("nonceStr", nonceStr); jo.put("package", "prepay_id="+ prepayId); jo.put("paySign", newSign); jo.put("status", 200); Writer out = response.getWriter(); out.write(jo.toString()); out.flush(); } } catch (Exception e) { e.printStackTrace(); } }
      
      //微信支付成功后触发回调地址
      //原本是返回一个组装好的字符串 发现没用 现在return一个字符串 简单粗暴
      @RequestMapping(value = "/success") @ResponseBody public String success(HttpServletRequest request, HttpServletResponse response) { // System.out.println("触发支付回调------------------"); try { StringBuffer sb = new StringBuffer(); InputStream inputStream = request.getInputStream(); String s; BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); while ((s = in.readLine()) != null) { sb.append(s); } in.close(); inputStream.close(); Map
    <String,String> map = WxPayUtil.xmlToMap(sb.toString()); if(map.get("result_code").equals("SUCCESS")) { String orderNum = map.get("out_trade_no"); String openid = map.get("openid"); int res =0; if(res > 0) { System.out.println("订单从缓存添加到数据库成功。。。。。。"); return "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>" + "<return_msg><![CDATA[OK]]></return_msg>" + "</xml>"; }else { return "<xml>" + "<return_code><![CDATA[FAIL]]></return_code>" + "<return_msg><![CDATA[添加订单失败]]></return_msg>" + "</xml>"; } } } catch (Exception e) { e.printStackTrace(); } return "<xml>" + "<return_code><![CDATA[FAIL]]></return_code>" + "<return_msg><![CDATA[添加订单失败]]></return_msg>" + "</xml>"; }
  • 相关阅读:
    aws centos 基本环境安装
    aws 安装python解释器
    odoo 开发环境部署
    graphql规范
    python 字符串format使用
    设计模式
    集合的常见操作
    字典常见操作
    python实现简单的购物车
    python实现简单的登录管理
  • 原文地址:https://www.cnblogs.com/ch94/p/14718616.html
Copyright © 2011-2022 走看看