支付宝RSA2支付|小实验 接通支付回调与支付通知接口 return & notify 完美踩坑,记录一次心酸旅行时光码农生活

小实验目标

对接支付宝,实现支付、转账功能。上一次做实验已经接通了支付、转账以及相关的查询接口,但是没有接上同步通知与异步通知。今天的小实现目标就是把这2个也接通!

小实验约束

由于涉及到转账功能,所以采用了目前阿里蚂蚁金服最高级别的RSA2进行验签。

小实验参考资料

电脑网站支付 Demo

https://docs.open.alipay.com/270/106291/

那些年我们踩过的坑

神坑之一:SHA256WithRSA vs SHA1WithRSA

本次小实验的坑在于支付宝提供的rsaCertCheckV2无法正常验签,RSA2对就的是SIGN_SHA256RSA_ALGORITHMS(SHA256WithRSA),而支付宝sdk对应的rsaCertCheckV2使用的却是SIGN_ALGORITHMS(SHA1WithRSA),不明白这个坑是怎么挖出来的。通过二次组装skd提供的方法,实现了一个能正常验签的rsaCertCheckV2。

神坑之二:SignCheckContent到底是V1还是V2

按RSA2对应V2的直观感受,拿AlipaySignature.getSignCheckContentV2获取得到待签名的内容,结果签名通不过,使用AlipaySignature.getSignCheckContentV1反而通过了。

神坑之三:换java jar包

ps:有网友说要替换local_policy.jar、US_export_policy.jar,因为我之前已经换过了,所以没有踩到这个坑~

实验成果

异常通过接口(Nofity),调通,拿到可供测试的参数:

{"gmt_create":"2019-09-16 17:57:47","charset":"UTF-8","gmt_payment":"2019-09-16 17:57:51","notify_time":"2019-09-16 17:57:51","subject":"醉么商城订单Zuime1568627848379","sign":"CcQEj2Jm6vk2ECjXxsD0Dq7kJVd9c6OZb8QtSnL39GvpXf+nLpMBlsFjnkBQOfVLLX8Nl3cZ6aND47hIujgl3FB2TWJwxOoPCNpv+VSlKQJvwEE9vdycQV+iQ8CZE4ibX6yXdd4VVF+TyjrwJExYbxSvMa6VAprzEcGUkpVYOpV1BUGWuKK/7k1F6eNj6RbEDG34rBet96G7rYGLQs2f3CPpxuBrOhfzVAgNEbpX9blX+LwjMEYPhXAJpqykHUxIs953sEnwIHTKqwqUxtVHqVpYyc2qeAhK3p4FL5tjhz1Aji0CN+NNdwcBKR4uCO9j/bRHCA+aAZwkAsaTlidgmg==","buyer_id":"2088002249904873","body":"醉么商城订单Zuime1568627848379","invoice_amount":"1.00","version":"1.0","notify_id":"2019091600222175751004870502101657","fund_bill_list":"[{\"amount\":\"1.00\",\"fundChannel\":\"ALIPAYACCOUNT\"}]","notify_type":"trade_status_sync","out_trade_no":"200001568627848379","total_amount":"1.00","trade_status":"TRADE_SUCCESS","trade_no":"2019091622001404870517313294","auth_app_id":"2016052201429140","receipt_amount":"1.00","point_amount":"0.00","buyer_pay_amount":"1.00","app_id":"2016052201429140","sign_type":"RSA2","seller_id":"2088021741763089"}out_trade_no: 200001568627848379trade_no: 2019091622001404870517313294trade_status: TRADE_SUCCESS

同步通知(return),调通,验签通过,拿到 trade_no

https://i.zuime.com/order/alipay/return?charset=UTF-8&out_trade_no=200001568627848379&method=alipay.trade.page.pay.return&total_amount=1.00&sign=EUXE9Hj%2FetIMQQ5sZrxEzzM6YiDbz91a9lE7v4zjxG4iMT8o6%2Fh6UiHiHc9fA4wiIoaQ8zswJbnpDeda%2BxdK6Q97ZUBBIr5kKF%2BYd4X2%2FgWhvDSD2flwic2%2Ff0JTm0Louy%2B1H6TZ80zaV9cYi68YiQunrDgVF1EOHvE0v%2B%2F42Gs6bvA7p7V%2FN8YnjEnR0smzI2hRJoY09DDC5Yk0%2BNmLyPQgEvar1L7rR6RAlPf4f8mDHH1gU%2B3D8WCtuERT%2FscrWER06V4rteSYj5NQaQ%2F6UyZ%2Fc%2FpBwgcxB6ojVmQKi2LSqEEEt%2BYIH7SpI5QhtiK4ycl2PVK%2FpghR%2FzHjh3cGWQ%3D%3D&trade_no=2019091622001404870517313294&auth_app_id=2016052201429140&version=1.0&app_id=2016052201429140&sign_type=RSA2&seller_id=2088021741763089&timestamp=2019-09-16+17%3A58%3A02
签名通过,tradeNo 200001568627848379

完美调通支付宝RSA2接口的Demo源代码可关注公众号【Yuema约吗】,回复“alipay”获取。

核心代码片段

/**   * 修复支付宝SDK的RSA2验签Bug   * @param params   * @return   * @throws Exception   */  public boolean rsaCertCheckV2(Map<String, String> params) throws Exception{    //获取        String sign = params.get("sign");        String content = AlipaySignature.getSignCheckContentV1(params);    return AlipaySignature.rsaCertCheck(content,sign, alipayCertPath, AlipayConstants.CHARSET_UTF8,AlipayConstants.SIGN_TYPE_RSA2);  }

今天实验覆盖的是return与notify,结合上一次分享,已经覆盖了接支付宝所需的接口。想了解支付、转账相关接口实验数据与踩坑经验分享,可查看上一篇分享。

支付宝RSA2支付&转帐接口集成续集|继续拿jblog当实验田练习支付宝RSA2集成 & 网银直连 直连网银 转账到银行卡下线了

PS: 我不知道使用沙盒进行测试的小伙伴是怎么配置的,卡死在支付宝证书这块,沙盒管理界面没有下载的入口,导致无法进行RSA2的沙盒实验,现在使用的是正式帐号^_^​

发表评论

电子邮件地址不会被公开。 必填项已用*标注