2.2.1 通讯过程
合作方请求接口上送时,提交六个参数:
encryptData=加密后的请求报文;
encryptKey=加密后的AES对称密钥;
cooperator=合作方标识;
signData=请求报文签名;
reqMsgId=请求流水号(即订单号);
tranCode=交易服务码。
version=接口协议版本号
数族扫码支付平台返回应答报文,返回六个参数:
encryptData=加密后的应答报文;
encryptKey=加密后的AES对称密钥;
signData=应答报文签名;
reqMsgId=请求流水号;
resMsg=结果描述;
reqCode=结果码。
详细步骤如下:
合作方、数族扫码支付平台生成各自RSA公私钥、AES对称密钥。其中,合作方RSA公私钥为(cooperatorPubKey、cooperatorPriKey),合作方AES对称密钥为cooperatorAESKey;数族扫码支付平台RSA公私钥为(swPubKey、swPriKey),数族扫码支付平台AES对称密钥为swAESKey。生成密钥后交换各自RSA公钥。
合作方请求报文时,需要用合作方AES对称密钥cooperatorAESKey加密请求报文:encryptData=AES.encryptToBase64(Data,cooperatorAESKey),其中encryptData是Base64编码的字符串;用合作方RSA私钥签名请求报文:signData=RSA.signToBase64(Data,cooperatorPriKey),其中signData是Base64编码的字符串;用数族扫码支付平台RSA公钥加密合作方AES对称密钥cooperatorAESKey:encryptKey=RSA.encryptToBase64(cooperatorAESKey,swPubKey),其中encryptKey是Base64编码的字符串。
数族扫码支付平台收到合作方请求报文(包含上文要求的7个参数),根据cooperator取出对应的密钥,用数族扫码支付平台RSA私钥解密encryptKey:cooperatorAESKey=RSA.decryptFromBase64(encryptKey,swPriKey);用解密得到的cooperatorAESKey解密encryptData:Data=AES.decryptFromBase64(encryptData, cooperatorAESKey);用合作方RSA公钥验证签名:boolean result=RSA.checkSignFromBase64(Data,signData,cooperatorPubKey);最后根据callBack回调地址异步应答。
同理,数族扫码支付平台应答报文,合作方端处理类似上述流程。
【注】数族扫码支付平台每次通讯报文的AES密钥不一样。