Maison >Applet WeChat >Développement WeChat >Pourquoi la vérification ou la signature du paiement WeChat échoue-t-elle ? Ci-joint trois solutions

Pourquoi la vérification ou la signature du paiement WeChat échoue-t-elle ? Ci-joint trois solutions

php是最好的语言
php是最好的语言original
2018-08-07 15:44:0547709parcourir

Pourquoi la vérification unifiée des paiements iOS WeChat échoue-t-elle ? Je suis vraiment anxieux car ma signature a échoué et je ne peux toujours pas payer. Le principal problème est que le corps est en chinois, ce qui est très difficile à résoudre, j'ai beaucoup cherché sur Baidu, mais je ne trouve aucun article. cela le résout complètement. Bref, c'est toutes sortes de problèmes. Je n'entrerai pas dans les détails ici, allons droit au but :

Comme les projets de l'entreprise nécessitent un paiement via WeChat, lors du déploiement, j'ai constaté que des erreurs de signature étaient toujours signalées. Après enquête, il s'est avéré que c'était le cas. un problème de codage, nous le résoudrons donc si nous en trouvons la raison. Question, cet article présente trois solutions en détail. Si vous avez peu de temps et n'avez pas le temps de le lire, passez directement à la troisième solution, j'espère. cela peut aider tout le monde.

La première solution : définissez l'encodage Tomcat sur utf-8

L'encodage par défaut de Tomcat dans l'environnement de fenêtre est gbk, définissez donc l'encodage Tomcat sur utf-8.

Étape 1 : Ajoutez

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

à la deuxième ligne de l'en-tête dans catalina.bat Étape 2 : Ajoutez

URIEncoding à server.xml =" UTF-8" useBodyEncodingForURI="true", oblige la requête envoyée par Tomcat à utiliser utf-8, comme indiqué dans le code suivant

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

  2. connectionTimeout="20000"

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

    Il peut y avoir des caractères tronqués dans la console, mais ce sera bien si vous le changez en gbk, mais la signature WeChat échoue

Le deuxième type Solution : Convertir le corps

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

Cependant : le nom du produit renvoyé par WeChat sera tronqué

Pourquoi la vérification ou la signature du paiement WeChat échoue-t-elle ? Ci-joint trois solutions


La troisième solution : modifier l'encodage MD5 de la signature (Ce la solution est la meilleure solution )

Le codage par défaut de Tomcat dans l'environnement de fenêtre est gbk, donc lors de l'exécution de la signature md5, définissez le codage sur utf-8.

Pourquoi la vérification ou la signature du paiement WeChat échoue-t-elle ? Ci-joint trois solutions

Voici l'outil de signature MD5 que j'utilise :

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" };

}

Recommandations associées :

Paiement de l'application WeChat : Paiement La vérification des autorisations a échoué, pourquoi ?

Paiement de l'application WeChat : la vérification de l'autorisation de paiement a échoué, quelle en est la raison ?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn