`
happysoul
  • 浏览: 404101 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

PHP微信服务器端代码

阅读更多
<?php
//引入微信提供的包省的找依赖库
include_once "wxBizMsgCrypt.php";
  
//你自己的token、分配给你的appid和密码
define("TOKEN", "yourtoken");
define("APPID", "wxb21b4b3b11111111");
define("APPSECRET", "se8c89e213c8efab31d53fc98s6d2222");

$wechatObj = new wechatCallbackapiTest();

//验证服务器
if(isset($_GET["openid"])){
	
	//检查token
	$access_token = $wechatObj->getToken();
    $wechatObj->responseMsg();

}else if (isset($_GET["echostr"])){
	//服务器token验证
    $wechatObj->valid();
}else{
	echo "empty";
}


class wechatCallbackapiTest  
{  
    public function valid()  
    {  
        $echoStr = $_GET["echostr"];
  
        //valid signature , option  
        if($this->checkSignature()){  
            echo $echoStr;  
            exit;  
        }
    }


    private function checkSignature()  
    {  
        $signature = $_GET["signature"];  
        $timestamp = $_GET["timestamp"];  
        $nonce = $_GET["nonce"];      
                  
        $token = TOKEN;  
        $tmpArr = array($token, $timestamp, $nonce);  
        sort($tmpArr);  
        $tmpStr = implode( $tmpArr );  
        $tmpStr = sha1( $tmpStr );  
        
        if( $tmpStr == $signature ){  
            return true;  
        }else{  
            return false;  
        }  
    }

    public function responseMsg()
    {

		$postStr = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : file_get_contents("php://input");
		//$fp = fopen("./post_data.txt", "w+");
		//fwrite($fp, $postStr);
		//fclose($fp);

		$postObj = simplexml_load_string($postStr,'SimpleXMLElement', LIBXML_NOCDATA);
        $RX_TYPE = trim($postObj->MsgType);

           switch($RX_TYPE)
           {
           case "text":
               $resultStr = $this->handleText($postObj);
               break;
           case "event":
               $resultStr = $this->handleEvent($postObj);
               break;
           default:
               $resultStr = "Unknow msg type: ".$RX_TYPE;
               break;
         }
         echo $resultStr;
    }

	//文本消息
    public function handleText($postObj)
    {
        $fromUsername = $postObj->FromUserName;
        $toUsername = $postObj->ToUserName;
        $keyword = trim($postObj->Content);
        $time = time();
        $textTpl = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[%s]]></MsgType>
                    <Content><![CDATA[%s]]></Content>
                    <FuncFlag>0</FuncFlag>
                    </xml>";             
        if(!empty( $keyword ))
        {
            $msgType = "text";
            $contentStr = "你好啊^_^";
            $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
            echo $resultStr;
        }else{
            echo "Input something...";
        }
    }

    public function handleEvent($object)
    {
        $contentStr = "";
        switch ($object->Event)
        {
			//关注事件
            case "subscribe":
                $contentStr = "感谢您关注【我爱财】"."\n"."微信号:happysoul0";
                break;
            default :
                $contentStr = "Unknow Event: ".$object->Event;
                break;
        }
        $resultStr = $this->responseText($object, $contentStr);
        return $resultStr;
    }
    
	//输出返回信息
    public function responseText($object, $content, $flag=0)
    {
        $textTpl = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[text]]></MsgType>
                    <Content><![CDATA[%s]]></Content>
                    <FuncFlag>%d</FuncFlag>
                    </xml>";
        $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);
        return $resultStr;
    }

	
	//获取token并写入本地
	function getToken(){
		//写入本地的文件名,虽然这样不安全,暂时可以这么调试
		$fileName = "./happysoul_access_token.json";

		$appid=APPID;
		$appsecret=APPSECRET;
		if(!is_file($fileName)){
			$f = fopen($fileName, "w");
			fclose($f);
		}
		$file = file_get_contents($fileName,true);
		$result = json_decode($file,true);
		if (time() > $result['expires']){
			$data = array();
			$data['access_token'] = $this->getNewToken($appid,$appsecret);
			$data['expires']=time()+7000;
			$jsonStr =  json_encode($data);
			$fp = fopen($fileName, "w");
			fwrite($fp, $jsonStr);
			fclose($fp);
			return $data['access_token'];
		}else{
			return $result['access_token'];
		}
	}
	function getNewToken($appid,$appsecret){
		$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
		$access_token_Arr =  $this->https_request($url);
		return $access_token_Arr['access_token'];
	}
	function https_request ($url){
			$ch = curl_init();
			curl_setopt($ch, CURLOPT_URL, $url);
			curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
			$out = curl_exec($ch);
			curl_close($ch);
			return  json_decode($out,true);
	}

}  
  
?>


附件是微信提供的包,包含 java php c++ c# python


公众平台 - 开发 - 基本配置 (服务器配置)记得验证好了服务器之后要点启用
关注了你的人给你公众号发消息才能发送到你的服务器上
分享到:
评论

相关推荐

    PHP微信H5支付完整代码(包含回调后台代码),改好商户资料和您回调地址即可使用

    PHP微信H5支付是微信支付服务中的一种,适用于在移动端网页上进行支付的场景。这个压缩包提供的是一套完整的PHP实现微信H5支付的代码,包括了前端展示和后端处理逻辑,使得开发者能够快速集成到自己的项目中。以下是...

    php微信小程序全套源代码(后台和小程序)

    2. wafer-session-server-master.zip:这可能是关于会话管理的服务器端代码,用于处理用户的登录状态和会话信息,确保用户在小程序中的操作能够得到正确的服务响应。 3. wafer-master.zip:这可能是整个Wafer SDK或...

    微信服务器url验证代码

    微信公众号开发,小程序开发服务器端验证代码(PHP)

    微信小程序支付API-V3 PHP完整代码(包括微信小程序端)

    本API的PHP实现提供了服务器端处理支付请求的全部功能,包括订单创建、预支付、支付结果查询以及退款等关键操作。下面我们将详细探讨相关知识点。 1. **微信小程序支付流程** - **订单创建**:在用户准备支付时,...

    微信时间代码

    在IT行业中,编程语言是构建数字世界的基石,而PHP作为一种广泛应用的服务器端脚本语言,尤其在网页开发中占据重要地位。"微信时间代码"这个话题实际上是在谈论如何利用PHP来获取并显示当前系统时间。这是一项基础但...

    50款微信游戏php源代码

    PHP语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要应用于服务器端的脚本程序。 2. **PHP在微信游戏开发中的作用**: - **后端逻辑处理**:通过PHP处理游戏的逻辑运算,如玩家数据管理、游戏进度保存...

    微信公众号连接服务器端验证PHP

    微信公众号开发,微信平台连接个人服务器时用于验证的代码文件;用法:上传部署到服务器即可

    微信PC端扫码控制器代码

    微信扫码控制器代码是实现这一功能的关键部分,它连接了用户、微信服务器和应用程序之间的交互流程。本文将详细解析“微信PC端扫码控制器代码”的核心概念、工作原理以及相关知识点。 首先,我们来看...

    app微信支付,php服务器端参考

    当用户支付成功,微信服务器会发送通知到此URL,服务器端需要验证这些通知的合法性,并根据通知内容进行相应的业务处理,比如更新订单状态、发货等。 6. **安全与证书**: 文件`1218891802_20140425185952.pfx`可能...

    微信小程序前后端代码合集,50款+

    文件包含电商、外卖、天气、记账、考试、理财、游戏、音乐、地图、旅游、视频工具等50多款各行各业的微信模版小程序代码集合,后端语言采用PHP和java,适合新手学习或者二开,再或者直接使用都是可以的,源码搭建...

    微信小程序通过php后端解密后获得微信步数

    3. **验证签名**:signature是使用微信服务器的公钥对header和payload进行RSA-SHA256加密得到的,服务器端需要使用私钥来验证签名的正确性,以确保数据在传输过程中未被篡改。 4. **解析解密后的数据**:解密后的...

    微信小程序获取OpenID +php后端完整源代码

    - 部署时,确保PHP环境正常运行,将PHP端代码部署到服务器,并配置好URL以供小程序调用。 - 修改`config.php`中的AppID和AppSecret为实际的微信小程序配置信息。 - 测试时,首先在小程序端模拟用户授权登录,检查...

    基于PHP微信名片制作代码.zip

    【基于PHP微信名片制作代码.zip】是一个包含微信名片制作程序的压缩包,主要适用于那些希望在微信平台上创建个性化名片的用户。此程序的核心是利用PHP编程语言,结合微信的开放接口,来实现用户友好的、功能丰富的...

    企业微信SCRM系统源代码.zip

    2. **后端代码**:后端代码处理业务逻辑、数据处理和服务器通信,通常由Node.js、Python、Java或PHP等服务器端语言编写,可能使用Express、Django、Spring Boot等框架。 3. **数据库脚本**:数据库脚本用于创建和...

    微信小程序网上商城PHP代码(包括客户端和服务器端)

    在此项目中,微信小程序作为前端,负责展示数据和用户交互,而PHP服务器端则专注于数据处理和业务逻辑,两者通过API接口进行通信,如RESTful API,实现数据交换。 4. **网上商城功能**: 一个完整的网上商城系统通常...

    PHP微信开放平台扫码登录源码

    总的来说,这个PHP微信开放平台扫码登录源码涵盖了整个扫码登录的流程,包括获取授权、交换令牌、获取用户信息以及创建/绑定用户账户等步骤。通过研究和实践这个源码,开发者可以更好地理解和掌握微信扫码登录的实现...

    微信支付php案例

    PHP代码应包含证书的加载和管理逻辑,确保在请求微信服务器时使用正确的证书。 5. **回调通知处理**: 支付完成后,微信服务器会向商户服务器发送异步通知,告知支付结果。PHP代码需要实现一个接收并验证这些通知...

    微信php摇一摇代码

    尽管标题中提到了PHP,但实际上代码全部由JavaScript组成,且与微信服务器端交互相关的PHP代码未包含在内。此外,这段代码需要运行在支持`DeviceMotionEvent`的移动设备上,如智能手机等,才能正常工作。对于希望在...

    微信企业号二次验证接口PHP代码

    PHP是一种广泛使用的服务器端脚本语言,尤其适合Web开发。在实现微信企业号二次验证接口时,PHP将扮演处理请求和响应的角色。以下是实现这一功能的关键步骤: 1. **配置开发者模式**:首先,你需要在微信企业号的...

    PHP微信支付v3 完整实例

    PHP作为广泛使用的服务器端脚本语言,是实现微信支付接口的重要工具。此实例为PHP微信支付V3版本,包含了最新的支付流程和技术细节。 1. **微信支付V3简介** 微信支付V3是微信官方推出的新一代支付接口,提供了...

Global site tag (gtag.js) - Google Analytics