站长网_站长创业_站长主页_站长之家_易采站长站

会员投稿 投稿指南 站长资讯通告: Java后台实现微信支付和微信退款
搜索:
您的位置: 主页 > 教程 > 软件开发 > JAVA/JAVA编程 > » 正文

Java后台实现微信支付和微信退款

来源: 易采站长站

微信支付流程

都是我自己工作中开发的,亲测可用,不喜勿喷。

controller中我是这么写的,你们需要根据自己的业务需求改动。ResponseBean是我自己封装的,你们可以改成你们想要的形式。

 /**
   * 微信统一下单接口
   * @return
   */
  @RequestMapping(value = "/doUnifiedOrder", method = RequestMethod.POST)
  public ResponseBean doUnifiedOrder(@RequestBody Map<String,Object> req) {
    Map resultMap=new HashMap();
    String openid = (String) req.get("openId");

    WXPay wxpay =null;

    try {
      //初始化证书
      myConfig.initCert();
      wxpay= new WXPay(myConfig);
    } catch (Exception e) {
      e.printStackTrace();
    }
    //生成的随机字符串
    String nonce_str = WXPayUtil.generateNonceStr();
    //获取客户端的ip地址
    //获取本机的ip地址
    InetAddress addr = null;
    try {
      addr = InetAddress.getLocalHost();
    } catch (UnknownHostException e) {
      e.printStackTrace();
    }
    //支付金额,需要转成字符串类型,否则后面的签名会失败
    String payOutMoney = WxMoney.changeY2F(String.valueOf(req.get("money")));
    String tradeName = (String) req.get("tradeName");
    if(tradeName!=null&&tradeName.length()>0){

    }else{
      tradeName = "课程支付";
    }
    String body = tradeName;
    //商户订单号
    String out_trade_no= WXPayUtil.generateNonceStr();
    //统一下单接口参数
    HashMap<String, String> data = new HashMap<String, String>();
    data.put("appid", 你的appid);
    data.put("mch_id", 商户id);
    data.put("nonce_str", nonce_str);
    data.put("body", body);
    data.put("out_trade_no",out_trade_no);
    data.put("total_fee", payOutMoney);
    data.put("spbill_create_ip", "127.0.0.1");
    data.put("notify_url", 回调地址);
    data.put("trade_type","JSAPI");
    data.put("openid", openid);
    try {
      Map<String, String> rMap = wxpay.unifiedOrder(data);
      String return_code = (String) rMap.get("return_code");
      String result_code = (String) rMap.get("result_code");
      String nonceStr = WXPayUtil.generateNonceStr();
      resultMap.put("nonceStr", nonceStr);
      Long timeStamp = System.currentTimeMillis() / 1000;
      if ("SUCCESS".equals(return_code) && return_code.equals(result_code)) {
          String prepayid = rMap.get("prepay_id");
          resultMap.put("package", "prepay_id="+prepayid);
          resultMap.put("signType", "MD5");
          //这边要将返回的时间戳转化成字符串,不然小程序端调用wx.requestPayment方法会报签名错误
          resultMap.put("timeStamp", timeStamp + "");
          //再次签名,这个签名用于小程序端调用wx.requesetPayment方法
          resultMap.put("appId",myConfig.getAppID());
          String sign = WXPayUtil.generateSignature(resultMap, myConfig.getKey());
          resultMap.put("paySign", sign);
          resultMap.put("out_trade_no",out_trade_no);
          ResponseBean responseBean = new ResponseBean(HttpStatus.OK.value(),"微信支付",resultMap);
          return responseBean;

      }else{
        ResponseBean responseBean = new ResponseBean(HttpStatus.OK.value(),"微信支付失败","微信支付失败");
        return responseBean;
      }
    } catch (Exception e) {
      ResponseBean responseBean = new ResponseBean(HttpStatus.OK.value(),"微信支付失败","微信支付失败");
      e.printStackTrace();
      return responseBean;
    }
  }
            
最新图文资讯
1 2 3 4 5 6
易采站长站 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助 -