$this -> appid,
'mch_id' => $this -> mch_id,
'nonce_str' => $this -> randomCreateStr(),
'body' => $body, 'out_trade_no' => $order,
'total_fee' => $total,
'spbill_create_ip' => $this->getIp(),
'notify_url' => $this->notify,
'trade_type' => 'APP'];
//生成签名
$sign = $this -> createSign($array);
$array['sign'] = $sign;
//生成xml
$xml = $this -> createXml($array);
//发送给微信服务器
$WeChatXml = $this -> postUrl($this -> url, $xml);
//转为数组
$WeChatArray = $this -> XMLDataParse($WeChatXml);
//进行判定
if ($WeChatArray['return_code'] != 'SUCCESS' || $WeChatArray['result_code'] != 'SUCCESS') {
exit(json_encode(['error' => 1, 'message' => $WeChatArray], JSON_UNESCAPED_UNICODE));
}
//对微信返回的签名进行验证是否正确
if (!$this -> verifySign($WeChatArray)) {
exit(json_encode(['error' => 1, 'message' => '微信返回签名失败'], JSON_UNESCAPED_UNICODE));
}
//组合要给APP 发送的数据
$AppArray = [
'appid' => $this -> appid,
'partnerid' => $this -> mch_id,
'prepayid' =>$WeChatArray['prepay_id'],
'package' =>'Sign=WXPay',
'noncestr'=>$this->randomCreateStr(),
'timestamp'=>time()
];
//进行签名
$sign = $this -> createSign($AppArray);
$AppArray['sign'] = $sign;
//转换成JSON 返回给APP
exit(json_encode($AppArray));
}
/**
*微信回调地址接口
*
*
*
*/
public function notify() {
//接收微信xml格式信息
$xmlData = file_get_contents('php://input');
//转换为数组
$array = json_decode($xmlData,TRUE);
$array = $this-> XMLDataParse($xmlData);
//对微信返回的签名进行验证是否正确
if (!$this -> verifySign($array)) {
exit(' ');
}
/**
* !!!注意: 下面的就是连接数据库了,做进一步处理
*
*
*
*/
//下面是处理完逻辑,返回给微信服务器的
//exit(' ');
}
private function postUrl($url, $paramsArray) {
$curl = curl_init();
// 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url);
// 要访问的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
// 跳过证书检查
//curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
//curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
//curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
//curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
// 自动设置Referer
curl_setopt($curl, CURLOPT_POST, 1);
// 发送一个常规的Post请求
curl_setopt($curl, CURLOPT_POSTFIELDS, $paramsArray);
// Post提交的数据包
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
// 设置超时限制防止死循环
curl_setopt($curl, CURLOPT_HEADER, 0);
// 显示返回的Header区域内容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// 获取的信息以文件流的形式返回
$tmpInfo = curl_exec($curl);
// 执行操作
if (curl_errno($curl)) {
echo 'Errno' . curl_error($curl);
//捕抓异常
}
curl_close($curl);
// 关闭CURL会话
return $tmpInfo;
// 返回数据,json格式
}
/**
* 获取IP 地址
*
*
*/
private function getIp() {
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip = getenv("HTTP_CLIENT_IP");
else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip = getenv("REMOTE_ADDR");
else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
$ip = $_SERVER['REMOTE_ADDR'];
else
$ip = "unknown";
return ($ip);
}
/**
* 验证签名
*
*
*/
private function verifySign($array) {
$sign = $array['sign'];
unset($array['sign']);
$s = $this -> createSign($array);
return $s == $sign ? TRUE : FALSE;
}
/**
* 生成签名
* @param $array array 参数 以关联数组 的形势
*
* @return str 签名
*/
private function createSign($array) {
ksort($array);
$stringA = '';
foreach ($array as $ke => $value) {
$stringA .= $ke . '=' . $value . '&';
}
//$stringA = http_build_query($array);
$stringSignTemp = $stringA . "key=" . $this -> key;
$sign = strtoupper(md5($stringSignTemp));
return $sign;
}
/**
* 生成XML 格式文件
* @param $array array 参数 以关联数组 的形势
*
* @return str xml字符串
*/
private function createXml($array) {
$xml = '';
foreach ($array as $key => $value) {
$xml .= '<' . $key . '>' . $value . '' . $key . '>';
}
$xml .= ' ';
return $xml;
}
/**
* 随机生成32位字符串
* @return str 32位字符串
*/
private function randomCreateStr() {
return strtoupper(md5(microtime(TRUE) . mt_rand(0, 9999)));
}
/**
* xml格式数据解析函数
* @param $xml str 微信返回的xml格式字符串
*
* @return array 数组
*/
private function XMLDataParse($xml) {
$array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $array_data;
}
} 0
0
相关文章
微信企业付款回调PHP怎么接收_处理企业付款异步通知数据教程【教程】
微信JSAPI支付回调PHP怎么接收_处理JSAPI异步通知数据方法【指南】
php485怎么读取传感器数据_php485对接温湿度传感器教程【教程】
微信支付回调PHP怎么接收_处理微信异步通知数据教程【说明】
php485怎么发送定时数据_php485定时任务串口发送实现方法【汇总】
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。
20
2026.01.20
本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。
19
2026.01.19
热门下载
相关下载
精品课程
共6课时 | 0.3万人学习
共92课时 | 5.9万人学习
共121课时 | 7.1万人学习
最新文章








