柔晶美网络工作室

柔晶美网络工作室,倾心于web技术的博客站点

关注我 微信公众号

您现在的位置是: 首页 > 博客日记

Laravel6使用yansongda/pay扩展包进行微信或支付宝支付,异步回调不执行的问题解决

2019-10-26 admin laravel  1876

这几天在做微信和支付宝支付模块,为了开发效率使用yansongda/pay扩展包,但遇到一个问题:异步回调不执行,代码和官网类似的,比如支付宝回调部分:

    public function notify()
    {
    $config = config('pay.alipay');
        $alipay = Pay::alipay($config);
        try{
            $data = $alipay->verify(); //验签
        if ($data) { // 验证成功
$trade_status = $data->trade_status;// 交易状态
if ($trade_status == 'TRADE_FINISHED' || $trade_status == 'TRADE_SUCCESS') {
//此处支付成功后的业务逻辑处理根据自己需求        
$dingdan = $data->out_trade_no; // 订单号
$jyh = $data->trade_no; // 支付宝交易号
$dkje = $data->total_amount; //订单总金额
$body = $data->body; //订单描述128限制字符,用来传递id和bm
$sz = explode("-",$body);//分割为数组,前面为id,后面为bm
$id = $sz[0];
$bm = $sz[1];
DB::table($bm)->where('id',$id)->update(['审核情况'=> '审核通过','备注'=> $dingdan]);
Log::debug('Alipay notify', $data->all());
return $alipay->success();
}
        } else {
            // 验证失败
            echo "fail";
        }     
        } catch (\Exception $e) {
            // $e->getMessage();
        }
//return $alipay->success();
    }

经过无数次测试,支付成功,但是到try验签这步都不执行了。为了更好的测试,我在try前和try后加入以下代码,写入log文件测试:

$path=storage_path('logs/aaa.log');
$str=time().'回调'; 
file_put_contents($path,$str);//把字符串内容存储到aaa.log中。

测试证明,是try后面不执行。查看服务器nginx日志,支付宝服务器已回调了,有post记录。百度搜索了许多都是查参数,查链接是否有?等,但我这是不存在这问题的。将路由从post改为any,GET访问该回调页面是正常的,最后想到,回调是post,get正常不代表post正常,用精易网页调试助手post发现了问题:

原来是laravel的csrf安全机制导致的问题,接下来就容易了,关闭相应路由的csrf验证,找到app/Http/Middleware/VerifyCsrfToken.php文件,添加:

namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
    /**
     * Indicates whether the XSRF-TOKEN cookie should be set on the response.
     *
     * @var bool
     */
    protected $addHttpCookie = true;
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        '/aliht_url',//支付宝异步回调不启用csrf
        '/notify_url',//微信支付回调不启用csrf
    ];
}

这样,异步回调就能正常走下去了。

特此记录,以备今后查询。

文章评论


需要 登录 才能发表评论
热门评论
0条评论

暂时没有评论!