今天对接支付宝当面付得异步回调。在使用 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 进行转义,但是在支付宝得开发文档中却丝毫没有提到。