ドキュメントの説明
ビジネス契約
サードパーティ アプリケーション アクセスでは、ログインと認証、および独立したアカウント登録機能のために Alibaba が提供するアカウント システムのみを使用できます。ご提供できません。
通信規約
決済サーバーは、http (https) モードと TOP モードという 2 つの通信モードをサポートしています。
HTTPS 通信方式: 支払いが成功した後のデジタル エンターテイメント サーバーのコールバックに適しています。https 通信方式を使用し、RSA 公開キーと秘密キーの暗号化と復号化を使用します。この CP 方法では、まず、Digital Entertainment TV Open Platform (http://open.aliplay.com/) に開発者の RSA 公開鍵情報を入力する必要があります。 Digital Entertainment は、CP によって入力された公開キーを使用して署名します。CP のサーバーがコールバックを受信した後、秘密キーを使用して署名を復号化します。コールバックの元のコンテンツは json 形式です。特定のフィールドの定義については、# を参照してください。 ##ネットワーク支払いインターフェイス - 成功後のサーバー支払いコールバック通知 章。元のコンテンツ json 文字列と RSA 公開キーに基づくコンテンツ encryptedData は、RSA 秘密キーを使用した復号化の後、CP によって http パラメーターのデータ フィールドで使用されます。
TOP 通信メソッド: 支払サービスをアクティブに呼び出す CP シナリオ (注文状況の照会など) に適しています。 TOP 通信メソッドを介して、このメソッドでは、CP は Digital Entertainment TV Open Platform (http: //open.aliplay.com/) チェックイン時 (この情報は Alibaba TV オープン プラットフォーム アプリケーション管理ページで確認できます) TOP インターフェイスの呼び出しについては、//open.taabao.com/doc2 を参照してください。 /detail.htm? spm=a219a.7629140.0.0.jlQptD&treeId=49&articleId=101617&docType=1セキュリティ仕様In双方が合意したインターフェース(サーバー)の悪用による不要なセキュリティリスクを防ぐため、アクセスパートナーは以下の要件を遵守し、セキュリティ管理を行う必要があります。ご質問がある場合は、Wangwang グループ 621730614 に参加してご相談ください。
1. インターフェースのセキュリティ仕様1) インターフェースは HTTP モードでオープンします。 2) 設計インターフェイスには ID 認証が必要で、ソースを承認し、承認された IP アクセスのみを許可する必要があります。3) すべてのインターフェイス呼び出しをログに記録して、データの転送と保存を記録する必要があります。合意されたキーは電子メールで大規模に配信されるべきではなく、開発者から開発者へと配信される必要があります。キーの漏洩によるセキュリティリスクを避けるために、キーは適切に保管する必要があります。 2 キーとアプリシークレットの送信と保管 アクセス パートナーが保持する機密情報は、電子メールで大規模に送信せず、開発者に送信する必要があります。個人的に人々に渡されました。秘密キーの漏洩によるセキュリティ リスクを回避するには、秘密キーとアプリ シークレットを適切に保管する必要があります。技術例
1. RSA鍵の生成方法RSA は、署名に使用できる非対称アルゴリズムです。つまり、署名キー (秘密キー) と検証キー (公開キー) が異なります。秘密キーは署名に使用され、公開キーは署名に使用されます。検証。 。このアルゴリズムを使用した署名は、秘密キーは署名者だけが知っているため、データの改ざんを防ぐだけでなく、否認も防ぐことができます。 Openssl RSA キー生成ツールを使用して、RSA 公開キーと秘密キーのセットを生成できます。
RSA 鍵生成コマンド:
RSA 秘密鍵の生成
openssl genrsa -out rsa_private_key.pem 1024
RSA 公開鍵の生成
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
RSA 秘密キーを PKCS8 形式に変換します
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
このツールによって生成されたキー ファイルには、いくつかのコメント、キャリッジ リターン、ライン フィードが含まれており、文字列を形成するには削除する必要があります!
2. RSA 署名 (署名) ) アルゴリズムの例
Java リファレンス コード
/**
* RSA 署名アルゴリズム
* @param privateKey
* @param content
* @param charset
* @return
* @throws 例外
*/
public static 文字列署名(文字列 privateKey、文字列コンテンツ、文字列文字セット) throws 例外 {
PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec ( Base64.decodeBase64(privateKey) );
KeyFactory keyf = KeyFactory.getInstance("RSA");
PrivateKey priKey = keyf.generatePrivate(priPKCS8);
.initSign(priKey);
signature.update(content.getBytes(charset) );
byte[] signed = signed.sign();
return
Base64.encodeBase64String(signed);
}
PHP リファレンス コード
$privkey = file_get_contents("rsa_private_key.pem"); //
PKCS8 に変換する必要はありません$res = openssl_get_privatekey($privkey);
$sign =base64_encode ($sign);
3.サーバー側通知復号化デモ (Java バージョン)
package testRsa;import java.io.ByteArrayInputStream;
import java。 io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.SignatureException;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import javax.crypto.Cipher;
import org.apache.commons .codec.binary.Base64;
/**
*
* @author zhiyong.xiongzy
*
*/
パブリック クラス testRSA {
プライベート静的文字列 prikey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMhDP5oVLHPJpM0QDuAGPupAkF4N3bMOD252BIYncKd8ppYJP0sA1wxnJxrVJN6UOzgK2qERe HUCzda5Hj GaR8dmYz3v4UMozNeXhx7iqI7EK4Myp/qjCV2ROgh2LaL1ycugacTVx6dSfFvIOcczyhs8D4BUiJlSMsTWPVCSKsPAgMBAAECgYEAkL5KUgvLvUSZIL3ignkBMD7KGbDb9HbNIIGcc3o KlAl93tni8ZnqEdGNFap 91YcFz2BF7mQ3sHQFMpn2nJDtzj0tPsCKtNLHmpOi0ctAxedhzip rOT6obNK POL6czMWGJOaW8zLefxftgZWkT eZactn507xc GiwNsodAMECQQD4OjjnMhQWaSv8kHI27pH92PTv4zFb1msB0H65Im2 zQ 8JrlqEH/7AqqMIxkPjIMC/vJLpkZG4TYMCYXjd4rx7AkeAzoiLGwUsXDApbDJXXSgYV6y50H/oJm6ooIOHoCwrluJhlOD81oUQyrLGfgNL95v4avvuQezZ4kmkeWDPvQ35fQJACBM8zqieZqw9Nh Ys4QSZ0zw/m540eNxc1s5FkRhBoVdQa2w0nZ 81d 3Ng3dH4JtQs Lp/WIXAqJfIZXPECoCQJAW8QBgrTuu9tOXFuPul1zW2lMel6KiKD8Xa1zUnCtwXG h8bbsHkZN btGMpgM5libC6Z80LI oKm14ZRpWQffhQJBAJyxWEnzZA9dvqEhj6I/BTPJgvzc/boGzZ2lKQlN8j57MDkZHryoWtoKjB3Hp5dvTasweI6WHtIm313TSLuoXrg=";
public static void main(String[] args) {
String content = "c/BOhNHjhvCXvOenIyNqmr0FI1M3cYt/BR/WEoMgoi37ZFvKe418xOlRU4AN/QyvY2H7g2osL9oLmArsw35jk43reMFUyemTLnZ4Xw/DXT5xxPzH y4NWLt2/K0mqA2e5PiShf8RX9EdLnoIYZPXKe3Ldnw0ha3RZtP4X2tBsHqU=";
文字列 jsonStr;
試してみてください{
//解密
jsonStr = decrypt(content, prikey, "UTF-8");
System.out.println(jsonStr);
//sign签名
System.out.println(sign(prikey, content, "UTF-8"));
} catch (例外 e) {
# e.printStackTrace(); } } /** * RSA 署名アルゴリズム * @param privateKey * @param content * @param charset * @return * @throws 例外*/public static Stringsign(String privateKey, String content, String charset) が例外をスローします {
PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec( Base64.decodeBase64(privateKey) );
KeyFactory keyf = KeyFactory .getInstance("RSA");
PrivateKey priKey = keyf.generatePrivate(priPKCS8);
java.security.Signature 署名 = java.security.Signature.getInstance ("SHA1WithRSA");
signature.initSign(priKey);
signature.update(content.getBytes(charset) );
byte[] signed = 署名。 sign();
return Base64.encodeBase64String(signed);
}
public static String decrypt(String content, String private_key, String input_charset ) 例外 {
PrivateKey prikey = getPrivateKey(private_key);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, prikey);
InputStream ins = new ByteArrayInputStream(Base64.decodeBase64(content.getBytes()));
ByteArrayOutputStream ライター = new ByteArrayOutputStream ();
//rsa解密的文字节大小最大128,要解密的内容,按128位拆开解密
byte[] buf = new byte[128];
int bufl;
while ((bufl = ins.read(buf)) != -1) {
byte[] block = null;
if (buf.length == bufl) {
block = buf;
}それ以外の場合は{
block = new byte[bufl];
for (int i = 0; i < bufl; i ) {
ブロック[i] = buf[i];
writer.write(cipher.doFinal(block));
新しい文字列を返す(writer.toByteArray() 、input_charset);
}
public static PrivateKey getPrivateKey(String key) が例外をスローします {
byte[] keyBytes;
keyBytes = Base64.decodeBase64(key.getBytes());
//PKCS8 を使用する
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactor y = キーファクトリー。 getInstance("RSA");
return privateKey;
}
}
PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
4. サービス务端通知解密デモ(php版)
<?php
$privkey=<<<EOT
-- ---プライベートキーの開始-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/dCMqrU4GCvJ1s
QwPxvCnYSsXsm0 wdIzPBajdRiI9rvgtxRDq10yHGwXs RNOGxaglj0F 9kRQ7l5
BEkN/ HgPg90uWT6bNp5Qf4K3qJWfY6FmWoNDKYyIYjDacAVheAC/Idg/0nKgTUKH
sowx8iXHnKBB3o7B7XGoKCjFKc2PAgMBAAECgYEAjIVAqYdVyav5HZABmQ46oMGm
Xgshiqom3uRslw0eowu5Mwv38aCYOO9t5RBVYOrcUh3HcNK6vgz6SAhQylK/MKk8
hynSBnawh5/XZUUI7Zqw5NFoLIHgdKxcNzGhp5a6eTGOyPVXBi9/ PczeD5Enf2n
2RSCJV2yyAzxAzdM DECQQD4eVHsYzkkmMFaPnJPWcGuLpl7hz1Fte5n83SiZhY/
6WJsC0FpKiCmpxrGhl2yM3gp0kS4b7/uuulIEQyPOAWdAkEA5qTiHZL/ GJOtxwU
kvvVplEmOKGHEcUSoLgxnBYS35S3qgxH4X9 89coyHV6EMNUXd5hO1vz3RnIVRx
sYsuGwJAcV9x2OlBNoiYmKOrprcun1pV375KX9duS3ITQtJPzqOfq rK0sBNG51d
oz3F3LyNVI/DmWAr9DLGpIJa97I5JQJBALcqTmAKM7m/6J9Gb5hi4sMYQvBKZwfX
p/l3Df7VENv6 MPmckyEjq8tObgog234kXGSf0kytzHpnczpRY8wJqe0CQCNv7Th8
jnlWQ21UVBL1Lr3KcMM/0RJ0hiVGH46Gp93h9c2zsAgHQ01HLi1BeRcM1tZZNPIh
GqEuuIa/iXjzNNc=
-----END プライベートキー-----
EOT;
$res = openssl_get_privatekey($privkey);
//$content = "ycoYI7SXtj9GWHHNS27jeF18x7B0JVFxyb0 X /k4fjHpe7Jvwk7TGdT5VF NWjBKpPVfyv5NRUYMNrHsHSeQgd4AWO6y3e5HWGmhCa92YdAzriSqoU2fAud4zJQtu1lKQP iM5sC21GhSHlhm 2q443kKjuUX2Fl6wv4 H2onXBmbw2KHbz knQ W9AhjVoamYhy2X0XoAK6KtcQk7frk9ASqgf8iob0kteFp9HN/86 QFLUiH7BQm Dh3tkDTBzIm4huCN4 bi71FLYLXLUYVWxcSC24S16Z11ihm771dFa 4w2taeAlhOEZHcE1w8uBXZPMlxlkT66Ohv QXZRf88g==";
$content = $_POST['data'];
$content =base64_decode($content);
$i = 0;
#$result = "";while($head = substr($content, $i, 128)) {
$i = 128; openssl_private_decrypt($head,$newsource,$res); $result .= $newsource;} $result = json_decode($result,true);
var_dump($result);
SDK 接続方法
1 Eclipse でデモを導入すると、2 つのステップが見られます:1)AlitvSDKLib には SDK 用のライブラリとリソースが含まれています
2)AlitvSDKDemo 参照上記の Lib 工程2
以下の図の構成に従って、SDK を導入する工程
1) 項目プロパティ内の構成
2) Java ビルド パスでの構成
3) マージされるマニフェストを構成する
プロジェクトのルート ディレクトリにある project.properties にコード行を追加します:manifestmerger.enabled=true