验签失败自查方案-支付宝接口常见错误系列

来自    签名与验签 | 
作者:我是个导演  |  更新于:2017-08-02 13:07:29     
说明:
  验签只需要使用到支付宝公钥

错误原因:
  1.支付宝公钥使用错误导致
  2.验签方法使用错误
  3.参数错误导致,例如乱码,带自定义参数,编码格式。

自查流程(按照推荐流程检查)
  第一步重点检查):支付宝公钥使用是否错误参考这个帖子自查【点击查看

  第二步:验签方法错误(请使用下方的demo中的地址接收异步通知进行验签测试)

    说明:
    正常接口使用 AlipaySignature.rsaCheckV1,sign_type不参与签名
   特殊说明:AlipaySignature.rsaCheckV2方法生活号异步通知需要使用,会保留sign_type参数参与验签。

   异步demo分享(适用于所有支付类接口异步验签)
    java,php,.NET验签demo下载地址:https://docs.open.alipay.com/203/105910
    注意:请大家使用手机网站demo进行验签测试即可,使用文件中的notify_url相关的文件和方法

    自行实现验签参考:https://doc.open.alipay.com/docs/doc.htm?docType=1&articleId=106120

 第三步:异步通知返回参数检查
    说明:
      1.支付返回的通知不会乱码,一般java语言可能会在接收以后出现中文乱码,这个需要自己处理,demo中也给了一个方案(notify_url.jsp页面中。如果出现乱码就开启再测试):
//获取支付宝POST过来反馈信息
Map<String,String> params = new HashMap<String,String>();
Map<String,String[]> requestParams = request.getParameterMap();
for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {
    String name = (String) iter.next();
    String[] values = (String[]) requestParams.get(name);
    String valueStr = "";
    for (int i = 0; i < values.length; i++) {
        valueStr = (i == values.length - 1) ? valueStr + values[i]
                : valueStr + values[i] + ",";
    }
    //乱码解决,这段代码在出现乱码时使用
    //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
    params.put(name, valueStr);
}
     2.代码中开启debug(调试模式) 导致验签失败(这个问题可能比较少)。

如果大家根据自查还是没有解决,欢迎在帖子下面进行追问,按照下面格式进行提问(信息不全不回复,谢谢配合)
正确提问方式:使用环境(沙箱还是正式环境)+接口名称(中文+英文)+验签失败的交易号+返回的参数(提供&符号连接的格式)
如果解决了大家的问题,欢迎点赞评论支持一下
T_Mai | 2017-08-09 14:00:25
使用环境:正式环境  
接口名称:统一收单线下交易预创建(扫码支付)+ alipay.trade.precreate
验签失败的交易号:2017080921001004310247124588
返回的参数:gmt_create=2017-08-09 13:45:53, charset=utf-8, seller_email=1137753861@qq.com, open_id=20880051861821875469321013114231, subject=支付宝自定义测试, sign=mpMoen6mQ/ZPqkkWkDONDHo68beCCiy+W1BrB8Sw3g/7DbbXpvQr60gCscAYXJNXMz2ymBiqJJZNXJ/e7UwXMAwmUf9ZadzVZufaSr5Ly0MkVu+V1oTmI4P0PCamcb9+ZDkILKdIZxYCTV1fRr7cEMibLA05YM9/MB4w1YXi7Y7SiQ+HnKLXzNLVFqPhofNnMuz1okFGbGHLeuedI6MEXumrLEG3UXMT6j7oIqd1T4GTG7t87eFe5nViOZmGL46bHCRUPQbJvRv9aW95qPgK9XwHcvtK2i82ZpRyd6X+2R4eC1W0oWq2sq01zqleLKVdtNay0cQcU45yNLzQ43N+5A==, buyer_id=2088802411092315, invoice_amount=0.01, notify_id=7845f2b564a5a360905272d7bf0af39ie6, fund_bill_list=[{"amount":"0.01","fundChannel":"ALIPAYACCOUNT"}], notify_type=trade_status_sync, trade_status=TRADE_SUCCESS, receipt_amount=0.01, app_id=2017051107207776, buyer_pay_amount=0.01, sign_type=RSA2, seller_id=2088812519846400, gmt_payment=2017-08-09 13:45:58, notify_time=2017-08-09 13:45:58, version=1.0, out_trade_no=zyt1502257451116202309, total_amount=0.01, trade_no=2017080921001004310247124588, auth_app_id=2017051107207776, buyer_logon_id=186****7621, point_amount=0.00


ps:使用通不过验证,调用的AlipaySignature.rsaCheckV1方法。
大于 | 2017-08-09 15:34:12
使用环境:沙箱环境  
接口名称:手机网站支付接口+alipay.trade.wap.pay
验签失败的交易号:2017080921001004260200316695
返回的参数:gmt_create=2017-08-09 14:45:06&charset=utf-8&seller_email=fiddnb9170@sandbox.com&subject=清风1号的电表充值账单&sign=p8Dfl2eVusOrI9+iMORvS8J7vvw+m25rRfQwhHPa8VooP/a5cHOVYf0viY0BCs2anvNnaB/8qNevtRxUzQRTCNl0qLDg1x7Mb3+0k9vj15PEAJKtliXvF3YQzi5r3zo7x9mumb1UQVzKg4utfVFCv4aE7csXAkhy2n6W8EGZJl47jsP03uaSqloAjmS7IM9Gh3sC/VFF6CdgH91/USTnM6BjHpoj3c3uWjcYM4CVLTrvyVuu9Ln/iAlQDVkAexQjpOTqZb+0QaR+HoUbTPTNRzAfruMNX/gVTBC1eP4dwHPjMe2szV0XPMxrZ1tQJ27kRpTVULWs3OyemrvhEnmoYg==&buyer_id=2088102172380260&invoice_amount=50.00&notify_id=77bf3290afeec57694b09129e812dedi0a&fund_bill_list=[{"amount":"50.00","fundChannel":"ALIPAYACCOUNT"}]&notify_type=trade_status_sync&trade_status=TRADE_SUCCESS&receipt_amount=50.00&app_id=2016080500169110&buyer_pay_amount=50.00&sign_type=RSA2&seller_id=2088102169986633&gmt_payment=2017-08-09 14:45:06&notify_time=2017-08-09 14:45:07&version=1.0&out_trade_no=201708091444570001&total_amount=50.00&trade_no=2017080921001004260200316695&auth_app_id=2016080500169110&buyer_logon_id=arl***@sandbox.com&point_amount=0.00


ps:使用通不过验证,调用的AlipaySignature.rsaCheckV1方法。
大于 | 2017-08-09 15:41:09
大于:使用环境:沙箱环境  
接口名称:手机网站支付接口+alipay.trade.wap.pay
验签失败的交易号:2017080921001004260200316695
返回的参数:gmt_create=2017-08-09 14:45:0...
回到原帖
解决了,sgin不能先urldecode
小小开发者 | 2017-08-14 13:55:39
大于:解决了,sgin不能先urldecode回到原帖
怎么解决的啊 能详细说下吗
路哥哥 | 2017-08-17 15:05:41
subject传中文,异步通知验签就失败;传英文就没关系。
而且解决乱码问题那行代码我也添加上了,使用的签名方法也正确,真不到问题出现哪里了,总返回false
我是个导演 | 2017-08-17 15:57:23
路哥哥:subject传中文,异步通知验签就失败;传英文就没关系。
而且解决乱码问题那行代码我也添加上了,使用的签名方法也正确,真不到问题出现哪里了,总返回false
回到原帖
这个就是subject中文乱码导致的了,因为支付宝返回的值不会是乱码,这个需要你排查一下在你接收以后哪一步导致这个subject乱码了
xinshengdaxue | 2017-08-21 13:40:22
使用环境:正式环境  
接口名称:APP支付接口+alipay.trade.app.pay
验签失败的交易号:2017082121001004500247734605
返回的参数:gmt_create=2017-08-21 13:37:40, charset=utf-8, seller_email=xugaoyang01@gmail.com, subject=充值, sign=D8rtsrDx71xUTM3CO7w39qlucFmlEK+DHfOvthVIjuM2k3yL10A9czInFfG4CjyhM5uikRl6XKtkDAhMNQHsH63buKEmynguJ704cDsoFpcvbQ8BFOSEv1qpESEM91DL0HjrFe8nJ8iJVhYsfzXnNIx5OHetEmxonAN+ssKlr27GjYFDS8uKFoqUUijHqINK+ouhu/jyP3jA1rVawLU9W/W0KADCyigEad/u3BRWNPynhSP5jO14nYU0qHF9gB3axsMPTb0Gd1Z7LX8Brakxow8aCoh5ZLWnZruG3uUFuA6Tm71CmRVdRznQv4y76MUEbUqDFdWp4ZyMoYQ0ifuzMg==, buyer_id=2088222090503500, invoice_amount=0.01, notify_id=e3394f0e2e5ac3237b48f4a22f27c27juy, fund_bill_list=[{"amount":"0.01","fundChannel":"ALIPAYACCOUNT"}], notify_type=trade_status_sync, trade_status=TRADE_SUCCESS, receipt_amount=0.01, buyer_pay_amount=0.01, sign_type=RSA2, seller_id=2088721510444017, gmt_payment=2017-08-21 13:37:42, notify_time=2017-08-21 13:37:42, version=1.0, out_trade_no=150329385448110000088804, total_amount=0.01, trade_no=2017082121001004500247734605, auth_app_id=2017071107718651, buyer_logon_id=188****5949, point_amount=0.00
我是个导演 | 2017-08-21 14:23:12
xinshengdaxue:使用环境:正式环境  
接口名称:APP支付接口+alipay.trade.app.pay
验签失败的交易号:2017082121001004500247734605
返回的参数:gmt_create=2017-08-21 13:37:40...
回到原帖
查了一下你的这笔交易返回有问题: http状态码: 200, 返回: {"code":1,"result":"failure","server_status":[]}. 你是什么开发语言,如果是java和php可以参考上面的demo写法
xinshengdaxue | 2017-08-21 14:25:55
我是个导演:查了一下你的这笔交易返回有问题: http状态码: 200, 返回: {"code":1,"result":"failure","server_status":[]}. 你是什么开发语言,如果是java和php可以参考上面的demo写法回到原帖
java,因为服务端验签失败,所以我返回了failure,现在想知道为什么验签会失败
我是个导演 | 2017-08-21 14:50:32
xinshengdaxue:java,因为服务端验签失败,所以我返回了failure,现在想知道为什么验签会失败回到原帖
上面帖子已经说明公钥,参数和验签方法,建议你先检查公钥,或者使用我的demo进行验签。配置自己的公钥信息
如果有疑问,请截图你的支付宝公钥获取的位置,带上你的appid参数一起截图发出来
xinshengdaxue | 2017-08-21 16:16:56
我是个导演:上面帖子已经说明公钥,参数和验签方法,建议你先检查公钥,或者使用我的demo进行验签。配置自己的公钥信息
如果有疑问,请截图你的支付宝公钥获取的位置,带上你的appid参数一起截图发出来
回到原帖
已解决,谢谢
畅联 | 2017-08-21 17:24:47
使用环境:正式环境  
接口名称:电脑网站支付
验签失败的交易号:2088702207144740
返回的参数:array (
  'gmt_create' => '2017-08-21 16:46:30',
  'charset' => 'UTF-8',
  'gmt_payment' => '2017-08-21 16:46:42',
  'notify_time' => '2017-08-21 16:46:43',
  'subject' => '123',
  'sign' => 'jr2iqhn06QVUbylATB5nKachDIPl/qrz66pmsxCumw92RkpwT7xJata+/Wm4rjMWQIO3f8xpqWnD3zw5Ow697WJir8n8fImQ/WlYyClukwz86CQUzFK00QeMfeFR1jobPBxeXm04psrNDq2dW2UVj8niwWh64RAZ64ES0MtsAreTLgaHa1a0dg+phSu0lAxtM/QfCYPdEKxv8M2bG6nP9fIXyYyTykn+BBwurhmwaAFr32pvbVXFmWp3MjEJjnSWOulZlaYtp9lPYic4e2fXK2Fd3FxekmM8g6cIOPvKAB4fDf5KpZXs5i1G/9sNkLJm/7E5lbNgSJ0WLBMCSKblcA==',
  'buyer_id' => '2088702207144740',
  'body' => '123',
  'invoice_amount' => '1.00',
  'version' => '1.0',
  'notify_id' => 'e724b69fa1378a706411cdd7edf229flpm',
  'fund_bill_list' => '[{\\"amount\\":\\"1.00\\",\\"fundChannel\\":\\"ALIPAYACCOUNT\\"}]',
  'notify_type' => 'trade_status_sync',
  'out_trade_no' => 'charge-order_charge-1-985-1616-1-1503305192',
  'total_amount' => '1.00',
  'trade_status' => 'TRADE_SUCCESS',
  'trade_no' => '2017082121001004740299337263',
  'auth_app_id' => '2017042707009550',
  'receipt_amount' => '1.00',
  'point_amount' => '0.00',
  'app_id' => '2017042707009550',
  'buyer_pay_amount' => '1.00',
  'sign_type' => 'RSA2',
  'seller_id' => '2088621904266594',
);
我是个导演 | 2017-08-21 17:29:47
畅联:使用环境:正式环境  
接口名称:电脑网站支付
验签失败的交易号:2088702207144740
返回的参数:array (
  'gmt_create' => '2017-08-21 16:46:30',
  'charset' => ...
回到原帖
查了一下你的确实是验签失败了,你使用的应该是php开发语言的,请参考我的这边帖子测试。先使用demo测试,如果demo测试也验签失败,肯定是你的公钥使用错误。在按照帖子第一步检查支付宝公钥,有疑问在追问
我是个导演 | 2017-08-21 17:30:04
畅联:使用环境:正式环境  
接口名称:电脑网站支付
验签失败的交易号:2088702207144740
返回的参数:array (
  'gmt_create' => '2017-08-21 16:46:30',
  'charset' => ...
回到原帖
忘记了帖子地址https://openclub.alipay.com/read.php?tid=1680&fid=6
我的回复
回复数
 191
阅读数
 19560

返回顶部