$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工具
相关专题
本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。
0
2026.01.22
无人机驾驶证(CAAC执照)报考需年满16周岁,初中以上学历,身体健康(矫正视力1.0以上,无严重疾病),且无犯罪记录。个人需通过民航局授权的训练机构报名,经理论(法规、原理)、模拟飞行、实操(GPS/姿态模式)及地面站训练后考试合格,通常15-25天拿证。
29
2026.01.21
热门下载
相关下载
精品课程
共6课时 | 0.3万人学习
共92课时 | 5.9万人学习
共121课时 | 7.1万人学习
最新文章







