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。这就很难受,所以我写了此篇博客;