写这篇随笔的目的主要是为了记录近期对接多家支付通道,在这过程中的经验,总结和教训
目前对接的支付通道提供API接口,保证接口安全的方式不尽相同,参数加签和验签的方式也有区别
例如:针对统一下单接口,下面例举出常见的通道使用的加签方式
原生微信支付: 提供MD5,SHA256两种加签方式
原生支付宝支付:提供RSA,RSA2两种加签方式
银盛支付通道:提供RSA加签方式
酷点支付通道:提供MD5加签方式
等等
1.sign字段,通常不参与签名
2.字段值为空,通常该字段不参与签名
3.待签名的内容,通常要对签名内容进行ASCII排序
排序tips,可以先对获取签名内容Map中的所有Key值,将Key值存放到List集合中,使用API如下进行排序
Collections.sort(keys);
4.商户私钥证书或商户私钥字符串,商户私钥证书通常时商户自己生成或购买,具有时效性,商户私钥证书自己保留,商户公钥证书存放在支付通道后台,
商户可以通过私钥证书和证书密钥获取对应的私钥字符串
如果使用私钥证书加签,则可以把私钥证书缓存到本地,避免每次都要从磁盘读取证书带来的时间损耗
5.支付通道平台公钥证书,支付通道平台通常会提供给商户公钥证书或公钥字符串,用于验签
6.验签异常:
Q:got 128 but was expecting 256
A: 通常是在验签时,公钥证书的类型错误 ,参考:https://opendocs.alipay.com/support/01ravz
7.RSA的私钥格式PKCS1与PKCS8,Java只能用PKCS8格式的私钥