top

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);
}
// 配置信息 $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); }
// 配置信息
$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
icon
0
icon
打赏
icon
分享
icon
二维码
icon
海报