자바 백 스테이지 위 챗 결제 와 위 챗 환불 실현

위 챗 결제 절차
모두 내 가 일 하면 서 개발 한 것 이 니,직접 측정 할 수 있 고,좋아 하지 않 으 면 뿌리 지 마라.
controller 에서 저 는 이렇게 썼 습 니 다.당신들 은 자신의 업무 수요 에 따라 변경 해 야 합 니 다.Response Bean 은 제 가 직접 봉 인 했 습 니 다.원 하 는 형식 으로 바 꿀 수 있 습 니 다.

 /**
   *         
   * @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;
    }
  }
위 챗 환불 코드(환불 이 필요 한 주문서 id)

  public ResponseBean refund(Map<String, Object> req) {
    Map resultMap=new HashMap();
    String buyId = (String) req.get("buyId");
    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();
    }
    //    ,         ,          
//    int total_fee= (int) req.get("money");
    String payOutMoney = WxMoney.changeY2F(String.valueOf(req.get("money")));

//    String body = (String) req.get("z");
    //     
    String out_trade_no= WXPayUtil.generateNonceStr();
    //        
    HashMap<String, String> data = new HashMap<String, String>();

    try {
      data.put("appid", myConfig.getAppID());
      data.put("mch_id", myConfig.getMchID());
      data.put("nonce_str", nonce_str);
      data.put("sign_type", "MD5");
      data.put("out_trade_no",buyId);//     
      data.put("out_refund_no", out_trade_no);//      
      data.put("total_fee",payOutMoney);//    ,                 ,       ,           ,          
      data.put("refund_fee",payOutMoney);//     ,     ,    ,     
      //MD5      ,        ,          
      String sign = WXPayUtil.generateSignature(data, myConfig.getKey());
      data.put("sign", sign);

      Map<String, String> rMap = wxpay.refund(data);
      String return_code = (String) rMap.get("return_code");
      String result_code = (String) rMap.get("result_code");

      Long timeStamp = System.currentTimeMillis() / 1000;
      if ("SUCCESS".equals(return_code) && return_code.equals(result_code)) {

        ResponseBean responseBean = new ResponseBean(HttpStatus.OK.value(),"      ",rMap);
        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;
    }
  }
필요 한 도구 클래스

그리고 MyConfig 에서 애플 릿 인 자 를 설정 하면 됩 니 다.환불 기능 을 추가 하려 면 업 체 인증 서 를 설정 해 야 합 니 다(프로젝트 에 해당 하 는 위치).필요 없 으 면 initCert 방법 빼.

public class MyConfig extends WXPayConfig {
  @Value("${res.imgPath}")
  public String imgPath;

  private byte[] certData;


  @Override
  public String getAppID() {
    return "     id";
  }

  @Override
  public String getMchID() {
    return "  id";
  }

  @Override
  public String getKey() {
    return "    ";
  }

  @Override
  public InputStream getCertStream() {
    ByteArrayInputStream certBis = new ByteArrayInputStream(this.certData);
    return certBis;
  }

  @Override
  public int getHttpConnectTimeoutMs() {
    return 8000;
  }

  @Override
  public int getHttpReadTimeoutMs() {
    return 10000;
  }

  @Override
  IWXPayDomain getWXPayDomain() {
    return new IWXPayDomain() {
      @Override
      public void report(String domain, long elapsedTimeMillis, Exception ex) {
      }

      @Override
      public DomainInfo getDomain(WXPayConfig config) {
        return new DomainInfo("api.mch.weixin.qq.com", false);
      }
    };
  }
  
  @Override
  public void initCert() throws Exception {
    String certPath = this.imgPath+"/upload/cert/"+"apiclient_cert.p12";//                   
    System.out.println(certPath);
    File file = new File(certPath);
    InputStream certStream = new FileInputStream(file);
    this.certData = new byte[(int) file.length()];
    certStream.read(this.certData);
    certStream.close();
  }
}
자바 백 스테이지 에서 위 챗 결제 와 위 챗 환불 을 실현 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 위 챗 결제 와 위 챗 환불 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기