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;
}