위챗 결제 바디 중국어 난자 상황

5553 단어
마지막으로 해결할 방법은 데이터를 보낼 때 인코딩을 지정하는 것입니다: out = new PrintWriter (new OutputStreamWriter (conn.get OutputStream (), "UTF-8").
참조:https://bbs.csdn.net/topics/39102220422층
당시의 상황은:
프로젝트는 위챗 결제 모드를 스캔한 후 package info not match special pay URL을 표시합니다
인터넷에서 찾아보니까 프리페이라고...id 매개 변수의 문제, 정렬 조사는 이전 단계에서 통일된 주문이prepay로 정확하게 되돌아오지 않았음id는 다음 단계의 매개 변수가 완전하지 않은 상황을 초래합니다.
그래서 주문 방법을 통일적으로 조사하고 테스트를 통해 바디에 중국어가 없는 것이 정상적이고 중국어가 있는 것이 서명이 일치하지 않는 상황을 초래할 수 있음을 발견했다.
 
이전에 오도된 시간이 많은 방법(기록):
1: 바디를 단독으로 인코딩하는 경우 지불 페이지의 제품 설명은 인코딩된 바이트 코드이고 지불이 성공한 후 위챗으로 되돌아오는 제품 정보는 중국어의 경우.
당시 코드는 이렇게 작성되었다.
body = MD5Util.MD5Encoding(body);

 
import java.security.MessageDigest;

public class MD5Util {private static final char hexDigits1[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

   //       ,           
    public static String MD5Encoding(String s) {
        byte[] btInput = null;
        try {
            btInput = s.getBytes("UTF-8");
        }catch (Exception e){
        }
        return MD5(btInput, 32);
    }


    public static String MD5(String s) {
        byte[] btInput = s.getBytes();
        return MD5(btInput, 32);
    }

    public static String MD5_16(String str) {
        byte[] btInput = str.getBytes();
        return MD5(btInput, 16);
    }

    private static String MD5(byte[] btInput, int length) {
        try {
            //   MD5      MessageDigest   
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            // MessageDigest mdInst = MessageDigest.getInstance("SHA-1");
            //            
            mdInst.update(btInput);
            //     
            byte[] md = mdInst.digest();
            //                 
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (byte byte0 : md) {
                str[k++] = hexDigits1[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits1[byte0 & 0xf];
            }
            String result = new String(str);
            return length == 16 ? result.substring(8, 24) : result;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

}

2: 보내는 xml 파일을 인코딩하는 방법(불안정);data = new String(data.getBytes(), "utf-8");
전재 대상:https://www.cnblogs.com/MuZi0627/p/10674807.html

좋은 웹페이지 즐겨찾기