認証
RSA認証
署名リクエスト
- あなたの秘密鍵を生成し、
appRsaPrivateKeyとして表し、リクエストの署名に使用します。長さは2048です。 - 署名する文字列
Content_To_Be_Signedを構築します。 SHA256WithRSA暗号化アルゴリズムを使用して署名を計算し生成します。- 生成された署名をリクエストボディパラメータ
signに追加します。
各ステップの詳細については、以下の例を参照してください。
署名計算ステップ
1. 鍵ペアの生成
- 署名にはRSAアルゴリズムを使用します。通信双方は一対のRSA鍵を生成し、公鍵を交換します。リクエスト時には秘密鍵を使用して署名し、リクエストを受け取った側は公鍵を使用して署名の有効性を検証します。リクエストには以下の方法で秘密鍵を生成し、生成された公鍵をCodePayにアップロードする必要があります。
Java言語を使用する場合、秘密鍵の形式はPKCS8です。他の言語ではPKCS1が使用されます。鍵の長さは2048です。公鍵の形式は通常PEMです。C#などの言語ではDER形式の公鍵が必要であり、これらの公鍵は変換が必要です。
- RSA2鍵を生成する方法が分からない場合は、以下のツールを使用することをお勧めします。ワンクリックで鍵生成、署名生成、署名検証が可能です。
PayCloud Key Tool

- また、以下のようにopensslを使用して手動でRSA2鍵を生成することもできます。
# 1. Generating the private key
openssl genrsa -out client_private_key_php_dotnet.pem
# 2. If you are a Java developer, convert the private key to PKCS8 format, other development languages use the PKCS1 format
openssl pkcs8 -topk8 -inform PEM -in client_private_key_php_dotnet.pem -outform PEM -nocrypt -out client_private_key_pkcs8.pem
# 3. Generate the public key
openssl rsa -in client_private_key_php_dotnet.pem -pubout -out client_public_key_php_dotnet.pem
# 4. Generate the private key that can be used in Java
cat client_private_key_pkcs8.pem | grep -v "^\-" | tr -d "\n" | sed 's/%$//' > client_private_key_java.pem
# 5. Generate the public key that can be used in Java
cat client_public_key_php_dotnet.pem | grep -v "^\-" | tr -d "\n" | sed 's/%$//' > client_public_key_java.pem
2. 署名対象文字列の構築
Step 1: 署名対象のパラメータを構築
署名対象のパラメータには、APIリクエストパラメータ、レスポンスパラメータ、非同期通知パラメータが含まれます(ただし、署名パラメータsignや値がNULLまたは空文字列のパラメータは含まれません)。
HTTPプロトコルの要件に従い、GETリクエストでパラメータの値に特殊文字(例:&、@など)が含まれる場合、その値はURLエンコードされる必要があります。しかし、署名するデータにはエンコード前の元の値を使用します
String [] parameters={
"app_id=wzxxxxxxxxxx",
"method=pay.orderquery",
"format=JSON",
"charset=UTF-8",
"sign_type=RSA2",
"version=1.0",
"timestamp=1908901287917",
"merchant_no=M100001876",
"description="
};
処理後、署名に参加するパラメータは以下の通りです(ルールに基づき、空のab_no値は署名に含まれません):
String [] parameters={
"app_id=wzxxxxxxxxxx",
"method=pay.orderquery",
"format=JSON",
"charset=UTF-8",
"sign_type=RSA2",
"version=1.0",
"timestamp=1908901287917",
"merchant_no=M100001876"
};
JSONオブジェクトのキーは順序が保証されていないため、この署名ルールではJSONの最上位レベルのキーと値のみを選択します。ネストされたJSONオブジェクトの場合、署名計算とHTTPメッセージの送信前に、JSONの値を文字列に変換してください。
これは誤ったJSONメッセージです。key3の値がJSONObjectであり、文字列に変換されていません。
{
"key1":"value1",
"key2":"value2",
"key3":{
"subkey31":"subvalue31",
"subkey32":"subvalue32"
}
}
これは正しいJSONメッセー ジです。key3の値は文字列に変換されたJSONObjectです:
{
"key1":"value1",
"key2":"value2",
"key3":"{\"subkey31\":\"subvalue31\",\"subkey32\":\"subvalue32\"}"
}
Step 2: パラメータのソート
パラメータ名をASCIIコ ードの最小から最大の順(aからzの順、最初の文字が同じ場合は次の文字を比較)でソートします。たとえば、JAVA言語では関数「Collections.sort(keys)」を使用してソートできます。 最初のソート後の配列は次のとおりです:
String[] parameters={
"app_id=wzxxxxxxxxxx",
"charset=UTF-8",
"format=JSON",
"merchant_no=M100001876",
"method=pay.orderquery",
"sign_type=RSA2",
"timestamp=1908901287917",
"version=1.0"
};
Step 3: パラメータの連結
前の例のように、ソートされたパラメータを「&」文字で結合します:
app_id=wzxxxxxxxxxx&charset=UTF-8&format=JSON&merchant_no=M100001876&method=pay.orderquery&sign_type=RSA2×tamp=1908901287917&version=1.0