天天看点

invalid-signature(无效签名)自查方案

一,错误说明: 

  1.密钥不匹配(70%都是密钥不匹配导致) 

  2.参数错误,例如乱码,不符合支付宝要求,自定义参数,特殊字符 

  3.签名方法错误 

二,检查流程 

  第一步:根据接口查看是否有支付宝官方demo,如果有优先使用官方demo测试(只配置账号和密钥测试,不要对demo做任何修改) 

  demo列表:

            接口名称                   支持语言                   demo下载地址
                  电脑网站支付                   java,php [url]https://docs.open.alipay.com/270/106291/[/url]
                  手机网站支付 [url]https://docs.open.alipay.com/203/105910/[/url]
                  APP支付                   iOS,Android [url]https://docs.open.alipay.com/54/104509[/url]
                  当面付                   java,php,.NET [url]https://docs.open.alipay.com/194/105201/[/url]

    a.如果使用官方测试,能够正常支付,说明您的密钥密钥和账号没有问题,按照下面步骤继续检查 

    b.使用使用官方demo测试,依然报错“无效签名” ,请走第二步密钥检查 

 第二步密钥检查: 

    首先检查使用的密钥是否匹配按照这个帖子检查:[url]https://openclub.alipay.com/read.php?tid=1486&fid=46[/url] 

    如果验证失败建议重新生成一对密钥进行商户公钥上传私钥配置到项目中发起测试 

  第三步:参数错误 

  不管是什么接口,如果报了这个错误,对照官方请求参数文档,只传必填参数,其他参数先注释,缩小错误范围,先保证使用必填参数请求可以成功。 

  输出请求参数以&符号(示例如下)和官方请求必填请求参数对比,查看参数中是否有乱码,自定义参数或者特殊字符 

复制代码
total_amount=0.10&timestamp=2016-11-02+18%3A34%3A19&sign=G3WI0czviMAOzS5t0fYaDgK32sGpjkkXYVFTpYMtgX8JaXLiGiUTO%2F2IHogcCFT96jBCLZ6IsNzd%2BmxkB%2FRuwG%2F7naQk1qReuORMkrB5cpBf9U40bIUoCmSNqtANsTE2UPV7GKegYG2RqoCRScTmeFAFHj5L7zsM%2BLuYb9mqN3g%3D&trade_no=2016110221001004330228438026&sign_type=RSA2&auth_app_id=2014073000007292&charset=UTF-8&seller_id=2088411964605312&method=alipay.trade.page.pay.return&app_id=2014073000007292&out_trade_no=20150g320g010101001&version=1.0​      

  第三步签名方法错误: 

    服务端SDK方式签名:(支持java,php,.NET ) 

   服务端SDK下载地址:

[url]https://docs.open.alipay.com/54[/url]

     pageExecute:唤起网页进行支付方式,用于手机网站,电脑网站支付接口。 

     sdkExecute:生成签名字符串,只能用于APP支付接口 

     execute:用于当面付,以及开放平台的大部分接口 

   代码详解(php语言为例,其他开发语言调用方式相同): 

    pageExecute手机网站为例:

$request = new AlipayTradeWapPayRequest ();
$request->setBizContent("{" .
        ""subject":"测试"," .
        ""out_trade_no":"201703290000001"," .
        ""total_amount":0.01," .
        ""product_code":"QUICK_WAP_PAY"" .
        "  }");
 //调用的签名方法
$result = $aop->pageExecute ($request);
echo $result;      

 sdkExecute APP支付为例 

$request = new AlipayTradeAppPayRequest();
$request->setBizContent("{"out_trade_no":"".$date.$arr[0]."","total_amount":0.01,"product_code":"QUICK_MSECURITY_PAY","subject":"app测试"}"