java ベースの教程 # Java 内の微信サポート、API V3 バージョン名を実現します。
1、 はじめに
最近、マイクロ信管が壊れていますが、これは比較的に慎重なため、いくつかの手順を共有して、マイクロ信管の開始時の転送を減らす必要があります。
#今日、マイクロシグナルサポートのポイント——
には、非常に多くの優れた SDK がありますが、 2. マイクロシンサポートについて深く理解する場合は、次の点も理解する必要があります。 API 証明書
は、お金に敏感なデータの安全性を保護するために、トラフィック内でのやり取りが万単位で行われることを保証します。
パスワードを実行します。後で
zip 圧縮パッケージにアクセスします。ここには、JAVA 公開に関する非常に多くのファイルがあります。来说只要关注apiclient_cert.p12
公私钥
,我们需要它放服务端并利用Java解析.p12
# これは、サーバー端末の安全性を確認する必要があり、金の安全性に関するものです。
。<h3 id="API-証明書の解析">API 証明書の解析</h3>
<p>次のステップは、証明書を解析することです。インターネット上で証明書を解析する方法はたくさんあります。ここでは、より「正式な」解析方法を使用します。 JDK セキュリティ パッケージ<code>java.security.KeyStore
を解決します。
WeChat 支払い API 証明書は PKCS12
アルゴリズムを使用します。KeyStore
を使用して公開鍵と秘密鍵のペア KeyPair
のキャリアを取得します。証明書のシリアル番号serialNumber
、ツール クラスをカプセル化しました:
import org.springframework.core.io.ClassPathResource;import java.security.KeyPair;import java.security.KeyStore;import java.security.PrivateKey;import java.security.PublicKey;import java.security.cert.X509Certificate;/** * KeyPairFactory * * @author dax * @since 13:41 **/public class KeyPairFactory { private KeyStore store; private final Object lock = new Object(); /** * 获取公私钥. * * @param keyPath the key path * @param keyAlias the key alias * @param keyPass password * @return the key pair */ public KeyPair createPKCS12(String keyPath, String keyAlias, String keyPass) { ClassPathResource resource = new ClassPathResource(keyPath); char[] pem = keyPass.toCharArray(); try { synchronized (lock) { if (store == null) { synchronized (lock) { store = KeyStore.getInstance("PKCS12"); store.load(resource.getInputStream(), pem); } } } X509Certificate certificate = (X509Certificate) store.getCertificate(keyAlias); certificate.checkValidity(); // 证书的序列号 也有用 String serialNumber = certificate.getSerialNumber().toString(16).toUpperCase(); // 证书的 公钥 PublicKey publicKey = certificate.getPublicKey(); // 证书的私钥 PrivateKey storeKey = (PrivateKey) store.getKey(keyAlias, pem); return new KeyPair(publicKey, storeKey); } catch (Exception e) { throw new IllegalStateException("Cannot load keys from store: " + resource, e); } } }复制代码
これに見覚えがある場合は、公開キーと秘密キーの抽出メソッドの修正バージョンであることがわかります。 Fat Brother の Spring Security チュートリアルで JWT によって使用されており、違いを比較できます。
このメソッドには 3 つのパラメーターがあり、ここで説明する必要があります:
-
keyPath
API 証明書apiclient_cert.p12
classpath
パス、通常はresources
パスの下に配置します。もちろん、証明書入力ストリームを取得する方法を変更することもできます。 -
keyAlias
証明書のエイリアスは、この WeChat ドキュメントでは使用できません。Brother Fat は、証明書をロードするときに DEBUG によってエイリアスを取得し、値がTenpay Certificate# に固定されていることがわかりました。 ##。
- keyPass
証明書パスワード。このデフォルトは販売者番号です。他の構成でも使用する必要があります。
mchidです。つまり、
Super を使用します。管理者 WeChat マーチャント プラットフォームにログインするときの個人プロフィール内の数字の文字列。
WeChat Pay V3 バージョン の署名は、特定の WeChat を呼び出すときに HTTP リクエスト ヘッダーに特定の署名を含めることです。 Pay API: エンコード文字列は、WeChat 支払いサーバーによってリクエストのソースを検証し、リクエストが本物で信頼できるものであることを確認するために使用されます。
署名形式署名文字列の特定の形式。合計 5 行以上で、各行は改行文字\n で終わります。
HTTP请求方法\n URL\n 请求时间戳\n 请求随机串\n 请求报文主体\n复制代码
- HTTP リクエスト メソッド 呼び出す WeChat 支払い API (たとえば、APP 支払い) で必要なリクエスト メソッドは POST
です。
- URL たとえば、APP 支払いドキュメントは https://api.mch.weixin.qq.com/v3/pay/transactions/app
です。ただし、ドメイン名部分 署名に参加している URL を取得します。リクエストにクエリ パラメータがある場合は、「?」と対応するクエリ文字列を URL の末尾に追加する必要があります。ここは
/v3/pay/transactions/appです。
- リクエスト タイムスタンプ サーバー システムのタイムスタンプ。サーバー時間が正しいことを確認し、System.currentTimeMillis() / 1000
を使用して取得します。
- ランダムな文字列をリクエストする 593BEC0C930BF1AFEB40B4A08C8FB242
のような文字列を生成するツールを見つけてください。
- リクエストメッセージ本文 GETの場合、リクエストメソッドが直接null文字""
; is
POSTまたは
PUTの場合、実際に
の JSON メッセージを送信するにはを使用してください。画像アップロード API の場合は、
metaに対応する
JSONメッセージを使用してください。
文字列に対して RSA 署名付き SHA256 を実行します、および ##署名結果 #Base64 エンコーディング署名値を取得します。対応するコア Java コードは次のとおりです: /**
* V3 SHA256withRSA 签名.
*
* @param method 请求方法 GET POST PUT DELETE 等
* @param canonicalUrl 例如 https://api.mch.weixin.qq.com/v3/pay/transactions/app?version=1 ——> /v3/pay/transactions/app?version=1
* @param timestamp 当前时间戳 因为要配置到TOKEN 中所以 签名中的要跟TOKEN 保持一致
* @param nonceStr 随机字符串 要和TOKEN中的保持一致
* @param body 请求体 GET 为 "" POST 为JSON
* @param keyPair 商户API 证书解析的密钥对 实际使用的是其中的私钥
* @return the string
*/@SneakyThrowsString sign(String method, String canonicalUrl, long timestamp, String nonceStr, String body, KeyPair keyPair) {
String signatureStr = Stream.of(method, canonicalUrl, String.valueOf(timestamp), nonceStr, body)
.collect(Collectors.joining("\n", "", "\n"));
Signature sign = Signature.getInstance("SHA256withRSA");
sign.initSign(keyPair.getPrivate());
sign.update(signatureStr.getBytes(StandardCharsets.UTF_8)); return Base64Utils.encodeToString(sign.sign());
}复制代码
4. 署名を使用します
署名が生成された後、いくつかのパラメーターと結合されて
Token が形成され、 HTTP リクエストに対応する Authorization
リクエスト ヘッダーの形式は次のとおりです: <pre class="brush:php;toolbar:false">Authorization: WECHATPAY2-SHA256-RSA2048 {Token}复制代码</pre>
は次の 5 つの部分で構成されます:
- リクエストを開始した販売者 (直接接続されている販売者、サービス プロバイダー、チャネル プロバイダーを含む) 販売者番号
- mchid
- serial_no
、使用される証明書の宣言に使用
リクエストランダム文字列 - nonce_str
#タイムスタンプ タイムスタンプ -
署名 -
トークン 生成されたコアコード:
/** * 生成Token. * * @param mchId 商户号 * @param nonceStr 随机字符串 * @param timestamp 时间戳 * @param serialNo 证书序列号 * @param signature 签名 * @return the string */String token(String mchId, String nonceStr, long timestamp, String serialNo, String signature) { final String TOKEN_PATTERN = "mchid=\"%s\",nonce_str=\"%s\",timestamp=\"%d\",serial_no=\"%s\",signature=\"%s\""; // 生成token return String.format(TOKEN_PATTERN, wechatPayProperties.getMchId(), nonceStr, timestamp, serialNo, signature); }复制代码
Will generated Token
は、上記の形式に従ってリクエスト ヘッダーに配置され、署名の使用が完了します。
5. 概要この記事では、WeChat Pay V3 バージョンの難しい署名と署名の使用法を徹底的に分析し、API 証明書の分析についても説明しました。決済開発における特定の問題を解決します。
Java 基本チュートリアル
関連記事の紹介: ミニ プログラム支払い機能の実装方法
以上がJavaでのWeChat決済の詳しい解説(1):API V3版の署名の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 中国語版
中国語版、とても使いやすい

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

メモ帳++7.3.1
使いやすく無料のコードエディター

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン
