php微信支付回调完整版案例 V2

代码如下,配置商户支付密钥后可以直接用

// 配置信息
$key = 'your_key';  // 商户支付密钥
 
// 获取回调数据
$xml = file_get_contents('php://input');
$data = fromXml($xml);
 
// 验证签名
$sign = $data['sign'];
unset($data['sign']);
if (makeSign($data, $key) != $sign) {
    exit('fail');
}
 
// 处理业务逻辑
if ($data['result_code'] == 'SUCCESS' && $data['return_code'] == 'SUCCESS') {
    // 支付成功,处理订单逻辑
    // ...
    // 返回结果
    exit('<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>');
} else {
    // 支付失败,记录日志
    // ...
    // 返回结果
    exit('<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[ERROR]]></return_msg></xml>');
}
 
// 生成签名
function makeSign($data, $key) {
    ksort($data);
    $str = '';
    foreach ($data as $k => $v) {
        if ($v != '' && !is_array($v)) {
            $str .= $k.'='.$v.'&';
        }
    }
    $str .= 'key='.$key;
    return strtoupper(md5($str));
}
 
// xml转数组
function fromXml($xml) {
    libxml_disable_entity_loader(true);
    return json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
}

#测试可用

THE END