위챗 결제 바디 중국어 난자 상황
참조: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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.