Alipay, China's leading third-party online payment solutionAlipay, China's leading third-party online payment solution

线上支付集成

Online payment是商户跳转到支付宝APP进行支付的解决方案

image

一、流程及接口参数信息

Mobile - App to App/Mobile website to App 流程

https://global.alipay.com/docs/ac/gr/macau#kNM79 Online Payment Flow (Mobile)

PC Website 流程

https://global.alipay.com/docs/ac/gr/macau#Tb18B Online Payment Flow (Web - Scan QRCode)

接口文檔及注意事項

https://global.alipay.com/docs/ac/gr/macau#oN74h

  • 建议参考example里各APIrequest, response
  • 所有Request都有requestMsgId,建议使用UUID,用于request的唯一标示
  • 异步通知接口补充说明:支付宝在完成商家的请求数据处理后,服务器会通过主动通知(notify)将其处理的结果数据通知商家网站。这些结果数据是来自服务器的异步通知参数。请注意,这里的商户服务端接收到的是文档里request的描述,然后返回的是response的样式

 

二、最佳实践

  • 建议以异步通知支付结果为准,并以主动查询支付结果保底,即设置定时器,如超时未收到异步通知则需要做主动查询
  • 支付结果若为U-unknown, 则需隔10秒再次做主动查询
  • 设置订单超时机制,如15分钟未支付,则需做主动撤销(cancel接口)

 

三、签名及验签

https://global.alipay.com/docs/ac/gr/signature

 

数字签名使用简介:客户端和支付宝必须在进行API调用之前交换RSA密钥,并且RSA密钥的长度必须为2048位。当对Alipay进行API调用时,客户端使用RSA私钥对API请求进行签名。收到API请求后,支付宝将使用客户端的RSA公钥来验证签名是否与API请求的内容匹配。同样,当客户端收到API响应时,强烈建议客户端使用支付宝的RSA公钥来验证API响应的签名。

1、签名生成步骤

1.1、通过OpenSSL或者其他工具获取RSA密钥对,分别生成后缀为pem格式的私钥和公钥,将公钥上传到Alipay服务器交换公钥以便进行后续签名验证。

a、对于Java开发人员,需从控制台中pkcs8私钥输出中删除页眉、页脚、回车符和空格。b、使用openssl创建私钥后,如果使用java,则需要将私钥转换为pkcs8格式。如果使用.net或者php,则无需将私钥转换为pkcs8格式。)

1.2、提取要签名的request请求内容,确认参数和格式无误(很重要)。

image

1.3、使用SHA256withRSA算法散列JSON内容。然后,使用客户端的RSA私钥对值进行签名以获得签名。为了获得更高的安全级别,RSA密钥对的长度必须为2048位。

1.4、通过Base64编码进行签名。

1.5、使用签名之后获得的字符串作为Signature参数值。与请求的json数据合并成整个API请求。

1.6java端签名生成样例代码参考:(https://global.alipay.com/docs/ac/gr/signature#6a947849

 

2、签名校验步骤

2.1使用正则表达式而不是JSON对象,将完整的响应内容分为两部分,响应JSON字符串和签名字符串。

image

2.2、通过使用SHA256算法散列响应JSON字符串以获得消息摘要。

2.3、使用公钥进行解密签名到消息摘要。

2.4、比较在步骤2和步骤3中获得的两个消息摘要。如果摘要相同,则表明已签名的数据尚未更改。

2.5java端签名校验样例代码参考:(https://global.alipay.com/docs/ac/gr/signature#895424b6

 

四、对帐

https://global.alipay.com/docs/ac/gr/macau#yWnju