首页 奇怪问题 💢

支付宝异步回调验签返回false问题

今天对接支付宝当面付得异步回调。在使用 rsaCheckV1() 函数进行验签的时候不管怎么样都返回false。

环境

php 7.3+

thinkphp 6

mysql 5.7

发现问题

排查了很久,发现问题出现获取支付宝回调post值得时候,需要对 fund_bill_list 字段进行转义

下面是修改过得关键代码

关键代码

public function aliCallBack(Request $request)
{
    $post = $request->param();
    $post["fund_bill_list"]=htmlspecialchars_decode($post["fund_bill_list"]);
    $ali_pay = new AliPay;
    return $ali_pay->alipayAsynMsg($post);
}
public function alipayAsynMsg($params)
{
    $aopCerTClient = new AopCertClient;
    $aopCerTClient->alipayrsaPublicKey = env("alipay.alipayPublicKey");
    $sign_type = $params["sign_type"];
    $ret = $aopCerTClient->rsaCheckV1($params,null,$sign_type);
    if($ret){
        //验证成功
        if($params["trade_status"] == "TRADE_SUCCESS" 
           or $params["trade_status"] == "TRADE_FINISHED"){
            return "success";
        }
        return "success";
    }else{
        return "err";
    }
    return "err1";
}

至此问题成功解决。我也不知道为什么需要对 fund_bill_list 进行转义,但是在支付宝得开发文档中却丝毫没有提到。




文章评论

目录