iOS WeChat 統一支払いの検証が失敗するのはなぜですか?署名に失敗し、まだ支払いができないのでとても不安です。主な問題は本文が中国語であることです。これを解決するのが非常に面倒です。Baidu で検索しましたが、記事が見つかりません。一言で言えば、あらゆるトラブルを解決します。ここでは詳細には触れませんが、本題に入りましょう:
会社のプロジェクトでは WeChat での支払いが必要なため、デプロイ中に署名エラーが常に報告されることがわかりました。調査の結果、それはエンコーディングの問題であることが判明しました。理由が見つかったら、この記事で 3 つの解決策を詳しく紹介します。時間が限られており、すべてを読む時間がない場合は、3 番目の解決策に直接進んでください。みんな。
ウィンドウ環境における Tomcat のデフォルトのエンコーディングは gbk であるため、Tomcat エンコーディングを utf-8 に設定する必要があります。
最初のステップ: catalina.bat のヘッダーの 2 行目に
set JAVA_OPTS=-Xms128m -Xmx512m -XX:MaxPermSize=256m -Dfile.encoding=utf-8 -Dsun.jnu.encoding=utf-8
让java环境使用utf-8编码
を追加します。 2 番目のステップ:
URIEncoding="UTF-8" useBodyEncodingForURI="true" をserver.xml に追加してリクエストを送信します。 by tomcat 次のコードに示すように、utf-8 を使用します
<Connector port="8081" protocol="HTTP/1.1"
redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true" />
コンソールで文字化けが発生する場合がありますが、 gbk に変更しても問題ありませんが、WeChat 署名は失敗しました
String body = new String("body Chinese field value".toString().getBytes("ISO8859- 1")," UTF-8");
ただし: WeChat から返される製品名は文字化けします
Windows 環境の tomcat デフォルトのエンコーディングは gbk なので、md5 署名を実行する場合はエンコーディングを utf-8 に設定するだけです。
これは私が使用する 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 アプリ支払い: 支払い許可チェックに失敗しました。理由は何ですか
以上がWeChat の支払い検証または署名が失敗するのはなぜですか? 3 つの解決策を添付しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。