在微信开发以前须要了解一下内容:php
微信公众号的编辑者模式和开发者模式的区别?api
编辑者模式只是单纯图文编辑,相似在word下的操做。开发者模式是微信团队开放给第三方服务器接入微信服务器与微信用户交互的一种方式(微信用户->客户,微信服务器->蛋糕店售卖员,第三方服务器->蛋糕师):微信用户发送请求给微信服务器把拿到微信用户的请求经过开发者模式的URL(如http://www.baidu.com/index.php就是:第三方服务器地址/入口文件)发给第三方服务器。浏览器
理解上面的工做原理的流程以后,跟着下面的步骤来作慢慢来感觉一下:服务器
第一步(注册配置公众号测试号):微信
须要有一个认证的微信服务号,若是没有能够申请一个测试号:微信开发
打开浏览器登陆网址:点击这里app
2.登陆后微信团队会给你一个appID和appsecret,接下来你要填写的就是你的本身的URL和Token了(URL是你的服务器的访问域名,若是没有本身的线上服务器的话能够看下面的第二步,若是有的话跳到第三步;Token是微信服务器与你服务器链接起来的一个密钥(yourtoken)(一串随意的字符串(本身定义便可,跟微信访问你项目入口文件的一致便可)请看下面第三步))函数
第二步(ngrok映射自定义域名访问本地项目):post
第一种状况:有本身线上服务器的而且绑定域名的,跳过。测试
第二种状况:没有本身线上服务器的,只有本地服务器和我的项目的,须要进行如下的配置:
{1.下载并解压适合你的版本
2.用记事本打开 run.bat 修改方法是:把myapp 改成你本身的本地项目文件夹名称
(如个人的是wjxwxt);
3.双击 run.bat ,配置成功后会出现如下画面:
}
2.自定义域名访问本身的项目(也就是配置 http://yourprojectname.ngrok.natapp.cn
(这个也是你在微信公众测试号配置的URL了)) 这里具体怎么作能够看我以前分享的文章:点击查看
第三步(本地项目入口文件配置):
1.新建一个 wechat_index.php,代码以下:
<?php /** * wechat php test */ //define your token define("TOKEN", "yourtoken"); $wechatObj = new wechatCallbackapiTest(); $wechatObj->valid(); //封装一个类,用来实例化后,调用方法给微信服务器 class wechatCallbackapiTest { public function valid() { $echoStr = $_GET["echostr"]; //valid signature , option if($this->checkSignature()){ echo $echoStr; exit; } } public function responseMsg() { //get post data, May be due to the different environments $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract post data if (!empty($postStr)){ /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection, the best way is to check the validity of xml by yourself */ libxml_disable_entity_loader(true); $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $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 = "Welcome to wechat world!"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }else{ echo "Input something..."; } }else { echo ""; exit; } } private function checkSignature() { // you must define TOKEN by yourself if (!defined("TOKEN")) { throw new Exception('TOKEN is not defined!'); } $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); // use SORT_STRING rule sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } } ?>
上述代码也能够简洁为以下:
<?php //1.将timestampe,nonce,token按字典序排序 $timestamp = $_GET['timestamp']; $nonce = $_GET['nonce']; $token = 'jinhuaWeixin'; $signature = $_GET['signature']; $array = array($timestamp, $nonce, $token); sort( $array ); //2.将排序后的三个参数拼接以后用sha1加密 $tmpstr = implode( '', $array ); $tmpstr = sha1( $tmpstr ); //3.将加密后的字符串与signature进行对比,判断该请求是否来自微信 if( $tmpstr == $signature ){ echo $_GET['echostr']; } ?>
2.回到微信公众测试号 填写好 URL 和Token 以后提交,若是配置成功即说明你的项目已经能够在ngrok的映射下成功和微信服务器链接成功,接下来就是把入口文件的 $wechatObj->valid();调用的方法改成调用其它方法来实现你的需求了,也能够在你调用的方法里面实例化你本人封装好的类来调用你的方法或者直接调用函数。
^_^爱分享,爱生活。