最近在接第三方sdk,开始一直没有遇到什么问题,直到接酷派sdk的时候,因为支付签名验证方式和其他sdk不一致,所以卡在这关卡。仅此记录,以供参考
首先,因为官方没有提供python的demo,先把酷派官方java的demo贴出来看一下
public static void main(String[] args) {
String reqJson = "{\"exorderno\":\"iVk4eRZknftx4vAJm5VE\",\"transid\":\"02115061814204200016\",\"waresid\":1,\"appid\":\"3000962200\",\"feetype\":0,\"money\":1,\"count\":1,\"result\":0,\"transtype\":0,\"transtime\":\"2015-06-18 14:20:59\",\"cpprivate\":\"cp private info!!\",\"paytype\":401}";
String sign = "56b10877c6ecf3fa3c4805ca8b6f26a8 5fd39828d76b54faf8a034e4d509150b 2519141767960a2e1bfd27b04dbcc8b2";
String appkey = "RkIwNTlFM0Y5RTEzNTA5NDcxNEMxMkY1OTREQUQxM0VFNEEwRTI2N01UZ3hNamd6T0RRek1ERTVORGd4T0RreU9Ua3JNVGsxTlRBME5EQXlNakF5TmpRM056RTVPRE13TkRZNE5ESTJOekUxTWpVMk5EUXdOREEz";
System.out.println(CpTransSyncSignValid.validSign(reqJson, sign, appkey));
}
/**
* Desc:cp交易同步签名验证
*
* @param transdata
* 同步过来的transdata数据
* @param sign
* 同步过来的sign数据
* @param key
* 应用的密钥(商户可从商户自服务系统获取)
* @return 验证签名结果 true:验证通过 false:验证失败
*/
public static boolean validSign(String transdata, String sign, String key) {
try {
String md5Str = MD5.md5Digest(transdata);
String decodeBaseStr = Base64.decode(key);
String[] decodeBaseVec = decodeBaseStr.replace('+', '#').split("#");
String privateKey = decodeBaseVec[0];
String modkey = decodeBaseVec[1];
String reqMd5 = RSAUtil.decrypt(sign, new BigInteger(privateKey),
new BigInteger(modkey));
if (md5Str.equals(reqMd5)) {
return true;
} else {
return false;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;