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

同步通知验签

什么是同步通知?

同步通知是通过GET方法给接口调用者同步返回的接口调用结果。在调用支付宝接口时,返回页需要被设置目标URL以便之后能够处理接收到的同步通知信息。同步通知通常有两种返回形式:returnURL形式和XML形式。

注意:

交易状态不可通过同步通知确认。

returnURL形式的同步通知:

返回页会使得支付完成后页面跳转回商家的网站(或其他指定页面)。返回页在不同编程语言示例代码中是以下页面:

  • Java: return_url.jsp
  • Php: return_url.php
  • C#: return_url.aspx.cs

XML形式的同步通知:

很多情况下,同步通知是以XML形式返回。返回XML同步通知后,您当前的支付宝网关页面(https://intlmapi.alipay.com/gateway.do)将自动刷新,并输出支付宝的处理结果。

同步通知验签

收到同步通知后,您需要对通知验签。只有签名验证通过才能信任收到的通知。请完成以下步骤进行同步通知验签:

MD5签名类型

  1. 生成待签名字符串:
    a. 将signsign_type字段移除。
    b. 将剩下的字段用字母顺序排列。
    c. 将所有字段通过&符号拼接起来。
    注意:
    对于XML形式的异步通知,返回参数是存放在节点当中。您可以讲每个节点名等同于参数名,节点值等同于参数值,使用与returnURL形式的异步通知同样的步骤进行验签。例如,来自create_forex_trade接口的同步通知示例:
    out_trade_no=test20181109153145&total_fee=0.01&trade_status=TRADE_FINISHED&sign=32c532376eee9281fa4d424dd4a40e5b&trade_no=2018110922001332950500389138&currency=USD&sign_type=MD5
    其待签名字符串:
    currency=USD&out_trade_no=test20181109153145&total_fee=0.01&trade_no=2018110922001332950500389138&trade_status=TRADE_FINISHED
  2. 获取mysign参数的值:
    a. 将MD5密钥拼接到待签名字符串的尾部。
    b. 使用各自语言对应的MD5加密函数对拼接了MD5密钥的字符串进行加密,得到的加密值即为mysign的值。
  3. mysignsign的值做相等判断: 得到的加密值mysign与支付宝返回的参数sign做相等判断,如果相等,则验证通过。

RSA2/RSA签名类型

  1. 生成待签名字符串:
    a. 将signsign_type字段移除。
    b. 将剩下的字段用字母顺序排列。
    c. 将所有字段通过&符号拼接起来。
    例如,来自create_forex_trade接口的异步通知示例:
    注意:
    对于XML形式的异步通知,返回参数是存放在节点当中。您可以讲每个节点名等同于参数名,节点值等同于参数值,使用与returnURL形式的异步通知同样的步骤进行验签。例如,来自create_forex_trade接口的同步通知示例:
    currency=USD&out_trade_no=FALCN32YWXN2CL4KFT8&trade_no=2020010222001331421405964515&total_fee=108.00&trade_status=TRADE_FINISHED&sign=bOQ2PdVHqBRK7UuewOIFlgQjyKdAVN7itA1VNu3MB+jtK+9Z2TPyTYJXngmwHzfHD44AVNaN90YXoHweivSKU+GmHxlJMBStT1Pie+AemJhJ9J126WMg5GaE+7xmp0V3zxuwFupzJi+A2iX+XxHTv6jOchDEESFSl5W6UXZX1AI&sign_type=RSA2
    其待签名字符串:
    currency=USD&out_trade_no=FALCN32YWXN2CL4KFT8&total_fee=108.00&trade_no=2020010222001331421405964515&trade_status=TRADE_FINISHED
  2. 将签名参数使用base64解码为字节码串。
  3. 使用RSA2/RSA验签方法验证签名。将待签名字符串,经过based64解码的签名参数及支付宝公钥传入RSA2/RSA验签方法,根据返回结果判定是否验签通过。RSA验签方法示例:
copy
public static boolean verify(String content, String sign, String ali_public_key, String input_charset)

注意:

    • 更多关于RSA2/RSA验签方法示例的信息,请参见示例代码下载
    • 获取支付宝公钥,请联系支付宝国际技术支持团队(overseas_support@service.alibaba.com)。