0

0

APP 调微信支付功能

php中文网

php中文网

发布时间:2018-04-04 21:50:22

|

2023人浏览过

|

来源于php中文网

原创

 $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 . '';
		}
		$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;
	}

}

相关文章

微信app下载
微信app下载

微信是一款手机通信软件,支持通过手机网络发送语音短信、视频、图片和文字。微信可以单聊及群聊,还能根据地理位置找到附近的人,带给大家全新的移动沟通体验,有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

0

2026.01.22

html编辑相关教程合集
html编辑相关教程合集

本专题整合了html编辑相关教程合集,阅读专题下面的文章了解更多详细内容。

38

2026.01.21

三角洲入口地址合集
三角洲入口地址合集

本专题整合了三角洲入口地址合集,阅读专题下面的文章了解更多详细内容。

19

2026.01.21

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

255

2026.01.21

妖精漫画入口地址合集
妖精漫画入口地址合集

本专题整合了妖精漫画入口地址合集,阅读专题下面的文章了解更多详细内容。

64

2026.01.21

java版本选择建议
java版本选择建议

本专题整合了java版本相关合集,阅读专题下面的文章了解更多详细内容。

3

2026.01.21

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

14

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

6

2026.01.21

无人机驾驶证报考 uom民用无人机综合管理平台官网
无人机驾驶证报考 uom民用无人机综合管理平台官网

无人机驾驶证(CAAC执照)报考需年满16周岁,初中以上学历,身体健康(矫正视力1.0以上,无严重疾病),且无犯罪记录。个人需通过民航局授权的训练机构报名,经理论(法规、原理)、模拟飞行、实操(GPS/姿态模式)及地面站训练后考试合格,通常15-25天拿证。

29

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号