응용 프로그램의 임금 springboot 마이크로 채널은 관심을 지불 구덩이, requestPayment는 지불 오류 "에 errmsg는": "requestPayment은 : 실패 : [지불 마이크로 채널 : -1] 일반 오류

 

 

 

  (값 = "/ toPay4App"방법 @RequestMapping = {RequestMethod.POST, RequestMethod.GET}) 
    @ApiOperation (값 = "去支付.用于앱" ) 
    @ApiImplicitParams ({ 
            @ApiImplicitParam (이름 = "돈"값 = "金额"필요 = 거짓 , paramType = "쿼리", dataType와 = "문자열" ), 
            @ApiImplicitParam (이름 = "유형"값 = "类型6 =一年会员"필요 = 사실 , paramType = "쿼리 ", dataType와 ="INT " ), 
            @ApiImplicitParam (이름 ="MEMBERID "= 필요"값 = "用户ID 사실 , paramType ="쿼리 "dataType와 = "문자열" ) 
    }) 
    공개BasicMapDataRet toPay4App은 ( 
            HttpServletRequest의 요청, 
            @RequestParam (필수 = 거짓 )의 BigDecimal 돈, 정수형, @ RequestParam (필수 = 거짓 ) 정수 NUM은 정수 MEMBERID가 
    ) 발생 RestMainException {
         시도 { 
            BasicMapDataRet RET = ) (BasicMapDataRet을; 
            //业务逻辑和校验

            지도지도 = doUnifiedOrder (요청, 무역, hrRechargeOrder); 

            ret.setResult (BasicRet.SUCCESS); 
            ret.getData () (넣어. "결과를" 지도,);
            반환권리; 
        } 캐치 (예외 전자) {
             던져  새로운 RestMainException (전자); 
        } 
    }

 

 / ** 
     *微信응용 프로그램端支付专用的下单
     * @return 
     * @throws의 예외
      * / 
    공공 지도 doUnifiedOrder (HttpServletRequest의 요청, 무역 거래, HrRechargeOrder hrRechargeOrder) 가 발생 예외 {
         시도 {
             // WXConfigUtil 설정 = 새 WXConfigUtil ();
            // 에서 System.out.println ( "wxPayAppConfigtoString :"+ wxPayAppConfig.toString () + "字符串"+ wxPayAppConfig.getKey () + "APPID"+ wxPayAppConfig.getAppID ()); 
            WXPay wxpay = 새로운 WXPay ( wxPayAppConfig ); 
            지도 <문자열, 문자열> 데이터 = 새로운HashMap의 <> (); 
            data.put ( "APPID" , wxPayAppConfig.getAppID ());
            // 에서 System.out.println ( "打印APPID") + data.get ( "APPID"); 
            data.put는 ( "mch_id" , wxPayAppConfig.getMchID ());
            // 에서 System.out.println ( "打印mch_id"+ data.get ( "mch_id")); 
            data.put ( "nonce_str" , WXPayUtil.generateNonceStr ());
            // 에서 System.out.println ( "打印nonce_str"+ data.get ( "nonce_str")); 
            data.put ( "본체" , trade.getBody ());
            // 에서 System.out.println ( "打印체"+ data.get ( '신체'));// 에서 System.out.println (+ data.get ( "out_trade_no") "out_trade_no 인쇄"); 

            data.put을 ( . "Total_fee", hrRechargeOrder.getMoney () 곱하기를 ( 새로운 새로운 BigDecimal의 (100 ).) ToString ()) ;
             // data.put ( "total_fee", hrRechargeOrder.getMoney의 toString () ().);
             // 에서 System.out.println ( "인쇄 total_fee과 돈"+ data.get ( "total_fee"));
             // 자신의 서버 IP 주소 
            data.put ( "spbill_create_ip" , request.getRemoteAddr ());
             // 에서 System.out.println ( "인쇄 spbill_create_ip"+ data.get ( "spbill_create_ip"));
             // 비동기 알림 주소 (하시기 바랍니다 참고 네트워크 외부이어야 함)
            data.put ( "notify_url", webConfBean.getProjectDomain () + "/ REST는 / wxpay / 알림" );
             // 에서 System.out.println (+ data.get ( "notify_url") "notify_url 인쇄");
             // 거래 입력 
            data.put ( "trade_type", "APP" )
             // 에서 System.out.println ( "인쇄 trade_type"+ data.get ( "trade_type"));
             // 추가 데이터는 쿼리에서와 같이 API 및 지불 알림을 반환,이 필드는 주로 상인 주문에 의해 전달되는 데이터를 사용자 지정하는 데 사용됩니다
             // data.put를 ( ","를 첨부 "");
             // 에서 System.out.println ( "기호 입력하기 전에"+ data.toString을 () + " wxPayAppConfig .getKey () "+"0ba2e528d876e0ef66ca5344debb3eac "
             );// 에서 System.out.println이 ( "데이터 신호를 입력하기 전에 다시 인쇄 해"+ data.toString ()); 

            data.put ("가입" WXPayUtil.generateSignature (데이터, wxPayAppConfig.getKey (), 
                    WXPayConstants.SignType.MD5)); 
            // 에서 System.out.println (+ data.toString ( "최종 인쇄 데이터 이전 요청"));
             // 사용 공식 API 요청 선불 주문 
            지도 <문자열, 문자열> 응답 = wxpay.unifiedOrder (데이터);
             // 에서 System.out.println을 ( "인쇄 response.get (\"return_code \ ") "+ response.get ( "return_code") );
             // 에서 System.out.println ( "응답 인쇄"+ response.toString ()); 
            IF ( "성공".equals (response.get (이하 "return_code"))) { // 메인 반환 다섯 개 개의 매개 변수를 다음
                 / / 에서 System.out.println ( "성공을 입력합니다");
                지도 <문자열, 문자열> PARAM =신규 의 HashMap <> (); 
                param.put ( "APPID" , wxPayAppConfig.getAppID ()); 
                param.put ( "PARTNERID", response.get ( "mch_id" )); 
                param.put ( "prepayid", response.get ( "prepay_id" )); 
                param.put ( "패키지", "가입 = WXPay" ); 
                param.put ( "noncestr" , WXPayUtil.generateNonceStr ()); 
                param.put ( "타임 스탬프"는 System.currentTimeMillis () / 1000 ' " ); 
                param.put는 ( "서명" , WXPayUtil.generateSignature (PARAM,
                        WXPayConstants.SignType.MD5)); 
                //에서 System.out.println (+ param.get ( "가입") "두 번째 기호로"); 
                반환 PARAM; 
            } 
        } 캐치 (예외 E) { 
            e.printStackTrace (); 
            던져  새로운 새로운 MyException ( "단일 장애" ); 
        } 
        던져  새로운 새로운 MyException ( "단일 실패" ); 
    } 

소개가 @Value와 최대 피트와 빨간색 위치,
@Component 
@ConfigurationProperties ( "mod.wechat.pay")
널 포인터 혹 지원하지 않습니다 ① 이유
② PC의 앱 결제 및 H5하고 보조 검사 서명을 필요로하는 JSAPI NATIVE 및 H5 및 PC와 다른 또 다른 구덩이를 직접 요청하고 그 결과 수
 

 

참고 블로그  https://www.jianshu.com/p/59baa5a280b7

추천

출처www.cnblogs.com/shanheyongmu/p/12092830.html