php微信公众号开发

1.注册微信公众号

2.申请微信公众号测试账号 

测试号申请地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

(填写好之后不要提交)

3.配置服务器与微信公众号牵手

 进入这个目录,打开index.php,代码如下:再点击提交按钮,显示TOKEN验证成功

<?php

$appsecret  = '03e*********e9707d';
	
$appid = 'wxc6a******3da1c';

$token = TOKEN;

$signature = $_GET["signature"];

$timestamp = $_GET["timestamp"];

$nonce = $_GET["nonce"];


if( $_GET['echostr'] ){
	
	$tmpArr = array($token, $timestamp, $nonce);

	sort($tmpArr, SORT_STRING);

	$tmpStr = implode( $tmpArr );

	$tmpStr = sha1( $tmpStr );

	//file_put_contents('msg.txt',json_encode($_GET));
	
         if( $tmpStr ==  $signature ){
       	    echo $_GET['echostr'];
         }else{
             return false;
         }


}else{	
	require_once 'php/wxBizMsgCrypt.php';
	
	//$msg_sign = $_GET['msg_signatrue'];
	
	$post_data =  file_get_contents('php://input') ; //用户发送的数据
	file_put_contents('test.txt',json_encode($post_data));

	//$pc = new WXBizMsgCrypt($token,$appsecret,$appid);
	// $msg_decrypt =  $pc->decryptMsg($msg_sign,$timestamp,$nonce ,$post_data ,$msg );//安全模式下解密  $msg是解密后的结果集
	
	$xmlToObj = simplexml_load_string($post_data);
		
	$msg_type  =   $xmlToObj->MsgType;
	$msg_content  =  $xmlToObj->Content;
         $event   =  $xmlToObj->Event; //事件类型,subscribe(订阅)、unsubscribe(取消订阅)
	
	//file_put_contents('123.txt',$msg_content.$msg_type);
	if( $msg_type == "text"){
		if( $msg_content == "图文" ){
		    echo transTexts($xmlToObj ); 
		     return false;
		}elseif( $msg_content == "链接" ){  
 			//echo transTexts($xmlToObj ); 
			
			 echo aaa($xmlToObj ); 
		            return false;

		}
		//file_put_contents('6.txt',json_encode($xmlToObj));

		echo text($xmlToObj );
	  }elseif($msg_type == "image"  ){
		//file_put_contents('img.txt',json_encode($xmlToObj));

		echo img($xmlToObj );

	 }elseif(  $msg_type ==  "voice"){//语音
	
	       echo voice($xmlToObj );

	}elseif( $msg_type=='event' ){
	$event_key  = $xmlToObj->EventKey; //对应caidan.json中的key

		if( $event_key == "test1"){
			echo transTexts($xmlToObj ); 
		}
	
            	        if($event=='subscribe'){  //关注
                       	echo transTexts($xmlToObj ); 
              	       }elseif($event=='unsubscribe'){  //取关
                             file_put_contents('info.txt','unsubscribe'."\n");
                        }
                }
	

	
	
	
}



function text($obj){
        $xml = "<xml>
  <ToUserName><![CDATA[%s]]></ToUserName>
  <FromUserName><![CDATA[%s]]></FromUserName>
  <CreateTime>%s</CreateTime>
  <MsgType><![CDATA[text]]></MsgType>
  <Content><![CDATA[%s]]></Content>
  <MsgId>%d</MsgId>
</xml>";
                                                                                
        $result = sprintf($xml,$obj->FromUserName,$obj->ToUserName,time(),$obj->Content,$obj->MsgId);            
        return $result ;                                                                              
                                                                                                     
}

function img($obj){
        $xml = '<xml>                                                                                
                <ToUserName><![CDATA[%s]]></ToUserName>                                              
                <FromUserName><![CDATA[%s]]></FromUserName>                                          
                <CreateTime>%s</CreateTime>                                                          
                <MsgType><![CDATA[image]]></MsgType> 
                <Image><MediaId><![CDATA[%s]]></MediaId></Image>                                     
         </xml>';                                                                                    
        $result = sprintf($xml,$obj->FromUserName,$obj->ToUserName,time(),$obj->MediaId);            
        return $result;                                                                              
                                                                                                    
}

function voice($obj){                                                                           
        $xml = '<xml>                                                                                
                <ToUserName><![CDATA[%s]]></ToUserName>                                              
                <FromUserName><![CDATA[%s]]></FromUserName>                                          
                <CreateTime>%s</CreateTime>                                                          
                <MsgType><![CDATA[voice]]></MsgType>                                                 
                <Voice><MediaId><![CDATA[%s]]></MediaId></Voice>                                     
         </xml>';                                                                                    
        $result = sprintf($xml,$obj->FromUserName,$obj->ToUserName,time(),$obj->MediaId);            
        return $result;        
}




function transTexts($obj){
        $xml = '<xml> 
                <ToUserName><![CDATA[%s]]></ToUserName> 
                <FromUserName><![CDATA[%s]]></FromUserName> 
                <CreateTime>%s</CreateTime> 
                <MsgType><![CDATA[news]]></MsgType> 
                <ArticleCount>2</ArticleCount>
                <Articles>
                        <item>
                                <Title><![CDATA[ttttttttttt]]></Title> 
                                <Description><![CDATA[dddddddddd]]></Description>
                                <PicUrl><![CDATA[%s]]></PicUrl>
                                <Url><![CDATA[%s]]></Url>
                        </item>
                        <item>                                                   
                                <Title><![CDATA[aaaaaaaaaa]]></Title>           
                                 <Description><![CDATA[bbbbbbbb]]></Description>
                                <PicUrl><![CDATA[%s]]></PicUrl>                  
                                <Url><![CDATA[%s]]></Url>                        
                        </item>                                                  
                </Articles>
         </xml>';
        $picUrl = 'http://www.lampol-blog.com/static/home/images/logo.png';
        $url = 'http://www.lampol-blog.com/detail/aid/MTE4ZHdENmJ6UkJFZmJxWDB6MTZ4UG1uWnRsWnMxRzBwK3RDRXVHQg%3D%3D';
        $result = sprintf($xml,$obj->FromUserName,$obj->ToUserName,time(),$picUrl,$url,$picUrl,$url);
      //  file_put_contents('info.txt',$result."\n");
        return $result;
 
}


function aaa($obj){
$xml = "<xml>
  <ToUserName><![CDATA[%s]]></ToUserName>
  <FromUserName><![CDATA[%s]]></FromUserName>
  <CreateTime>%s</CreateTime>
  <MsgType><![CDATA[link]]></MsgType>
  <Title><![CDATA[公众平台官网链接]]></Title>
  <Description><![CDATA[公众平台官网链接]]></Description>
  <Url><![CDATA[https://www.baidu.com]]></Url>
 <MsgId>1234567890123456</MsgId>
 </xml>";                                                                
        $result = sprintf($xml,$obj->FromUserName,$obj->ToUserName,time());      
 file_put_contents('link.txt',$result."\n");
      
        return $result ; 



}





?>

========================获取token===================

 

===================自定义菜单===========================

caidan.php 

<?php

$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wxc6****da1c&secret=03ec642*****79788e9707d";


$access_token = json_decode(file_get_contents($url),true);


 
 
file_put_contents('/home/www/blog/token.txt',$access_token['access_token']);

$menu_json = file_get_contents('caidan.json');

$msg = http_post($access_token['access_token'],$menu_json);
 
 
echo $msg;
 
function http_post($access_token,$data){
 
        $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token;
 
        $ch = curl_init();
 
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        $res = curl_exec($ch);
        curl_close($ch);
 
        return $res;
 
}









?>

 

caidan.json

{
     "button":[
     {    
          "type":"click",
          "name":"今日歌曲",
          "key":"test1"
      },
      {
           "name":"菜单",
           "sub_button":[
           {    
               "type":"view",
               "name":"搜索",
               "url":"http://www.soso.com/"
            },
	    {    
               "type":"scancode_push",
               "name":"扫码推送",
	      "key":"saomatui1",
               "sub_button":[]       
	     },
	    {    
               "type":"scancode_waitmsg",
               "name":"扫码提示",
	      "key":"saomatui1_2",
                "sub_button":[]    
            },

              {
               "type":"click",
               "name":"赞一下我们",
               "key":"V1001_GOOD"
            }]
       }]
 }

 

然后执行candan.php文件

 

 

 

 

 

 

phpWechat 是由一个具有多年行业开发经验的前端 UI 设计师、PHP开发工程师组成的团队设计、研发的一套的微信公众平台管理系统,您可以瞬间完成一个公共号或者PC站或者两者皆有的平台搭建。 phpWeChat 微信+网站开发框架功能亮点: 1、100%开源,没有任何加密文件 phpWeChat核心文件100%开源,没有任何加密文件,开发者可以放心使用而无需担心留有后门程序等。 2、程序轻量级,一天读完所有代码 核心框架压缩包只有2.66M,十分利于开发者迅速阅读全部代码。 3、代码严谨,结构清晰 phpWeChat使用MVC开发模式,各个功能模块之间独立并目录结构统一。开发者可迅速掌握phpWeChat的框架结构。 4、二次开发文档十分完善 我们提供了完善的phpWeChat二次开发文档,便于开发者学习与查阅。 5、高度集成微信接口 phpWeChat高度集成了微信公共号的自动回复、菜单管理、素材管理、模板消息、粉丝管理、微信支付等常用接口,您只需一个函数或2/3行代码即可实现原本需要很费时费力才能开发的功能。 6、phpWeChat也是一个PC(网站)开发框架和CMS 慢慢您会发现,phpWeChat是一个更接近CMS功能的框架。 7、高度封装常用开发功能 只需一两行固定的代码,您便可以写出列表分页、微信支付、文件上传、邮件发送、短信发送等功能。 8、数据结构合理,负载强劲 phpWeChat集成了常见的内存级缓存(MemCache)、文件缓存处理方案,使得系统更符合大数据、大并发的公共号或网站使用。 9、集成应用市场,功能拓展一瞬间 phpWeChat集成了应用市场并在线安装应用的功能,您可以在一瞬间安装完成其他开发开发的功能模块。 phpWeChat安装方法: 将下载的程序压缩包(zip格式)解压后,将全部文件和文件夹上传至网站根目录。然后输入域名/install.php 即可进入安装程序。 注意:安装phpWeChat前请先创建好phpWeChat所需的数据库。 phpWeChat 目录结构: addons 功能模块目录 admin 公用后台目录 api 插件目录 data 数据缓存目录 install 安装程序目录,安装后请改名或删除 include 公用操作类目录 statics 静态文件目录 template 视图(模板)目录 upload 上传文件存放目录 phpWeChat 更新日志: 新版v1.0.3发布: phpWeChat PC+微信公众号开发核心框架v1.0.3针对v1.0.2版本出现的问题,主要修复了和增加了以下功能: 1、优化自定义模块操作; 2、优化安装过程; 3、修复一处在线支付的PHP版本兼容问题; 4、修复一处自定义模块的问题; 5、修复后台模块管理显示未知版本的bug; 6、修复粉丝行为IP报错的Bug; 7、删除一些冗余代码; 8、修复消息模板不存在时,一直提示[同步中]的bug。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值