/**
* 微信支付 通知
*
* @param Request $request
*/
public function notify(Request $request)
{
// 接收微信推送的数据
$data = file_get_contents('php://input');
// 将接收的数据写入日志文件
$path = app()->storagePath('wxPay/' . date('Ym'));
if (!file_exists($path)) {
mkdir($path, 0755, true);
}
$path .= '/' . date('Ymd') . '.txt';
// 处理微信返回的xml格式数据 转换为 数组
libxml_disable_entity_loader(true);
$data = json_decode(json_encode(simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
file_put_contents($path, date('Y-m-d H:i:s') . "\n Content:" . json_encode($data) . "\n\n", FILE_APPEND);
// 数组排序计算签名
ksort($data);
$buff = '';
foreach ($data as $k => $v) {
if ($k != 'sign') {
$buff .= $k . '=' . $v . '&';
}
}
unset($k, $v);
$stringSignTemp = $buff . 'key=' . $this->C('WX_PAY_SECRET');//key为证书密钥
$sign = strtoupper(md5($stringSignTemp));
// 判断算出的签名和通知信息的签名是否一致
// 签名正确才进行处理
if ($sign == $data['sign']) {
// 业务处理逻辑
// .......
//处理完成之后,告诉微信成功结果
echo '<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
</xml>';
exit();
}
}
网友评论