热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微信开发学习随笔(未整理)

<pre>1、微信开发中所有的回调文件中不能获取session、cookies等全局数据;<p><p><p><spansty

1、微信开发中所有的回调文件中不能获取session、COOKIEs等全局数据;

微信支付中调用支付连接后不能带参数,因为其接口中会进行重定向,导致参数丢失,目前的额解决方案是:先存入到数据库中,然后再去数据库中取。

2、判断是否是在微信浏览器中的方法:

  //判断是否在微信浏览器内
        if ( strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false ) {
		//在浏览器中
	}
3、微信企业号创建应用套件和应用的代码:
VerifyURL($sVerifyMsgSig, $sVerifyTimeStamp, $sVerifyNonce, $sVerifyEchoStr, $sEchoStr);
	if ($errCode == 0) {
		//
		// 验证URL成功,将sEchoStr返回
		// HttpUtils.SetResponce($sEchoStr);
		echo $sEchoStr;
	} else {
		print("ERR: " . $errCode . "\n\n");
	}
}

/*
------------使用示例二:对用户回复的消息解密---------------
用户回复消息或者点击事件响应时,企业会收到回调消息,此消息是经过公众平台加密之后的密文以post形式发送给企业,密文格式请参考官方文档
假设企业收到公众平台的回调消息如下:
POST /cgi-bin/wxpush? msg_signature=477715d11cdb4164915debcba66cb864d751f3e6×tamp=1409659813&nOnce=1372623149 HTTP/1.1
Host: qy.weixin.qq.com
Content-Length: 613





企业收到post请求之后应该
1.解析出url上的参数,包括消息体签名(msg_signature),时间戳(timestamp)以及随机数字串(nonce)
2.验证消息体签名的正确性。
3.将post请求的数据进行xml解析,并将标签的内容进行解密,解密出来的明文即是用户回复消息的明文,明文格式请参考官方文档
第2,3步可以用公众平台提供的库函数DecryptMsg来实现。
*/
	//$sReqData = file_get_contents("php://input");
	//file_put_contents("./aa.txt",json_encode($_REQUEST)."\n".$sReqData);
	//die;
	$sReqMsgSig = $_GET['msg_signature'];
	$sReqTimeStamp = $_GET['timestamp'];
	$sReqNOnce= $_GET['nonce'];
	$sReqData = file_get_contents("php://input");
	//file_put_contents("/aa.txt",$_GET['msg_signature']);
	//file_put_contents("/suiteId.txt",$_POST['SuiteId']);
	//$sReqData = "";
	$sMsg = "";  // 解析之后的明文
	$corpId = "tjfc10bff4ff686b13";
	$wxcpt = new WXBizMsgCrypt($token, $encodingAesKey, $corpId);
	$errCode = $wxcpt->DecryptMsg($sReqMsgSig, $sReqTimeStamp, $sReqNonce, $sReqData, $sMsg);
	
	if ($errCode == 0) {
		// 解密成功,sMsg即为xml格式的明文
		// TODO: 对明文的处理
		// For example:
		$xml = new DOMDocument();
		$xml->loadXML($sMsg);
		$suite_ticket = $xml->getElementsByTagName('InfoType')->item(0)->nodeValue;
		$InfoType = $xml->getElementsByTagName('InfoType')->item(0)->nodeValue;
		file_put_contents("./aa.txt",$errCode."\n******\n".$sMsg."\n******\n".$sReqData);
		if($InfoType == "suite_ticket"){
			$suite_ticket = $xml->getElementsByTagName('SuiteTicket')->item(0)->nodeValue;
			echo $suite_ticket;
			file_put_contents("./suite_ticket.txt",$suite_ticket);
		}
		$AuthCode = $xml->getElementsByTagName('AuthCode')->item(0)->nodeValue;
		if($InfoType == "create_auth"){
			//获取应用套件令牌
				echo "success";
				
				$AuthCode = $xml->getElementsByTagName('AuthCode')->item(0)->nodeValue;
				file_put_contents("./AuthCode.txt",$AuthCode);
				
		}
		
		
		//print("content: " . $content . "\n\n");
		// ...
		// ...
	} else {
		print("ERR: " . $errCode . "\n\n");
		//exit(-1);
	}
 
 
5、微信调用接口的方法:
 
 
	
 
 //post方式请求 
 
function curl_https($url,$data=array(),$header=array(),$timeout=30){
$ch = curl_init();
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); // 跳过证书检查
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);// 从证书中检查SSL加密算法是否存在
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
    curl_setopt($ch,CURLOPT_POST,true);
    curl_setopt($ch,CURLOPT_POSTFIELDS,json_encode($data,JSON_UNESCAPED_UNICODE));
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch,CURLOPT_TIMEOUT,$timeout);


$respOnse=curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
    if(!empty($error)){
        die($error);
}else{
return $response;
}
}
//get方式请求
function curl_get($url,$header=array(),$timeout=30){
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); // 跳过证书检查
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);// 从证书中检查SSL加密算法是否存在
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch,CURLOPT_TIMEOUT,$timeout);


    $respOnse=curl_exec($ch);
    $error = curl_error($ch);
    curl_close($ch);
    if(!empty($error)){
        die($error);
    }else{
        return $response;
    }
}
//获取access_token
function getAccessToken($appid,$appSecret){
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appSecret;
$res = curl_get($url);
$arr = json_decode($res,true);
return $arr['access_token'];
}
?>
 
 
6、上边调用微信接口的方法并不通用,参数有的可以使数组,有的智能直接传json格式的(个人觉得微信的接口文档很乱),比如创建自定义菜单的接口传递的post参数就只能直接传入json,而不是由数组转成json的。
 
 
 7、json_encode($arr)。函数如果不设置第二个参数,转出来的json格式中中文会被转成\u开头的字符串导致请求失败,所以正确的写法:json_encode($arr, 
 JSON_UNESCAPED_UNICODE); 这样中文会原样现实在json串中。 
 



推荐阅读
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • 解决PHP项目在服务器无法抓取远程网页内容的问题
    本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ... [详细]
  • HTML:  将文件拖拽到此区域 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • 本文探讨了在使用JavaMail发送电子邮件时,抄送功能未能正常工作的问题,并提供了详细的代码示例和解决方法。 ... [详细]
  • CentOS7通过RealVNC实现多人使用服务器桌面
    背景:公司研发团队通过VNC登录到CentOS服务器的桌面实现软件开发工作为防止数据外泄,需要在RealVNC设置禁止传输文件、访问粘贴板等策略过程&# ... [详细]
  • 1、编写一个Java程序在屏幕上输出“你好!”。programmenameHelloworld.javapublicclassHelloworld{publicst ... [详细]
  • binlog2sql,你该知道的数据恢复工具
    binlog2sql,你该知道的数据恢复工具 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • ASP.NET 进度条实现详解
    本文介绍了如何在ASP.NET中使用HTML和JavaScript创建一个动态更新的进度条,并通过Default.aspx页面进行展示。 ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 本文介绍了如何利用X_CORBA实现远程对象调用,并通过多个示例程序展示了其功能与应用,包括基础的Hello World示例、文件传输工具以及一个完整的聊天系统。 ... [详细]
author-avatar
永不放弃2702935973
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有