支付宝 使用支付宝公钥验签
2018-10-26 18:53 更新
阅读角色:技术同学
支付宝开放平台SDK封装了签名和验签过程,只需配置账号及密钥参数,强烈建议使用。
TIPS:文中代码部分以JAVA语言演示,其他语言请参考各自SDK。
使用开放平台SDK接入
同步返回和异步通知报文格式及验签方法有所区别。
同步返回验签
开放平台SDK封装了同步返回验签实现,只需在创建DefaultAlipayClient
对象时,设置请求网关(gateway
),应用id(app_id
),应用私钥(private_key
),编码格式(charset
),支付宝公钥(alipay_public_key
),签名类型(sign_type
)即可,同步返回报文时会自动进行验签。
AlipayClient alipayClient = new DefaultAlipayClient(gateway,app_id,private_key,"json",charset,alipay_public_key,sign_type);
异步通知验签
某些情况下(比如扫码支付成功时),支付宝会给商户发送异步通知。
如果某商户设置的通知地址为https://api.xx.com/receive_notify.htm,对应接收到通知的示例如下:
https://api.xx.com/receive_notify.htm?total_amount=2.00&buyer_id=2088102116773037&body=大乐透2.1&trade_no=2016071921001003030200089909&refund_fee=0.00¬ify_time=2016-07-19 14:10:49&subject=大乐透2.1&sign_type=RSA&charset=utf-8¬ify_type=trade_status_sync&out_trade_no=0719141034-6418&gmt_close=2016-07-19 14:10:46&gmt_payment=2016-07-19 14:10:47&trade_status=TRADE_SUCCESS&version=1.0&sign=kPbQIjX+xQc8F0/A6/AocELIjhhZnGbcBN6G4MM/HmfWL4ZiHM6fWl5NQhzXJusaklZ1LFuMo+lHQUELAYeugH8LYFvxnNajOvZhuxNFbN2LhF0l/KL8ANtj8oyPM4NN7Qft2kWJTDJUpQOzCzNnV9hDxh5AaT9FPqRS6ZKxnzM=&gmt_create=2016-07-19 14:10:44&app_id=2015102700040153&seller_id=2088102119685838¬ify_id=4a91b7a78a503640467525113fb7d8bg8e
开放平台SDK提供了AlipaySignature.rsaCheckV1
方法,可以使用该方法对通知报文验签。
/**
@param params 参数列表(包括待验签参数和签名值sign) key-参数名称 value-参数值
@param publicKey 验签公钥
@param charset 验签字符集
**/
boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset)
TIPS:生活号异步通知需要使用AlipaySignature.rsaCheckV2方法,会保留sign_type参数参与验签。
未使用开放平台SDK
如果未使用开放平台SDK,需要自行实现验签过程,参考此处流程。
以上内容是否对您有帮助:
更多建议: