郝立国 2018-08-02 08:39:33 8113次浏览 2条回复 1 1 0

踩了三天的坑,一直找不到收不到回调的原因,而且联系客服也显示回调地址与自己填的不符合,查了生成的日志,发现和自己提交的一直,结果百度发现了问题所在,特此记录一下,方便其他人出坑

  1. 关于设置公钥
    一定要注意,是“支付宝公钥”,不要填应用公钥,不然就坑了
  2. 关于回调的域名地址(本人就是在这坑了) 干净些,不要有参数,如:/*****.com/notify.php,千万不要写:*****.com/back.php?r=notify。 这个注意是针对用框架的,一定要把url美化了,不然直接用带参数的,回调的时候会把“?”后面的参数全部去掉的, 那么肯定访问不到实际回调函数了,只能是首页之类的了
  3. 注意设置回调域名设置 在支付宝申请应用的时候会有 一个地方填回调地址和回调网关,这个一定要区分好
  4. 关于参数中含有中文 支付宝回调是直接给的中文的,没有编码。自己记录日志的时候编码再放到日志的,所以直接拿日志里面的内容用签名工具验证,怎么都验证不通过。所以用demo里的默认不编码就可以了,不要把中文编码了。

原文链接:https://blog.csdn.net/u012533474/article/details/80108575 不是我的,百度到的,尊重作者

觉得很赞
  • 回复于 2018-08-03 16:54 举报

    厉害了666

  • 回复于 2018-08-04 17:22 举报

    这几天我也遇到一个比较恶心的,不知道为什么用yii2自带的 Yii::$app->request->post() 方法去获取POST参数会被过滤?导致数据验签在验签证书的时候一直失败【error:0906D06C:PEM routines:PEM_read_bio:no start line】, 最后想到把获取POST参数方式用$_POST直接获取,也没用getRawBody去测试,毕竟还是要爬坑。

    11 条回复
    回复于 2018-08-05 15:26 回复

    public $enableCsrfValidation = false; 把当前控制器的CSRF关闭就可以获取了

    回复于 2018-08-06 16:59 回复

    关闭了就不安全了,post请求把{"csrf-param":csrf-token}参数加上个这就行了(分别是页面meta的csrf-param和csrf-token的值)

    回复于 2018-08-06 19:34 回复

    csrf验证默认这个controller都关闭了,获取到post数据也正常,只是一直不能验签正常,直接获取POST就正常,那只能想到的是Yii自带的post过滤了支付宝异步服务器发过来的数据

    回复于 2018-08-06 19:35 回复

    对于第三方支付异步服务器的话必须局部关闭csrf,否则会一直400

    回复于 2018-08-06 22:55 回复

    yii框架没有过滤数据,post接收的数据能验签了?你应该是应用公钥和支付宝公钥没整对,用支付宝给的软件生成的公钥添加到支付宝上,然后获取到支付宝公钥,这才是你需要的,还有一种就是你追一下代码,他里面的代码有需要更改的

    回复于 2018-08-06 23:00 回复

    关键是支付宝不给你携带这些东西,所以只能关闭

    回复于 2018-08-07 12:36 回复

    奇怪的就是在这里,我只是更改接收POST参数方式就正常验签,这里就和支付宝配置没关系了。

    回复于 2018-08-07 13:03 回复

    查看过用框架接收的参数和$_POST有什么不同了吗,我的是接收数据都一样的。。

    回复于 2018-08-07 18:34 回复

    打印的参数是一样的,这也是比较好奇的

    回复于 2018-08-08 08:32 回复

    @liscookie 个人建议用框架的接收方式接收数据。将接收到的数据,手动去验证一下是否能通过,追一下代码看看吧,当然了 是你没啥事的情况下。 O(∩∩)O

    回复于 2018-08-10 15:53 回复

    嗯嗯,是的,现在的话我可能暂时用默认的$_POST接受参数进行验证,等API上线运行稳定之后去追查该问题的来源

您需要登录后才可以回复。登录 | 立即注册