php如何接收支付宝应用网关发送的POST请求方式,参数又是GET请求的数据格式

    • 配置支付宝应用网关
    • 如何接收支付宝异步通知(应用网关接收请求)
    • 将&连接的参数分割成数组实例:
    • 难点

配置支付宝应用网关

首先要在服务器上写一个接口,然后将接口的访问地址设置在支付宝应用网关
在支付宝的开放平台中设置如图:
在这里插入图片描述

如何接收支付宝异步通知(应用网关接收请求)

上面配置好接口后,我就来接收post请求的数据,又不知道请求参数是啥?然后看文档、问客服、百度。然后使用file_get_contents(“php://input”);能接收到参数。并把接收到的参数保存在一个文件里面看看他的数据格式:
在这里插入图片描述
当我看到他的第一眼还以为是一个get请求。像这种post请求参数接收的时候没有参数名,并且还使用&拼接多个参数,处理起来有点小难受。

将&连接的参数分割成数组实例:

下面的实例里我将我的业务代码删除了的,要是想看拆分后的数据可以在sites.txt中将参数复制用postman看返回参数的具体值。
在这里插入图片描述

public function index(){
		//接收参数
        $postStr = file_get_contents("php://input");
		//调用支付宝的sdk包
        $aop = new \ AopClient ();

        //支付宝公钥赋值,配置在config文件中
        $aop->alipayrsaPublicKey=config('alipayrsaPublicKey');
        
        //签名方式
        $sign_type="RSA2";
        
        // 接收到的参数转urldecode
        $_POST=urldecode($postStr);
         
        // 测试将支付宝给的参数保存在public/sites.txt下
        // $file="sites.txt";
        // $url=str_replace("\\","/",  ROOT_PATH);
        
        // $url=$url."public/" .trim($file);

        // file_put_contents($url,$_POST);
    
        //把字符串通过&符号拆分成数组
        $data = explode('&', $_POST);

        $params = array();
        //遍历数组
        foreach ($data as $param) {
            $item = explode('=', $param,"2");
            
            // dump($item);
            $params[$item[0]] = $item[1];
        }
        
       	//校验支付宝传入的参数是否被修改过,只要不是支付宝发送的参数都是false
        $flag = $aop->rsaCheckV1($params, null, $sign_type);
        if (!$flag){
            return;
        }
        //打印分割好的值,在取对应的key即可
        dump($params);

难点

当时写这个接口难就难在是第三方来调用你的接口,然后接收参数得跟着别人的要求来,最关键的是我还不能打印接收到的参数。还遇到我的phpstorm不能DEBUG。