PHP对APP微信支付异步回调的处理

1、收取微信异步回调参数

//获取返回的xml格式数据
$payXml = file_get_contents("php://input");
//将xml格式转化为json格式
$jsonXml = json_encode(simplexml_load_string($payXml, 'SimpleXMLElement', LIBXML_NOCDATA));
//将json格式转成数组格式
$result = json_decode($jsonXml, true);

2、是否支付成功并处理自己的业务逻辑

if ($result) {
	//如果成功返回
	if ($result['return_code'] == 'SUCCESS') {
	    if ($result['result_code'] == 'SUCCESS') {
	    	// sign 值校验
	        // 校验时不包含返回的 sign 字段,需踢除 sign 字段
	        foreach($result as $k => $v) {
	            if ($k == 'sign') {
	                $sign = $result[$k];
	                unset($result[$k]);
	            };
	        }
	        //按字典排序
	        ksort($result);
	        //转为 url 键值对
	        $signTemp = http_build_query($result);
	        //md5处理,$key 为微信商户平台的 api 安全密钥
	        $key = '';
	        $signTemp = md5($signTemp.'&key='.$key);
	        //转大写得最终 sign 值
	        $resultSign = strtoupper($signTemp);
	        //如果sign值正确
	        if ($sign === $resultSign) {
	            try {
	            	//……
	            	//……
	            	//最后返回结果给微信
		            $successArray = array(
		                'return_code' => 'SUCCESS',
		                'return_msg'  => 'OK'
	                );
	                return $this->arrayToXml($successArray);
	            } catch (\Exception $e) {
	            	$e->getMessage();
	            }
	        }
	    } else {
	        return false;
	    }
	} else {
	    return false;
	}
}

3、数组转xml

function arrayToXml($arr)
{
    $xml = "<xml>";
    foreach ($arr as $key=>$val)
    {
        if (is_numeric($val))
        {
            $xml.="<".$key.">".$val."</".$key.">";
        }
        else
            $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
    }
    $xml.="</xml>";
    return $xml;
}
发布了22 篇原创文章 · 获赞 16 · 访问量 1551

猜你喜欢

转载自blog.csdn.net/ZhangJiWei_2019/article/details/103292006