>  기사  >  위챗 애플릿  >  WeChat 결제 확인 또는 서명이 실패하는 이유는 무엇입니까? 세 가지 솔루션이 첨부되어 있습니다.

WeChat 결제 확인 또는 서명이 실패하는 이유는 무엇입니까? 세 가지 솔루션이 첨부되어 있습니다.

php是最好的语言
php是最好的语言원래의
2018-08-07 15:44:0547662검색

iOS WeChat 통합 결제 확인이 실패하는 이유는 무엇인가요? 서명이 실패했는데 아직도 결제가 ​​안 돼서 너무 불안해요. 가장 큰 문제는 시신이 중국어로 되어 있어서 해결하기가 너무 귀찮아서 바이두에서 검색해봐도 기사가 없네요. 그러면 모든 종류의 문제가 완전히 해결됩니다. 여기서는 자세히 다루지 않고 요점만 말씀드리겠습니다.

회사의 프로젝트에는 WeChat 결제가 필요하기 때문에 배포 중에 항상 서명 오류가 보고되는 것을 발견했습니다. 조사 결과 인코딩 문제로 밝혀졌습니다. 따라서 원인을 찾으면 문제를 해결해 보겠습니다. 이 기사에서는 세 가지 해결 방법을 자세히 소개합니다. 시간이 부족하고 다 읽을 시간이 없다면 바로 세 번째 해결 방법으로 넘어가시기 바랍니다. 모든 사람.

첫 번째 해결 방법: Tomcat 인코딩을 utf-8로 설정하세요

Window 환경에서 Tomcat의 기본 인코딩은 gbk이므로 Tomcat 인코딩을 utf-8로 설정해야 합니다.

첫 번째 단계: catalina.bat 헤더의 두 번째 줄에

set JAVA_OPTS=-Xms128m -Xmx512m -XX:MaxPermSize=256m -Dfile.encoding=utf-8 -Dsun.jnu.encoding=utf-8
让java环境使用utf-8编码

를 추가합니다. 두 번째 단계: server.xml에

URIEncoding="UTF-8" useBodyEncodingForURI="true"를 추가하여 요청을 보냅니다. by tomcat 다음 코드

  1. <connector port="8081" protocol="HTTP/1.1"></connector>

    에 표시된 대로 utf-8을 사용합니다.

  2. connectionTimeout="20000"

  3. redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true" />

    콘솔에 잘못된 문자가 있을 수 있지만 다음과 같은 경우에는 괜찮습니다. gbk로 변경했지만 WeChat 서명이 실패했습니다

두 번째 해결 방법: body

String body = new String("body Chinese field value".toString().getBytes("ISO8859-1" )," UTF-8");

그러나: WeChat에서 반환된 제품 이름은 깨집니다

WeChat 결제 확인 또는 서명이 실패하는 이유는 무엇입니까? 세 가지 솔루션이 첨부되어 있습니다.


세 번째 해결 방법: 서명 MD5 인코딩을 수정하세요(이 솔루션이 왕입니다)

tomcat 윈도우 환경 기본 인코딩은 gbk이므로 md5 서명 수행 시 인코딩을 utf-8로 설정하면 됩니다.

WeChat 결제 확인 또는 서명이 실패하는 이유는 무엇입니까? 세 가지 솔루션이 첨부되어 있습니다.

제가 사용하는 MD5 서명 도구 클래스입니다:

public class MD5Util {

	private static String byteArrayToHexString(byte b[]) {
		StringBuffer resultSb = new StringBuffer();
		for (int i = 0; i < b.length; i++)
			resultSb.append(byteToHexString(b[i]));

		return resultSb.toString();
	}

	private static String byteToHexString(byte b) {
		int n = b;
		if (n < 0)
			n += 256;
		int d1 = n / 16;
		int d2 = n % 16;
		return hexDigits[d1] + hexDigits[d2];
	}

	public static String MD5Encode(String origin, String charsetname) {
		String resultString = null;
		try {
			resultString = new String(origin);
			MessageDigest md = MessageDigest.getInstance("MD5");
			if (charsetname == null || "".equals(charsetname))
				resultString = byteArrayToHexString(md.digest(resultString
						.getBytes()));
			else
				resultString = byteArrayToHexString(md.digest(resultString
						.getBytes(charsetname)));
		} catch (Exception exception) {
		}
		return resultString;
	}

	private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5",
			"6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };

}

관련 추천:

WeChat 앱 결제: 결제 권한 확인에 실패했습니다. 이유가 무엇인가요?

위챗 앱 결제: 결제 권한 확인 실패, 이유가 무엇인가요

위 내용은 WeChat 결제 확인 또는 서명이 실패하는 이유는 무엇입니까? 세 가지 솔루션이 첨부되어 있습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.