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($postStr, null, $sign_type);
if (!$flag){
return;
}
//打印分割好的值,在取对应的key即可
dump($params);
难点
当时写这个接口难就难在是第三方来调用你的接口,然后接收参数得跟着别人的要求来,最关键的是我还不能打印接收到的参数。还遇到我的phpstorm不能DEBUG。这就很难受,所以我写了此篇博客;